[LLVMdev] LLVM Instruction*->getOperand() not working properly for ICMP

Duncan Sands baldrick at free.fr
Thu Jan 10 02:21:46 PST 2013


Hi,

On 10/01/13 10:56, Alexandru Ionut Diaconescu wrote:
> Hello everyone !
>
> In my pass I inspect the penultimate instruction from every basic block in
> runOnFunction(). I am interested in ICMP instructions only.
>
> |if(BB->size()>1)
>      if(last->getPrevNode())
>      {
>          previous = last->getPrevNode();
>          ok=1;
>      }
> |
>
> I want to get the operands of previous, which is of type Instruction*. Due tests
> based on getNumOperands, ICMP has 2 (as normal).
>
> |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";
> |
>
> The results with getOperand(1) are similar. The output is:
>
> |*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
> |
>
> Do you know how I can get the operands from ICMP instructions? I need to use
> them in some conditions? (also their attributes). Thank you a lot !

this is the correct way to get the operands.  However you are wrongly assuming
that all instructions have a name.  If you look at
   %cmp11 = icmp sgt i32 %8, 3
the fact that the first operand is %8 (rather than something like %i) tells you
it has no name.  That is why the name comes out as null.

Ciao, Duncan.


>
>
>
> --
> Best regards,
> Alexandru Ionut Diaconescu
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>




More information about the llvm-dev mailing list