2012-02-10 8 views
1

私はBasicBlockイテレータを使用して、基本ブロックの命令を反復処理しています。 Instructionクラスは、命令が 'and'または 'or'命令であるかどうかをチェックする直接的な方法を提供しますか?そうでない場合は、型キャスティングが必要ですか?'および'、 'または'命令を検出する

答えて

3

Instruction *I; I->getOpcode() method

getOpcode()命令のような列挙型の1つのメンバーを返します::追加があります。 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

関連する問題