Получение операндов в инструкции LLVM - PullRequest
18 голосов
/ 28 декабря 2011

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

Ответы [ 2 ]

26 голосов
/ 28 декабря 2011

Существует множество операндов доступа, обычно предоставляемых классом 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).

2 голосов
/ 11 января 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...