[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