[LLVMdev] On semantics of add instruction - nsw,nuw flags

Jeremy Lakeman Jeremy.Lakeman at gmail.com
Tue Jul 22 23:12:56 PDT 2014


IMHO;
On undefined behaviour we can do whatever we want. If the "add nsw"
overflows this would lead to undefined behaviour.
Therefore we can assume that "add", with the same arguments will not
overflow.


On Wed, Jul 23, 2014 at 3:32 PM, Tim Northover <t.p.northover at gmail.com>
wrote:

> On 23 July 2014 06:25, Rekha R <rekharamapai at nitc.ac.in> wrote:
> > Are the following instructions semantically same?
> >   %add2 = add nsw i32 %add, %add1
> >   %add3 = add        i32 %add, %add1
> >
> > Based on my understanding from the Language Reference Manual, I think
> they
> > are different. But then why is the gvn pass detecting %add3 as redundant
> and deleting it?
>
> On their common domain, the two instructions coincide. But the second
> one is defined for more pairs of input. That is, it's also defined
> when the (signed) sum overflows.
>
> So it's correct to eliminate the first one as redundant, in favour of
> the second, but not the reverse. This is what I see GVN doing too from
> my simple tests, do you have a complete .ll file where the wrong one
> is removed?
>
> Cheers.
>
> Tim.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20140723/2da04b74/attachment.html>


More information about the llvm-dev mailing list