0

パスでは、runOnFunction()のすべての基本ブロックから最後から2番目の命令を検査します。ICMP命令のみに関心があります。

if(BB->size()>1)
    if(last->getPrevNode())
    {
        previous = last->getPrevNode();
        ok=1;
    }

命令*型のpreviousのオペランドを取得したい。getNumOperandsに基づくテストにより、ICMPには2つあります(通常どおり)。

if ( ok && ((previous->getNumOperands())>=2) )

    errs()<<"\nTTTTT "<<previous->getOperand(0)->getName()<<" | " 
          <<previous->getOperand(0)->getValueName()<<" | "
          <<previous->getOperand(0)->getValueID()<<" | "
          <<previous->getOperand(0)->getNumUses()<<" TTTTT\n";

getOperand(1)の結果は似ています。出力は次のとおりです。

*PREVIOUS:   store i32 %conv15, i32* %i, align 4
TTTTT conv15 | 0x9b69090 | 59 | 1 TTTTT
...
*PREVIOUS:   store i32 %inc13, i32* %i, align 4
TTTTT inc13 | 0x9b76478 | 30 | 1 TTTTT
...
*PREVIOUS:   %cmp11 = icmp sgt i32 %8, 3
TTTTT  | 0x0 | 49 | 1 TTTTT
...
*PREVIOUS:   store i32 %dec, i32* %i, align 4
TTTTT dec | 0x9b69130 | 30 | 1 TTTTT
...
*PREVIOUS:   %cmp8 = icmp sle i32 %6, 2
TTTTT  | 0x0 | 49 | 1 TTTTT
...
*PREVIOUS:   store i32 %inc, i32* %i, align 4
TTTTT inc | 0x9b761c8 | 30 | 1 TTTTT

ICMP命令からオペランドを取得する方法を知っていますか?いくつかの条件でそれらを使用する必要がありますか?(またそれらの属性)。大いに感謝する !

4

1 に答える 1

1

あなたが尋ねる:

ICMP命令からオペランドを取得する方法を知っていますか

しかし、オペランド取得しました。これらの値は問題なく使用できます。特定の例では、名前はありませんが(などの番号付きの値は名前がないと%8見なされ、定数は明らかに名前がありません)、それでも有効な値です。

于 2013-01-10T12:37:47.847 に答える