setOperands(int, Value*)


I am trying to reset the operands of instructions. What I am doing is, I am finding all Uses of a specific operand in an Instruction and resetting it with a new value using “setOperands(int, Value*)”. I am doing as:

for (auto vmitr=vm.begin(), vsitr=vs.begin(); vmitr!=vm.end() && vsitr!=vs.end(); vmitr++, vsitr++){

// I have two *Value ( operands)

for ( auto myitr =(*vsitr)->user_begin(); myitr!=(*vsitr)->user_end(); ++myitr){

// Finding the uses of one operand
for ( int k = 0; k < (*myitr)->getNumOperands(); k++){

// going through the operands of the Instructions that uses it
if ((*myitr)->getOperand(k) == *vsitr){

// Find the operand and its position in the instruction

// Replacing it with the other operand value


The problem is that it goes into the end loop.
ps. *vsitr and *vmitr are arguments of different call instructions but pointing to the same values.


Value::replaceAllUsesWith(Value*) ?

I tried it and it also went to an endless loop. Here is an example of what I am trying to achieve:

store i32 0, i32* %15, align 4
call void @__kmpc_for_static_init_4(%struct.ident_t* @0, i32 %17, i32 34, i32* %15, i32* %12, i32* %13, i32* %14, i32 1, i32 1)
%41 = load i32, i32* %13, align 4

I am trying to replace i32* %15 and i32* %13 with another operand values say i32* %18 and i32* 23. FYI, i32* %15== i32* %18 and . i32* %18==i32* %23 in terms of content values.

Right, so you are replacing a Value with the same Value, thus an endless loop.