「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
おり、コードから、または を介して gdb から変更できますset llvm::DebugFlag = 1
。
また、llvm ソースを調べてみてください。関連するビットが入ります${llvm_root_dir}/lib/Transforms/IPO/Inliner.cpp