gpt4 book ai didi

llvm 内联 channel 不起作用

转载 作者:行者123 更新时间:2023-12-04 20:47:04 43 4
gpt4 key购买 nike

我在一个函数上写了一个包装器,我想内联它(这个包装器只是以另一种方式映射原始函数的参数)。
我试图在更改后通过我的模块调用 llvm 中的内联程序,但它没有完成工作,尽管我尝试从 opt 工具调用 pass 并且它有效,知道可能有什么问题吗?

这是我如何调用内联 channel :

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

关于llvm 内联 channel 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15766194/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com