[llvm] [LV] Fix strict weak ordering violation in handleUncountableEarlyExits sort (PR #181462)
Brian Cain via llvm-commits
llvm-commits at lists.llvm.org
Sat Feb 14 11:23:25 PST 2026
https://github.com/androm3da updated https://github.com/llvm/llvm-project/pull/181462
>From 92a3fe3f9837e8baeeb3a146b28a34d0cba02f11 Mon Sep 17 00:00:00 2001
From: Brian Cain <brian.cain at oss.qualcomm.com>
Date: Fri, 13 Feb 2026 22:08:02 -0800
Subject: [PATCH] [LV] Fix strict weak ordering violation in
handleUncountableEarlyExits sort
The comparator used dominates(A, B) which can return true for both
dominates(A, B) and dominates(B, A) when A == B, violating the
irreflexivity requirement of strict weak ordering. This is caught
by _GLIBCXX_DEBUG (LLVM_ENABLE_EXPENSIVE_CHECKS=ON).
Fix by returning false when the two elements are identical.
---
llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
index da3afe7ce6d03..0d713a6dc4e47 100644
--- a/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
+++ b/llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
@@ -4080,7 +4080,7 @@ void VPlanTransforms::handleUncountableEarlyExits(VPlan &Plan,
assert(!Exits.empty() && "must have at least one early exit");
// Sort exits by dominance to get the correct program order.
llvm::sort(Exits, [&VPDT](const EarlyExitInfo &A, const EarlyExitInfo &B) {
- return VPDT.dominates(A.EarlyExitingVPBB, B.EarlyExitingVPBB);
+ return VPDT.properlyDominates(A.EarlyExitingVPBB, B.EarlyExitingVPBB);
});
// Build the AnyOf condition for the latch terminator using logical OR
More information about the llvm-commits
mailing list