Получение операндов в 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(), который вернет имя операнда. См. Методы класса значений.