在我的传递中,我检查runOnFunction()中每个基本块的倒数第二条指令。我只对ICMP说明感兴趣。
if(BB->size()>1)
if(last->getPrevNode())
{
previous = last->getPrevNode();
ok=1;
}
我想获得之前的操作数,类型为Instruction *。基于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指令中获取操作数吗?我需要在某些条件下使用它们吗? (也是他们的属性)。 非常感谢你!
答案 0 :(得分:1)
你问:
你知道如何从ICMP指令中获取操作数
但是你 获取操作数,你可以使用这些值。在您的具体示例中,它们没有名称(%8
等编号值被视为无名,常量显然是无名的),但它们仍然是有效值。