[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