llvm get Value* iterators

Hello everyone !

In my LLVM pass, there is Intruction* I1. All the used "I1"s are ICMP instructions. *I1->getOperand(0) returns a Value* type. From

errs()<<"\n"<<I1->getOperand(0)<<"\n";
//printed : %3 = load i32
%c, align 4
Printed as expected. But I want to use %c. Do you know how I can get %c ? I need to use the value %c in some computations.

First, 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";
//printed : %cmp3 = icmp ne i32 %3, 0
}
But it is not getting Value
fields. Also, it is printing only one VI per for, so VI cannot increment.

Second, it is a solution of taking the output of errs() in a string and parse the string for %c ? If so, how I can do it? I have problems while trying to declare static raw_ostream S in order to take somehow the errs() output.

Thank you for any help !

If I1->getOperand(0) is the load, then %c is its pointer argument available with:

LoadInst *LD = cast(I1->getOperand(0));
Value *C = LD->getPointerOperand();

Also, I just saw your other thread. Please refrain from double-posting these questions.

Hi,

Hello everyone !

In my LLVM pass, there is `Intruction* I1`. All the used "I1"s are ICMP
instructions. *I1->getOperand(0) returns a `Value*` type. From

     errs()<<"\n"<<*I1->getOperand(0)<<"\n";
     //printed : %3 = load i32* %c, align 4
Printed as expected. But I want to use %c. Do you know how I can get %c ? I need
to use the value %c in some computations.

I1->getOperand(0)->getOperand(0)

Ciao, Duncan.