[LLVMdev] No Signed Wrap
Duncan Sands
baldrick at free.fr
Sun Jun 19 06:46:58 PDT 2011
Hi Pranav,
> I am not able to understand the No Signed Wrap property. My problem is in the
> Instruction combiner which combines two operations -
> add1 = add 'nsw' x 5
> add2 = add 'nsw' add1 1
> into
> add2 = add x 6. // No 'nsw' property in the combined operation.
>
> From the comments in the Instruction Combiner I can see that the nsw flag /
> property is "conservatively cleared" but do not understand why - especially when
> it was present in both the add instructions.
consider the following example:
%add1 = add nsw i8 %x, 120
%add2 = add nsw i8 %add1, 10
Suppose for example that %x = -20. Then indeed there is no signed wrap in
either addition, and the result is 110.
The transform you mentioned would convert this into:
%add2 = add i8 %x, -126
Notice how when %x = -20 there is now a signed wrap in the addition.
Ciao, Duncan.
More information about the llvm-dev
mailing list