如何在LLVM中的函数调用中添加属性组?

时间:2018-11-19 16:39:11

标签: llvm llvm-clang

使用clang编译程序时,我在LLVM IR中观察到以下内容:

给出以下函数声明:

declare i32 @atoi(i8*) #2

具有以下属性:

attributes #2 = { nounwind readonly "correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }

当调用该函数时,我可以看到:

%26 = call i32 @atoi(i8* %25) #5

为其定义/重新定义更多属性:

attributes #5 = { nounwind readonly }

我知道#2 attribute group包含可以添加到Function方法的addFnAttr(Attribute Attr) with方法中的“函数属性”。我也知道,我可以添加到CallInst with addAttribute(0, Attribute Attr)的“返回属性”,也可以使用相同的方法或{{3 }} AttributeList / Set。例如,这给了我%26 = call nounwind i32 @atoi(i8* nounwind %25)

但是如何添加#5属性组中的属性?他们叫什么?它们是否不同于其他属性?在这种情况下,它们是否多余?

0 个答案:

没有答案