[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