llvm内联传递不起作用

use*_*285 5 inline llvm llvm-c++-api

我在函数上写了一个包装器,我想内联它(这个包装器只是以另一种方式映射原始函数的参数).我试图在我的模块之后通过我的模块调用llvm中的内联器并且它没有完成工作,虽然我尝试从opt工具调用传递并且它工作,任何想法什么可能是错的?

以下是我如何调用内联传递:

llvm::PassManager my_passes;
my_passes.add(llvm::createFunctionInliningPass(4096));
my_passes.run(module);
Run Code Online (Sandbox Code Playgroud)

Ale*_*exK 3

我已经设法让“AlwaysInline”通行证发挥作用。这些步骤很像您所描述的:

llvm::Module m("MyJIT", llvm::getGlobalContext());
llvm::PassManager pm;
pm.add(llvm::createAlwaysInlinerPass());
...

llvm::Function* f = buildMyFunction();
f->addAttribute(llvm::AttributeSet::FunctionIndex, llvm::Attribute::AlwaysInline);
...

llvm::DebugFlag = true;
pm.runOnModule(m);
m.dump();
Run Code Online (Sandbox Code Playgroud)

请注意 llvm::DebugFlag 变量,它将导致 llvm 代码生成机制发出大量诊断输出。它在您的代码中声明llvm/Support/Debug.h,并且可以通过您的代码或 gdb 通过 进行更改set llvm::DebugFlag = 1

还可以尝试浏览 llvm 源代码;相关位将在${llvm_root_dir}/lib/Transforms/IPO/Inliner.cpp