replace uses of loadInst with a value

Hi,

I need to replace all uses of load instructions with the value of its operand. Here is an example:

%16 = load i32, i32* %x

%add = add i32 4, %16

In this case, i would like to have the result as:

%add = add i32 4, %x

and then delete the load instruction. I have tried replaceAllUsesWithValue but i get a type problem.

“llvm::Value::replaceAllUsesWith(llvm::Value*): Assertion `New->getType() == getType() && “replaceAllUses of value with new value of different type!”’ failed.”

Best,

Mohammad

Hi Mohammad,

i32* %x and i32 4 don't have the same type, and that triggers the
assert.

If you want to use x as an integer, you should bitcast it, then trunc
or zext it depending on the pointer bitwidth...

hope it helps

So, you are replacing

add = *x + 4

with

add = x + 4

(where x is still an int *x)

Is that really what you want?