[llvm] 1cd1c1d - Revert "[SCEV][IndVarSimplify] insert point should not be block front."

via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 14 05:26:08 PDT 2020


Author: serge-sans-paille
Date: 2020-07-14T14:24:26+02:00
New Revision: 1cd1c1d62edc6693a3854b22d53c9bbc1b149798

URL: https://github.com/llvm/llvm-project/commit/1cd1c1d62edc6693a3854b22d53c9bbc1b149798
DIFF: https://github.com/llvm/llvm-project/commit/1cd1c1d62edc6693a3854b22d53c9bbc1b149798.diff

LOG: Revert "[SCEV][IndVarSimplify] insert point should not be block front."

This reverts commit f1efb8bb4ba0584a9b994f3404a2c62920ce6652.

Reverted because it doesn't correctly update the pass return status, see

http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-debian/builds/9441/steps/test-check-all/logs/FAIL%3A%20LLVM%3A%3Awiden-i32-i8ptr.ll

Added: 
    

Modified: 
    llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
    llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp

Removed: 
    llvm/test/Transforms/IndVarSimplify/widen-i32-i8ptr.ll


################################################################################
diff  --git a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
index 0357d905fde5..f6a0b6ea4637 100644
--- a/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
+++ b/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp
@@ -1435,12 +1435,8 @@ PHINode *WidenIV::createWideIV(SCEVExpander &Rewriter) {
   // either find an existing phi or materialize a new one. Either way, we
   // expect a well-formed cyclic phi-with-increments. i.e. any operand not part
   // of the phi-SCC dominates the loop entry.
-  Instruction *InsertPt = &*L->getHeader()->getFirstInsertionPt();
-  WidePhi = dyn_cast<PHINode>(Rewriter.expandCodeFor(AddRec, WideType, InsertPt));
-  // If the wide phi is not a phi node, for example a cast node, like bitcast,
-  // inttoptr, ptrtoint, just skip for now.
-  if (!WidePhi)
-    return nullptr;
+  Instruction *InsertPt = &L->getHeader()->front();
+  WidePhi = cast<PHINode>(Rewriter.expandCodeFor(AddRec, WideType, InsertPt));
 
   // Remembering the WideIV increment generated by SCEVExpander allows
   // widenIVUse to reuse it when widening the narrow IV's increment. We don't

diff  --git a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
index c54ae26b5323..71b48482f26a 100644
--- a/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
+++ b/llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp
@@ -1292,8 +1292,7 @@ SCEVExpander::getAddRecExprPHILiterally(const SCEVAddRecExpr *Normalized,
   if (useSubtract)
     Step = SE.getNegativeSCEV(Step);
   // Expand the step somewhere that dominates the loop header.
-  Value *StepV = expandCodeFor(Step, IntTy,
-                               &*L->getHeader()->getFirstInsertionPt());
+  Value *StepV = expandCodeFor(Step, IntTy, &L->getHeader()->front());
 
   // The no-wrap behavior proved by IsIncrement(NUW|NSW) is only applicable if
   // we actually do emit an addition.  It does not apply if we emit a
@@ -1439,8 +1438,7 @@ Value *SCEVExpander::expandAddRecExprLiterally(const SCEVAddRecExpr *S) {
       {
         // Expand the step somewhere that dominates the loop header.
         SCEVInsertPointGuard Guard(Builder, this);
-        StepV = expandCodeFor(Step, IntTy,
-                              &*L->getHeader()->getFirstInsertionPt());
+        StepV = expandCodeFor(Step, IntTy, &L->getHeader()->front());
       }
       Result = expandIVInc(PN, StepV, L, ExpandTy, IntTy, useSubtract);
     }
@@ -1872,6 +1870,11 @@ Value *SCEVExpander::expand(const SCEV *S) {
     }
   }
 
+  // IndVarSimplify sometimes sets the insertion point at the block start, even
+  // when there are PHIs at that point.  We must correct for this.
+  if (isa<PHINode>(*InsertPt))
+    InsertPt = &*InsertPt->getParent()->getFirstInsertionPt();
+
   // Check to see if we already expanded this here.
   auto I = InsertedExpressions.find(std::make_pair(S, InsertPt));
   if (I != InsertedExpressions.end())
@@ -1942,8 +1945,7 @@ SCEVExpander::getOrInsertCanonicalInductionVariable(const Loop *L,
   // Emit code for it.
   SCEVInsertPointGuard Guard(Builder, this);
   PHINode *V =
-      cast<PHINode>(expandCodeFor(H, nullptr,
-                                  &*L->getHeader()->getFirstInsertionPt()));
+      cast<PHINode>(expandCodeFor(H, nullptr, &L->getHeader()->front()));
 
   return V;
 }

diff  --git a/llvm/test/Transforms/IndVarSimplify/widen-i32-i8ptr.ll b/llvm/test/Transforms/IndVarSimplify/widen-i32-i8ptr.ll
deleted file mode 100644
index 80191d4e5b77..000000000000
--- a/llvm/test/Transforms/IndVarSimplify/widen-i32-i8ptr.ll
+++ /dev/null
@@ -1,24 +0,0 @@
-; RUN: opt < %s -indvars -S | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-n32:64"
-
-define dso_local void @Widen_i32_i8ptr() local_unnamed_addr {
-; CHECK-LABEL: @Widen_i32_i8ptr(
-; CHECK: phi i8*
-; CHECK: phi i32
-entry:
-  %ptrids = alloca [15 x i8*], align 8
-  %arraydecay2032 = getelementptr inbounds [15 x i8*], [15 x i8*]* %ptrids, i64 0, i64 0
-  store i8** %arraydecay2032, i8*** inttoptr (i64 8 to i8***), align 8
-  br label %for.cond2106
-
-for.cond2106:                                     ; preds = %for.cond2106, %entry
-  %gid.0 = phi i8* [ null, %entry ], [ %incdec.ptr, %for.cond2106 ]
-  %i.0 = phi i32 [ 0, %entry ], [ %inc2117, %for.cond2106 ]
-  %incdec.ptr = getelementptr inbounds i8, i8* %gid.0, i64 1
-  %idxprom2114 = zext i32 %i.0 to i64
-  %arrayidx2115 = getelementptr inbounds [15 x i8*], [15 x i8*]* %ptrids, i64 0, i64 %idxprom2114
-  store i8* %gid.0, i8** %arrayidx2115, align 8
-  %inc2117 = add nuw nsw i32 %i.0, 1
-  br label %for.cond2106
-}


        


More information about the llvm-commits mailing list