2011-12-28 3 views
15

Я пишу оптимизацию для своего компилятора, и я использую LLVM IR как мой промежуточный язык. Я проанализировал входной файл и преобразовал его в LLVM IR. Во время оптимизации мне нужно получить операнды инструкций. Я могу найти getOpCode() в классе Instruction, но не смог получить список операндов. Как мне это сделать?Получение операндов в инструкции LLVM

ответ

23

Есть много операндов аксессорах, как правило, предоставляемые классом llvm::User, чья Doxygen страница: http://llvm.org/doxygen/classllvm_1_1User.html Там в 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).

1

Например, если у вас есть инструкция * I1 - I1-> getOperand (0) вернет первый операнд типа Value *. Вы можете пойти дальше, используя I1-> getOperand (0) -> getName(), который вернет имя операнда. См. Методы класса значений.

Смежные вопросы