[llvm] [LoopPeel] Implement initial peeling off the last loop iteration. (PR #139551)
Florian Hahn via llvm-commits
llvm-commits at lists.llvm.org
Thu May 15 09:16:31 PDT 2025
================
@@ -325,19 +326,71 @@ static unsigned peelToTurnInvariantLoadsDerefencebale(Loop &L,
return 0;
}
-// Return the number of iterations to peel off that make conditions in the
-// body true/false. For example, if we peel 2 iterations off the loop below,
-// the condition i < 2 can be evaluated at compile time.
+bool llvm::canPeelLastIteration(const Loop &L, ScalarEvolution &SE) {
+ const SCEV *BTC = SE.getBackedgeTakenCount(&L);
+ Value *Inc;
+ CmpPredicate Pred;
+ BasicBlock *Succ1;
+ BasicBlock *Succ2;
+ // The loop must execute at least 2 iterations to guarantee that peeled
+ // iteration executes.
+ // TODO: Add checks during codegen.
+ if (isa<SCEVCouldNotCompute>(BTC) ||
----------------
fhahn wrote:
Thanks, updated! Also added tests in 310ed2b070432db3899473c4c2fd92f6a5e35067
https://github.com/llvm/llvm-project/pull/139551
More information about the llvm-commits
mailing list