检测'和','或'指令

时间:2012-02-10 11:00:13

标签: llvm

我正在使用BasicBlock迭代器迭代基本块中的指令。指令类是否提供任何直接方法来检查指令是否为“和”或“或”指令。如果没有,是否需要进行类型转换?

1 个答案:

答案 0 :(得分:3)

Instruction *I; I-> getOpcode() method

  

getOpcode()返回其中一个枚举的成员,如Instruction :: Add。   在文件Instruction.h的第82行定义。

迭代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