[llvm-commits] [llvm] r154262 - in /llvm/trunk: lib/Analysis/ScalarEvolution.cpp test/Analysis/ScalarEvolution/nsw-offset.ll test/Analysis/ScalarEvolution/nsw.ll
Benjamin Kramer
benny.kra at googlemail.com
Mon Apr 16 23:34:06 PDT 2012
On 17.04.2012, at 06:13, Andrew Trick wrote:
> 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 ;)
Hmm, right. I'll revert this patch for now.
- Ben
> -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