Llvm Clang不内联具有指针强制转换的调用(间接函数调用)

Llvm Clang不内联具有指针强制转换的调用(间接函数调用),llvm,inline,llvm-clang,Llvm,Inline,Llvm Clang,我试图使用以下命令在llvm中内联函数: opt-inline-inline阈值=1000000 a.bc-o a.inline.bc 涉及指针强制转换的(间接)函数调用无法内联。例如 %call4=调用i32(…)*比特广播(i32(%struct.token\u type*)*@print\u token to i32(…)*)(%struct.token\u type*%5) 但是像下面这样的函数调用正在内联: %call49=调用i32@special(i32%43) 我是否可以内联所有

我试图使用以下命令在llvm中内联函数:

opt-inline-inline阈值=1000000 a.bc-o a.inline.bc

涉及指针强制转换的(间接)函数调用无法内联。例如

%call4=调用i32(…)*比特广播(i32(%struct.token\u type*)*@print\u token to i32(…)*)(%struct.token\u type*%5)

但是像下面这样的函数调用正在内联:

%call49=调用i32@special(i32%43)

我是否可以内联所有函数调用,而不管它们是直接调用还是间接调用


谢谢

如果您不知道某个内容是什么,则无法内联该内容,并且在构建过程中的任何时候都无法知道在运行时分配的函数指针。。。如果它被定义为可以重新分配,那么它就不可能内联。。。调用代码可以内联,但对函数指针的调用不能

可能有一些场景可能是llvm过于谨慎的内联场景,但这可能是llvm开发人员列表的一个问题


你还没有给出一个具体的例子,让比我更聪明的人来看看,知道是否可以在你的场景中内联。

如果你不知道什么东西是内联的,你就不能内联,在运行时分配的函数指针在构建过程中的任何时候都不可能知道。。。如果它被定义为可以重新分配,那么它就不可能内联。。。调用代码可以内联,但对函数指针的调用不能

可能有一些场景可能是llvm过于谨慎的内联场景,但这可能是llvm开发人员列表的一个问题

你还没有给出一个具体的例子,让比我更聪明的人看看,知道是否有可能在你的场景中内联