LLVM IR:获取呼叫站点的返回值

时间:2019-03-25 16:12:11

标签: llvm llvm-ir

这里是分析LLVM IR的快速问题。所以基本上,我试图获取LLVM IR函数调用语句的返回值,如下所示:

%47  =   call i256 @test(i256 %46)

我想获得访问权限%47

这是我用来访问参数的代码。

      else if (funcName.contains("test")) {
        Value *op = CI->getOperand(0);
        if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(op))
          // get the first function parameter
          op = GEP->getPointerOperand();
      }

一个非常令人惊讶的发现是,我只是在文档http://llvm.org/doxygen/classllvm_1_1CallInst.html

中找不到诸如“获取返回值”之类的东西。

有人可以在这里开灯吗?非常感谢。

1 个答案:

答案 0 :(得分:4)

CIcall指令)其返回值。它具有继承Value的类型。

如果您想做1 + %47,例如,您可以进行如下添加:Value * Add = BinaryOperation::Create(Instruction::Add, CI, ConstantInt::get(i256, 1), ...); add指令是它的结果,而Add->getType() == i256是它的结果。是两个类型均为i256的两个值的总和。