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)
我已经设法让“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