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