加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读