[llvm-branch-commits] [llvm] 409361c - Revert "[LoopBoundSplit] Fix edge connections during transformation (#192106)"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri May 29 06:57:20 PDT 2026
Author: Congzhe Cao
Date: 2026-05-29T09:57:16-04:00
New Revision: 409361c57949c6a3586a1f8b6015eccf628acfb8
URL: https://github.com/llvm/llvm-project/commit/409361c57949c6a3586a1f8b6015eccf628acfb8
DIFF: https://github.com/llvm/llvm-project/commit/409361c57949c6a3586a1f8b6015eccf628acfb8.diff
LOG: Revert "[LoopBoundSplit] Fix edge connections during transformation (#192106)"
This reverts commit fa44ca8e5ef6f57c03ba55a4c7b944c9a3ee633e.
Added:
Modified:
llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp b/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp
index 27ccce3328d27..a461e1f7fe074 100644
--- a/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopBoundSplit.cpp
@@ -356,19 +356,6 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
BasicBlock *PostLoopPreHeader = PostLoop->getLoopPreheader();
IRBuilder<> Builder(&PostLoopPreHeader->front());
- // Replace exit branch target of pre-loop by post-loop's preheader.
- // Note: update the branch here after calling cloneLoopWithPreheader()
- // to keep the IR valid.
- if (L.getExitBlock() == ExitingCond.BI->getSuccessor(0))
- ExitingCond.BI->setSuccessor(0, PostLoopPreHeader);
- else
- ExitingCond.BI->setSuccessor(1, PostLoopPreHeader);
-
- // Update dominator tree.
- DT.changeImmediateDominator(PostLoopPreHeader, L.getExitingBlock());
-#ifndef NDEBUG
- LI.verify(DT);
-#endif
// Update phi nodes in header of post-loop.
bool isExitingLatch = L.getExitingBlock() == L.getLoopLatch();
Value *ExitingCondLCSSAPhi = nullptr;
@@ -390,8 +377,6 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
// Find PHI with exiting condition from pre-loop. The PHI should be
// SCEVAddRecExpr and have same incoming value from backedge with
// ExitingCond.
- //
- // TODO: Separate SCEV queries from PHI node updates.
if (!SE.isSCEVable(PN.getType()))
continue;
@@ -401,22 +386,13 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
ExitingCondLCSSAPhi = LCSSAPhi;
}
- // Add conditional branch to check we can skip post-loop in its preheader,
- // and update DT.
+ // Add conditional branch to check we can skip post-loop in its preheader.
Instruction *OrigBI = PostLoopPreHeader->getTerminator();
ICmpInst::Predicate Pred = ICmpInst::ICMP_NE;
Value *Cond =
Builder.CreateICmp(Pred, ExitingCondLCSSAPhi, ExitingCond.BoundValue);
Builder.CreateCondBr(Cond, PostLoop->getHeader(), PostLoop->getExitBlock());
OrigBI->eraseFromParent();
- DT.changeImmediateDominator(PostLoop->getExitBlock(), PostLoopPreHeader);
-#ifdef EXPENSIVE_CHECKS
- assert(DT.verify(DominatorTree::VerificationLevel::Full) &&
- "DT broken during transformation!");
-#else
- assert(DT.verify(DominatorTree::VerificationLevel::Fast) &&
- "DT broken during transformation!");
-#endif
// Create new loop bound and add it into preheader of pre-loop.
const SCEV *NewBoundSCEV = ExitingCond.BoundSCEV;
@@ -443,6 +419,12 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
cast<CondBrInst>(VMap[SplitCandidateCond.BI]);
ClonedSplitCandidateBI->setCondition(ConstantInt::getFalse(Context));
+ // Replace exit branch target of pre-loop by post-loop's preheader.
+ if (L.getExitBlock() == ExitingCond.BI->getSuccessor(0))
+ ExitingCond.BI->setSuccessor(0, PostLoopPreHeader);
+ else
+ ExitingCond.BI->setSuccessor(1, PostLoopPreHeader);
+
// Update phi node in exit block of post-loop.
Builder.SetInsertPoint(PostLoopPreHeader, PostLoopPreHeader->begin());
for (PHINode &PN : PostLoop->getExitBlock()->phis()) {
@@ -467,6 +449,10 @@ static bool splitLoopBound(Loop &L, DominatorTree &DT, LoopInfo &LI,
}
}
+ // Update dominator tree.
+ DT.changeImmediateDominator(PostLoopPreHeader, L.getExitingBlock());
+ DT.changeImmediateDominator(PostLoop->getExitBlock(), PostLoopPreHeader);
+
// Invalidate cached SE information.
SE.forgetLoop(&L);
More information about the llvm-branch-commits
mailing list