Определить «и», «или» инструкция - PullRequest
1 голос
/ 10 февраля 2012

Я использую итератор BasicBlock для перебора инструкций в базовом блоке.Предоставляет ли класс Instruction какие-либо прямые методы для проверки того, является ли инструкция командой «и» или «или».Если нет, нужна ли какая-либо приведение типа?

1 Ответ

3 голосов
/ 10 февраля 2012

Существует Instruction *I; I->getOpcode() метод

getOpcode () возвращает член одного из перечислений, таких как Instruction :: Add. Определение в строке 82 файла Instruction.h.

Приведение не требуется, когда BasicBlock повторяется. Это необходимо, когда итератор может возвращать не инструкцию, например при переборе структур def-use.

Использование как:

BasicBlock *b = ...;
for (BasicBlock::iterator i = b->begin(), ie = b->end(); i != ie; ++i) {
   Instruction* I = &*i; // get Instr pointer from iterator.
   switch (I->getOpcode()) {
       case Instruction::And: // code
       case Instruction::Or: // code
       default: // other type
   }
}

Документация, использованная для написания этого ответа: http://llvm.org/docs/ProgrammersManual.html

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