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

Alexandru Ionut Diaconescu alexandruionutdiaconescu at gmail.com
Fri Jan 11 03:50:42 PST 2013


Hi Óscar,

But if I do "I1->getOperand(0)->getOperand(0)" I get " ‘class llvm::Value’
has no member named ‘getOperand’ ". getOperand() I think it's only defined
for Instruction class. Do you know any equivalent method for Value?

On Fri, Jan 11, 2013 at 12:07 PM, Óscar Fuentes <ofv at wanadoo.es> wrote:

> Alexandru Ionut Diaconescu <alexandruionutdiaconescu at gmail.com> writes:
>
> > But I have another problem: Do you know how can I iterate through a
> Value*?
> > For instance, I have :
> >
> > Instruction *I1; // I take only I1 that are ICmp
> >
> > errs()<<"\n "<<*I1->getOperand(0)<<" \n";
> > // %3 = load i32* %c, align 4
> >
> > As expected. Now I want to get %c from the previous to use "%c" in
> > comparisons. I tried :
> >
> > for (llvm::Value::use_iterator VI=(*I1->getOperand(0)).use_begin(),
> > VE=(*I1->getOperand(0)).use_end(); VI != VE ; ++VI)
> >   {
> >
> >     errs()<<"\n "<<**VI<<" \n";
> >    // %cmp3 = icmp ne i32 %3, 0
> >   }
> >
> > Not as expected.  It is printing the I1 instruction.
> >
> > Do you know how I can get %c from the "load instruction"?
>
> In this case, you get %c starting from I1 this way:
>
> I1->getOperand(0)->getOperand(0)
>
> because "%3 = load i32* %c, align 4" (or %3, for short) is the first
> operand of I1, and %c is the first operand of %3.
>
> Please note that some Instructions are Values too. This is the case for
> the Instruction `load'.
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



-- 
Best regards,
Alexandru Ionut Diaconescu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130111/c34ef86b/attachment.html>


More information about the llvm-dev mailing list