[llvm] fa0014a - [SCEV] Drop LCSSA check in createNodeFromSelectLikePHI()
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 27 06:18:30 PDT 2023
Author: Nikita Popov
Date: 2023-04-27T15:18:07+02:00
New Revision: fa0014a68bb452ff12af6e4af5e6e919dbe8584b
URL: https://github.com/llvm/llvm-project/commit/fa0014a68bb452ff12af6e4af5e6e919dbe8584b
DIFF: https://github.com/llvm/llvm-project/commit/fa0014a68bb452ff12af6e4af5e6e919dbe8584b.diff
LOG: [SCEV] Drop LCSSA check in createNodeFromSelectLikePHI()
SCEV expressions no longer try to preserve LCSSA form. SCEV
construction will try to look through LCSSA phi nodes. As such,
we also no longer need to limit this special-case fold.
Added:
Modified:
llvm/lib/Analysis/ScalarEvolution.cpp
llvm/test/Analysis/ScalarEvolution/smax-br-phi-idioms.ll
Removed:
################################################################################
diff --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index d7aeb0b28609..3edd4f71c7fa 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -6013,11 +6013,6 @@ const SCEV *ScalarEvolution::createNodeFromSelectLikePHI(PHINode *PN) {
if (PN->getNumIncomingValues() == 2 && all_of(PN->blocks(), IsReachable)) {
const Loop *L = LI.getLoopFor(PN->getParent());
- // We don't want to break LCSSA, even in a SCEV expression tree.
- for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
- if (LI.getLoopFor(PN->getIncomingBlock(i)) != L)
- return nullptr;
-
// Try to match
//
// br %cond, label %left, label %right
diff --git a/llvm/test/Analysis/ScalarEvolution/smax-br-phi-idioms.ll b/llvm/test/Analysis/ScalarEvolution/smax-br-phi-idioms.ll
index 82600b979e31..e307bd589a93 100644
--- a/llvm/test/Analysis/ScalarEvolution/smax-br-phi-idioms.ll
+++ b/llvm/test/Analysis/ScalarEvolution/smax-br-phi-idioms.ll
@@ -145,15 +145,14 @@ merge:
ret i32 %v
}
-; Matching "through" %init will break LCSSA at the SCEV expression
-; level.
+; It's okay to match "through" %init, as SCEV expressions don't preserve LCSSA.
define i32 @f5(ptr %val) {
; CHECK-LABEL: 'f5'
; CHECK-NEXT: Classifying expressions for: @f5
; CHECK-NEXT: %inc = load i32, ptr %val, align 4
; CHECK-NEXT: --> %inc U: full-set S: full-set Exits: <<Unknown>> LoopDispositions: { %for.end: Variant }
; CHECK-NEXT: %init = phi i32 [ 0, %for.condt ], [ %inc, %for.end ]
-; CHECK-NEXT: --> %init U: full-set S: full-set
+; CHECK-NEXT: --> %inc U: full-set S: full-set
; CHECK-NEXT: Determining loop execution counts for: @f5
; CHECK-NEXT: Loop %for.end: <multiple exits> backedge-taken count is false
; CHECK-NEXT: exit count for for.end: false
More information about the llvm-commits
mailing list