[llvm] [LV] Initial support for stores in early exit loops (PR #137774)
David Sherwood via llvm-commits
llvm-commits at lists.llvm.org
Fri May 9 07:28:00 PDT 2025
================
@@ -654,6 +661,16 @@ class LoopVectorizationLegality {
/// Keep track of the loop edge to an uncountable exit, comprising a pair
/// of (Exiting, Exit) blocks, if there is exactly one early exit.
std::optional<std::pair<BasicBlock *, BasicBlock *>> UncountableEdge;
+
+ /// Indicates that we will need to copy the early exit condition into
+ /// the vector preheader, as we will need to mask some operations in
+ /// the loop (e.g. stores).
+ bool RequiresEarlyExitConditionCopy = false;
+
+ /// The load used to determine an uncountable early-exit condition. This is
+ /// only used to allow further analysis in canVectorizeMemory if we found
+ /// what looks like a valid early exit loop with store beforehand.
+ std::optional<LoadInst *> EarlyExitLoad;
----------------
david-arm wrote:
What happens in the case of two loads?, i.e.
%ld1 = load i8, ...
%ld2 = load i8, ...
%cmp = icmp eq i8 %ld1, %ld2
br i1 %cmp, label %early.exit, %loop.inc
https://github.com/llvm/llvm-project/pull/137774
More information about the llvm-commits
mailing list