Получение операндов в LLVM-инструкции
Я пишу оптимизацию для своего компилятора, и я использую LLVM IR как мой промежуточный язык. Я проанализировал входной файл и преобразовал его в LLVM IR. Во время оптимизации мне нужно получить операнды инструкций. Я могу найти getOpCode() в классе Instruction, но не смог получить список операндов. Как мне это сделать?
Ответы
Ответ 1
Существует множество операндов, которые обычно предоставляются классом llvm::User
, чья страница-доксиген: http://llvm.org/doxygen/classllvm_1_1User.html Там getNumOperands()
и getOperand(unsigned int)
, а также аксессоры стиля итератора op_begin()
и op_end()
.
Например, данный Instruction %X = add i32 %a, 2
, I->getOperand(0)
вернет Value*
для %a
, а I->getOperand(1)
вернет Value*
для i32 2
(с возможностью использования в ConstantInt).
Ответ 2
Например, если у вас есть Инструкция * I1 - I1- > getOperand (0) вернет первый операнд типа Value *. Вы можете пойти дальше, используя I1- > getOperand (0) → getName(), который вернет имя операнда. См. Методы класса значений.