[llvm] [LV] Add -fold-epilogue-tail option for tail-folded epilogue (PR #190697)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Fri May 1 05:01:11 PDT 2026
================
@@ -7557,6 +7583,43 @@ getEpilogueLowering(Function *F, Loop *L, LoopVectorizeHints &Hints,
return CM_EpilogueAllowed;
}
+/// Determine how to lower the epilogue for the vector epilogue loop.
+/// Check if there are any conflicts that prevent tail-folding the epilogue.
+/// \return CM_EpilogueNotNeededFoldEpilogueTail if epilogue tail-folding
+/// is possible, otherwise CM_EpilogueAllowed.
+static EpilogueLowering
+getEpilogueTailLowering(const LoopVectorizationCostModel &CM) {
+ // Epilogue TF is only enabled when explicitly requested via command line.
+ if (TailFoldingPolicy != TailFoldingPolicyTy::PreferFoldEpilogueTail)
+ // fallback to a normal epilogue.
+ return CM_EpilogueAllowed;
+
+ if (!EnableEpilogueVectorization) {
+ LLVM_DEBUG(dbgs() << "LV: Options conflict, epilogue vectorization is "
+ "disallowed while epilogue tail-folding allowed!\n");
+ LLVM_DEBUG(dbgs() << "LV: Fallback to a normal epilogue\n");
+ return CM_EpilogueAllowed;
+ }
+
+ // If scalar epilogue is explicitly required, we can't apply TF.
+ if (CM.requiresScalarEpilogue(/*IsVectorizing*/ true)) {
+ LLVM_DEBUG(dbgs() << "LV: Epilogue tail-folding can't be applied because "
+ "scalar epilogue is required\n");
+ LLVM_DEBUG(dbgs() << "LV: Fallback to a normal epilogue\n");
----------------
david-arm wrote:
Might be good to combine the two LLVM_DEBUG statements into one, i.e. something like
```
LLVM_DEBUG(dbgs() << "LV: Epilogue tail-folding can't be applied because "
"scalar epilogue is required\n"
<< "LV: Fallback to a normal epilogue\n");
```
and same for the debug above?
https://github.com/llvm/llvm-project/pull/190697
More information about the llvm-commits
mailing list