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

Tim Northover t.p.northover at gmail.com
Tue Jul 22 23:02:42 PDT 2014


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.



More information about the llvm-dev mailing list