我试图使用此命令在llvm中内联函数:
opt -inline -inline-threshold=1000000 a.bc -o a.inline.bc
涉及指针强制转换的(间接)函数调用无法内联。例如。
%call4 = call i32 (...)* bitcast (i32 (%struct.token_type*)* @print_token to i32 (...)*)(%struct.token_type* %5)
但是下面的函数调用正在内联:
%call49 = call i32 @special(i32 %43)
我可以内联所有函数调用,无论它们是直接还是间接?
谢谢!
答案 0 :(得分:1)
如果您不知道它是什么,则无法内联,并且在构建过程中的任何时候都无法知道在运行时分配的函数指针...如果是以可重新分配的方式定义,然后它可能无法内联...调用代码可以内联,但调用函数指针不能......
有可能有一些情况可能会被内联,llvm过于谨慎,但这可能是llvm dev列表的问题...
你还没有给出一个具体的例子,可以看一下比我更聪明的人看一看,知道你的情景是否可以内联。