gpt4 book ai didi

llvm - 在 LLVM 中向函数添加参数

转载 作者:行者123 更新时间:2023-12-04 18:07:49 34 4
gpt4 key购买 nike

我希望编写一个 LLVM 传递两个 i32 类型的参数来选择函数。我的第一次尝试(如下所示)失败了:

bool MyFunctionPass::runOnFunction(Function &f) 
{
Type *int32 = Type::getInt32Ty(f.getParent()->getContext());
Argument *xC = new Argument(int32, "__xC", &f);
...

如果我尝试上述方法,模块验证程序会崩溃。新添加的参数类型是 junk 0xCDCDCDCD(未初始化的堆内存)。函数类型保持:
void (i32 addrspace(1)*, i32 addrspace(1)*, i32)

而不是被新的 i32 扩展.

另外,将参数直接添加到参数列表 Function::getArgumentList()失败为 Argument构造函数将自身链接到函数,这被检测为双链接。
  • 我需要一个 ModulePass 来做到这一点,还是一个 FunctionPass 就足够了?
  • 有没有一种优雅的方式来做到这一点?

  • 谢谢!

    最佳答案

    向函数添加参数非常棘手 - 正如您所发现的,它不像修改参数列表那么容易。

    最简单的方法可能是首先使用所有原始参数 + 额外参数创建一个新函数,然后调用 CloneFunctionInto 将原始函数嵌入到新函数中。

    关于llvm - 在 LLVM 中向函数添加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494422/

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