在LLVM中转换函数参数

问题描述 投票:0回答:1

我有LLVM IR看起来像

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

我想从%7的参数列表中提取free并检查先前的Instruction(%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。任何人都可以指导我如何做到这一点?

c llvm
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.