【问题标题】:Inline a particular function call with LLVM使用 LLVM 内联特定的函数调用
【发布时间】:2019-01-29 00:00:58
【问题描述】:

给定一个llvm::CallInst *,我如何告诉内联程序内联这个特定的调用。我可以将目标函数标记为AlwaysInline,这将内联调用,但它也会内联每个调用。也许有一些方法可以在我发出特定调用时调用内联器?内联基本块中的所有调用也可以。

【问题讨论】:

  • 你能不能只创建两个函数实例并创建一个AlwaysInLine
  • @WillisBlackburn 这需要调用代码知道如何生成函数。
  • 虽然,在我的情况下,这样的事情可能会奏效。我仍然想内联调用,因为我认为这样会更简洁。
  • 函数是外部的吗?我认为内联一个没有 LLVM 指令的函数不会很幸运。 C++ 中的内联函数必须在头文件中的原因是编译器必须能够在与调用函数相同的编译单元中解析内联函数。
  • 目标函数和调用站点都在同一个翻译单元中。如果内联觉得喜欢,可以内联调用。生成调用的代码与生成函数的代码分离。我想保持这种状态。您的解决方案需要耦合两个不相关的事物。

标签: c++ llvm llvm-c++-api


【解决方案1】:

您可以使用llvm/Transforms/Utils/Cloning.h 中的InlineFunction 实用程序。 它可以接受 CallInst* 作为参数:

llvm::CallInst* call = /* ... */;
llvm::InlineFunctionInfo ifi;

llvm::InlineFunction(call, ifi);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多