gpt4 book ai didi

LLVM 中的函数参数转换

转载 作者:行者123 更新时间:2023-11-30 16:37:21 28 4
gpt4 key购买 nike

我有 LLVM IR,看起来像

%7 = load i32** %ok, align 8
call void @free(i8* %7) #3

我想从free的参数列表中提取%7并检查之前的指令(%7)和参数指令是否相同是一样的。我用于此目的的代码部分如下所示

if(CallInst* call_inst = dyn_cast<CallInst>(&I)) {   // I is the Instruction
Function* fn = call_inst->getCalledFunction();
StringRef fn_name = fn->getName();
if (fn_name == "free") { // fn_name is the called function name
for(auto args = fn->arg_begin(); args != fn->arg_end(); ++args) {
Instruction* arg = dyn_cast<Instruction>(&(*args));
if (arg != NULL)
errs() << arg->getOperand(0)->getName() << "\n"; // to check
if (arg == parent_free_bitcast_inst) {
// do something
}
}

该代码不起作用。我已尝试进行强制转换,但 arg->getOperand(0)->getName() 仍然会导致错误,而不是 ok。谁能指导我如何做到这一点?

最佳答案

您还没有显示 fn 是什么,但我猜它是 Function 而不是 CallInst。如果是这样,您将迭代函数定义或声明中的参数,而不是调用的参数。您只需使用 CallInst 而不是 fn 即可,相同的代码应该可以工作。

关于LLVM 中的函数参数转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985414/

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