[llvm-commits] [llvm] r154262 - in /llvm/trunk: lib/Analysis/ScalarEvolution.cpp test/Analysis/ScalarEvolution/nsw-offset.ll test/Analysis/ScalarEvolution/nsw.ll
Andrew Trick
atrick at apple.com
Mon Apr 16 21:13:51 PDT 2012
On Apr 7, 2012, at 10:19 AM, Benjamin Kramer <benny.kra at googlemail.com> wrote:
> Author: d0k
> Date: Sat Apr 7 12:19:26 2012
> New Revision: 154262
>
> URL: http://llvm.org/viewvc/llvm-project?rev=154262&view=rev
> Log:
> SCEV: When expanding a GEP the final addition to the base pointer has NUW but not NSW.
It does?
Inbounds geps can compute negative offsets relative to each other.
%p1 = gep inbounds i8* %base, %n
%p2 = gep inbounds i8* %p, -1
load i8* %p2
I agree the NSW flag is system dependent. I think we'd like to assume that objects don't cross the 4G boundary. I won't argue for or against it. I was preserving an optimization someone else added ;)
-Andy
>
> Found by inspection.
>
> Modified:
> llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll
> llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll
>
> Modified: llvm/trunk/lib/Analysis/ScalarEvolution.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/ScalarEvolution.cpp?rev=154262&r1=154261&r2=154262&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Analysis/ScalarEvolution.cpp (original)
> +++ llvm/trunk/lib/Analysis/ScalarEvolution.cpp Sat Apr 7 12:19:26 2012
> @@ -3187,7 +3187,7 @@
>
> // Add the total offset from all the GEP indices to the base.
> return getAddExpr(BaseS, TotalOffset,
> - isInBounds ? SCEV::FlagNSW : SCEV::FlagAnyWrap);
> + isInBounds ? SCEV::FlagNUW : SCEV::FlagAnyWrap);
> }
>
> /// GetMinTrailingZeros - Determine the minimum number of zero bits that S is
>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll?rev=154262&r1=154261&r2=154262&view=diff
> ==============================================================================
> --- llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll (original)
> +++ llvm/trunk/test/Analysis/ScalarEvolution/nsw-offset.ll Sat Apr 7 12:19:26 2012
> @@ -23,7 +23,7 @@
> %1 = sext i32 %i.01 to i64 ; <i64> [#uses=1]
>
> ; CHECK: %2 = getelementptr inbounds double* %d, i64 %1
> -; CHECK: --> {%d,+,16}<nsw><%bb>
> +; CHECK: --> {%d,+,16}<nuw><%bb>
> %2 = getelementptr inbounds double* %d, i64 %1 ; <double*> [#uses=1]
>
> %3 = load double* %2, align 8 ; <double> [#uses=1]
> @@ -37,7 +37,7 @@
> %8 = sext i32 %7 to i64 ; <i64> [#uses=1]
>
> ; CHECK: %9 = getelementptr inbounds double* %q, i64 %8
> -; CHECK: {(8 + %q),+,16}<nsw><%bb>
> +; CHECK: {(8 + %q),+,16}<nuw><%bb>
> %9 = getelementptr inbounds double* %q, i64 %8 ; <double*> [#uses=1]
>
> ; Artificially repeat the above three instructions, this time using
> @@ -49,7 +49,7 @@
> %t8 = sext i32 %t7 to i64 ; <i64> [#uses=1]
>
> ; CHECK: %t9 = getelementptr inbounds double* %q, i64 %t8
> -; CHECK: {(8 + %q),+,16}<nsw><%bb>
> +; CHECK: {(8 + %q),+,16}<nuw><%bb>
> %t9 = getelementptr inbounds double* %q, i64 %t8 ; <double*> [#uses=1]
>
> %10 = load double* %9, align 8 ; <double> [#uses=1]
>
> Modified: llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll?rev=154262&r1=154261&r2=154262&view=diff
> ==============================================================================
> --- llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll (original)
> +++ llvm/trunk/test/Analysis/ScalarEvolution/nsw.ll Sat Apr 7 12:19:26 2012
> @@ -92,10 +92,10 @@
> ; CHECK: {1,+,1}<nuw><nsw><%for.body.i.i>
> %ptrincdec.i.i = getelementptr inbounds i32* %begin, i64 %tmp
> ; CHECK: %ptrincdec.i.i =
> -; CHECK: {(4 + %begin),+,4}<nsw><%for.body.i.i>
> +; CHECK: {(4 + %begin),+,4}<nuw><%for.body.i.i>
> %__first.addr.08.i.i = getelementptr inbounds i32* %begin, i64 %indvar.i.i
> ; CHECK: %__first.addr.08.i.i
> -; CHECK: {%begin,+,4}<nsw><%for.body.i.i>
> +; CHECK: {%begin,+,4}<nuw><%for.body.i.i>
> store i32 0, i32* %__first.addr.08.i.i, align 4
> %cmp.i.i = icmp eq i32* %ptrincdec.i.i, %end
> br i1 %cmp.i.i, label %_ZSt4fillIPiiEvT_S1_RKT0_.exit, label %for.body.i.i
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list