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