使用LLVM内联特定的函数调用

5

如果给定一个 llvm::CallInst *,我怎样才能告诉内联程序内联这个特定的调用。我可以将目标函数标记为 AlwaysInline,这将内联调用,但它也会内联每个调用。也许有一种方式可以在发射它时调用内联程序来针对特定的调用进行内联?内联基本块中的所有调用也可以起作用。


你能否创建两个函数实例,并将其中一个命名为 AlwaysInLine - Willis Blackburn
@WillisBlackburn 这需要调用代码知道如何生成函数。 - Indiana Kernick
尽管在我的情况下这样做可能起效,但我仍然想内联调用,因为我认为那会更加简洁。 - Indiana Kernick
1
这个函数是外部的吗?我认为如果你没有LLVM指令,很难将一个函数内联。C++中内联函数必须在头文件中,原因是编译器必须能够在调用函数的同一编译单元中解析内联函数。 - Willis Blackburn
目标函数和调用点都在同一个翻译单元中。如果内联程序感觉合适,可以内联调用。生成调用的代码与生成函数的代码是解耦的。我希望保持这种状态。您的解决方案需要将两个不相关的事物耦合起来。 - Indiana Kernick
1个回答

4
您可以使用位于 llvm/Transforms/Utils/Cloning.hInlineFunction 实用程序。 它可以接受一个CallInst*作为参数。
llvm::CallInst* call = /* ... */;
llvm::InlineFunctionInfo ifi;

llvm::InlineFunction(call, ifi);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接