LLVM IR:获取调用点的返回值

lll*_*lll 1 llvm llvm-ir

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

%47  =   call i256 @test(i256 %46)
Run Code Online (Sandbox Code Playgroud)

我想获得访问权限%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();
      }
Run Code Online (Sandbox Code Playgroud)

非常令人惊讶的发现是我在文档中找不到诸如“获取返回值”之类的东西:http : //llvm.org/doxygen/classllvm_1_1CallInst.html

有人可以在这里点亮一些灯吗?非常感谢。

arn*_*rnt 7

CIcall指令)它的返回值。它有一个继承Value.

如果你想这样做1 + %47,作为一个例子,你可以像这样进行加法:Value * Add = BinaryOperation::Create(Instruction::Add, CI, ConstantInt::get(i256, 1), ...);加法指令又是它的结果,Add->getType() == i256因为它是两个都具有 type 的值的总和i256