[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