Clang 不内联具有指针转换的调用(间接函数调用)
Clang does not inline calls having pointer casts (indirect function calls)
我试图使用这个命令在 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)
我可以内联所有函数调用,而不管它们是直接调用还是间接调用吗??
谢谢!
如果你不知道它是什么,你就不能内联某些东西,并且在 运行 时间分配的函数指针在构建过程中的任何时候都不知道......如果它的定义方式是 reassign-able 然后它不可能被内联...调用代码可以被内联,但对函数指针的调用不能...
可能有一些 llvm 过于谨慎的内联场景,但这可能是 llvm 开发列表的问题...
而且你还没有给出一个具体的例子来寻找比我更聪明的人来了解是否应该可以在你的场景中内联。
我试图使用这个命令在 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)
我可以内联所有函数调用,而不管它们是直接调用还是间接调用吗??
谢谢!
如果你不知道它是什么,你就不能内联某些东西,并且在 运行 时间分配的函数指针在构建过程中的任何时候都不知道......如果它的定义方式是 reassign-able 然后它不可能被内联...调用代码可以被内联,但对函数指针的调用不能...
可能有一些 llvm 过于谨慎的内联场景,但这可能是 llvm 开发列表的问题...
而且你还没有给出一个具体的例子来寻找比我更聪明的人来了解是否应该可以在你的场景中内联。