llvm内联传递不起作用

时间:2013-04-02 14:04:32

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

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

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

llvm::PassManager my_passes;
my_passes.add(llvm::createFunctionInliningPass(4096));
my_passes.run(module);

1 个答案:

答案 0 :(得分:3)

我设法获得了#34; 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();

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

还尝试在llvm源周围探索;相关位将在${llvm_root_dir}/lib/Transforms/IPO/Inliner.cpp