nac3core: irrt module get attribute id using name instead of hard code

This commit is contained in:
ychenfo 2022-01-11 17:25:07 +08:00
parent 44f4c4f028
commit 2579ecbd19

View File

@ -1,6 +1,9 @@
use super::CodeGenContext;
use inkwell::{
attributes::AttributeLoc, context::Context, memory_buffer::MemoryBuffer, module::Module,
attributes::{Attribute, AttributeLoc},
context::Context,
memory_buffer::MemoryBuffer,
module::Module,
values::IntValue,
};
@ -11,10 +14,10 @@ pub fn load_irrt(ctx: &Context) -> Module {
);
let irrt_mod = Module::parse_bitcode_from_buffer(&bitcode_buf, ctx).unwrap();
// add alwaysinline attributes to power function to help them get inlined
// alwaysinline enum = 1, see release/13.x/llvm/include/llvm/IR/Attributes.td
let inline_attr = Attribute::get_named_enum_kind_id("alwaysinline");
for symbol in &["__nac3_irrt_int_exp_int32_t", "__nac3_irrt_int_exp_int64_t"] {
let function = irrt_mod.get_function(symbol).unwrap();
function.add_attribute(AttributeLoc::Function, ctx.create_enum_attribute(1, 0));
function.add_attribute(AttributeLoc::Function, ctx.create_enum_attribute(inline_attr, 0));
}
irrt_mod
}