llvm内联传递不起作用
发布时间:2020-12-16 05:03:03 所属栏目:百科 来源:网络整理
导读:我在函数上写了一个包装器,我想内联它(这个包装器只是以另一种方式映射原始函数的参数). 我试图在我的模块之后通过我的模块调用llvm中的内联器并且它没有完成工作,虽然我尝试从opt工具调用传递并且它工作,任何想法什么可能是错的? 以下是我如何调用内联传递
我在函数上写了一个包装器,我想内联它(这个包装器只是以另一种方式映射原始函数的参数).
我试图在我的模块之后通过我的模块调用llvm中的内联器并且它没有完成工作,虽然我尝试从opt工具调用传递并且它工作,任何想法什么可能是错的? 以下是我如何调用内联传递: llvm::PassManager my_passes; my_passes.add(llvm::createFunctionInliningPass(4096)); my_passes.run(module); 解决方法
我设法让“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中 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |