[LLVMdev] LLVM Instruction*->getOperand() not working properly for ICMP
Óscar Fuentes
ofv at wanadoo.es
Fri Jan 11 03:07:52 PST 2013
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'.
More information about the llvm-dev
mailing list