[llvm] r301298 - [IVUsers] Don't bail out of normalizing non-affine add recs

Sanjoy Das via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 24 23:53:25 PDT 2017


Author: sanjoy
Date: Tue Apr 25 01:53:25 2017
New Revision: 301298

URL: http://llvm.org/viewvc/llvm-project?rev=301298&view=rev
Log:
[IVUsers] Don't bail out of normalizing non-affine add recs

Summary:
In a previous change I changed SCEV's normalization / denormalization
to work with non-affine add recs.  So the bailout in IVUsers can be
removed.

Reviewers: atrick, efriedma

Reviewed By: atrick

Subscribers: davide, mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D32105

Modified:
    llvm/trunk/lib/Analysis/IVUsers.cpp
    llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll

Modified: llvm/trunk/lib/Analysis/IVUsers.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IVUsers.cpp?rev=301298&r1=301297&r2=301298&view=diff
==============================================================================
--- llvm/trunk/lib/Analysis/IVUsers.cpp (original)
+++ llvm/trunk/lib/Analysis/IVUsers.cpp Tue Apr 25 01:53:25 2017
@@ -253,18 +253,8 @@ bool IVUsers::AddUsersImpl(Instruction *
       const SCEV *OriginalISE = ISE;
 
       auto NormalizePred = [&](const SCEVAddRecExpr *AR) {
-        // We only allow affine AddRecs to be normalized, otherwise we would not
-        // be able to correctly denormalize.
-        // e.g. {1,+,3,+,2} == {-2,+,1,+,2} + {3,+,2}
-        // Normalized form:   {-2,+,1,+,2}
-        // Denormalized form: {1,+,3,+,2}
-        //
-        // However, denormalization would use a different step expression than
-        // normalization (see getPostIncExpr), generating the wrong final
-        // expression: {-2,+,1,+,2} + {1,+,2} => {-1,+,3,+,2}
         auto *L = AR->getLoop();
-        bool Result =
-            AR->isAffine() && IVUseShouldUsePostIncValue(User, I, L, DT);
+        bool Result = IVUseShouldUsePostIncValue(User, I, L, DT);
         if (Result)
           NewUse.PostIncLoops.insert(L);
         return Result;

Modified: llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll?rev=301298&r1=301297&r2=301298&view=diff
==============================================================================
--- llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll (original)
+++ llvm/trunk/test/Analysis/IVUsers/quadradic-exit-value.ll Tue Apr 25 01:53:25 2017
@@ -36,7 +36,7 @@ exit:
 ; sure they aren't marked as post-inc users.
 ;
 ; CHECK-LABEL: IV Users for loop %test2.loop
-; CHECK-NO-LCSSA: %sext.us = {0,+,(16777216 + (-16777216 * %sub.us))<nuw><nsw>,+,33554432}<%test2.loop> in %f = ashr i32 %sext.us, 24
+; CHECK-NO-LCSSA: %sext.us = {0,+,(16777216 + (-16777216 * %sub.us))<nuw><nsw>,+,33554432}<%test2.loop> (post-inc with loop %test2.loop) in    %f = ashr i32 %sext.us, 24
 define i32 @test2() {
 entry:
   br label %test2.loop




More information about the llvm-commits mailing list