[PATCH] D77211: [LSR] do not replace PHI nodes if its scev is SCEVUnknown

ChenZheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 1 04:24:55 PDT 2020


shchenz created this revision.
shchenz added reviewers: hfinkel, sanjoy, reames, samparker.
Herald added subscribers: llvm-commits, wuzish, hiraditya.
Herald added a project: LLVM.

This fixes a bug related to LSR PHI node elimination.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77211

Files:
  llvm/lib/Analysis/ScalarEvolutionExpander.cpp
  llvm/test/Transforms/LoopStrengthReduce/phi-unknownscev.ll


Index: llvm/test/Transforms/LoopStrengthReduce/phi-unknownscev.ll
===================================================================
--- llvm/test/Transforms/LoopStrengthReduce/phi-unknownscev.ll
+++ llvm/test/Transforms/LoopStrengthReduce/phi-unknownscev.ll
@@ -18,8 +18,8 @@
 ; %scevgep9798 = bitcast %_elem_type_of_ap* %scevgep97 to [0 x %_elem_type_of_ap]*
 ; %lsr.iv99 = phi [0 x %_elem_type_of_ap]* [ %24, %_scf_2_skip_ ], [ %scevgep9798, %_loop_1_do_.lr.ph ]
 
-; CHECK: INDVARS: Eliminated congruent iv:
-; CHECK-NEXT: INDVARS: Original iv:
+; CHECK-NOT: INDVARS: Eliminated congruent iv:
+; CHECK-NOT: INDVARS: Original iv:
 
 define void @foo(i64* noalias %.n, float* noalias %.alpha, [0 x %_elem_type_of_x]* noalias %.x, [0 x %_elem_type_of_y]* noalias %.y, [0 x %_elem_type_of_ap]* noalias %.ap, i64* noalias %.lda) {
 entry:
Index: llvm/lib/Analysis/ScalarEvolutionExpander.cpp
===================================================================
--- llvm/lib/Analysis/ScalarEvolutionExpander.cpp
+++ llvm/lib/Analysis/ScalarEvolutionExpander.cpp
@@ -35,6 +35,10 @@
     cl::desc("When performing SCEV expansion only if it is cheap to do, this "
              "controls the budget that is considered cheap (default = 4)"));
 
+cl::opt<bool> EliminateSCEVUnknownPHI(
+    "eliminate-SCEVUnknown-phi", cl::Hidden, cl::init(true),
+    cl::desc("This controls congruent SCEVUnknown PHI node can be replaced."));
+
 using namespace PatternMatch;
 
 /// ReuseOrCreateCast - Arrange for there to be a cast of V to Ty at IP,
@@ -2002,7 +2006,11 @@
     if (!SE.isSCEVable(Phi->getType()))
       continue;
 
-    PHINode *&OrigPhiRef = ExprToIVMap[SE.getSCEV(Phi)];
+    const SCEV* S = SE.getSCEV(Phi);
+    if (EliminateSCEVUnknownPHI && isa<SCEVUnknown>(S))
+      continue;
+
+    PHINode *&OrigPhiRef = ExprToIVMap[S];
     if (!OrigPhiRef) {
       OrigPhiRef = Phi;
       if (Phi->getType()->isIntegerTy() && TTI &&


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77211.254162.patch
Type: text/x-patch
Size: 1930 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200401/739acf1a/attachment.bin>


More information about the llvm-commits mailing list