LLVM IR: получить возвращаемое значение места вызова - PullRequest
0 голосов
/ 25 марта 2019

Вот быстрый вопрос по анализу LLVM IR.Поэтому в основном я пытаюсь получить возвращаемое значение оператора вызова функции LLVM, что-то вроде этого:

%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 Ответ

4 голосов
/ 25 марта 2019

CI (инструкция call) равно возвращаемому значению.Он имеет тип, который наследует Value.

. Если вы хотите сделать 1 + %47, просто в качестве примера вы добавляете следующее: Value * Add = BinaryOperation::Create(Instruction::Add, CI, ConstantInt::get(i256, 1), ...); Инструкция add, в свою очередь, является ее результатом.и Add->getType() == i256, поскольку это сумма двух значений, которые оба имеют тип i256.

...