https://github.com/arsenm created 
https://github.com/llvm/llvm-project/pull/228055

SplitCriticalEdge trims the stale extension of a live range into the newly
created block. The subrange guard used overlaps(StartIndex, EndIndex), which
happens to work only because insertMBBInMaps creates exactly one fresh index for
the new block, so no pre-existing segment endpoint can fall strictly inside the
range. That only happens to make makes overlap equivalent to containment.

Check liveAt(PrevIndex) instead, mirroring the same condition on the main range.

Co-authored-by: Claude Opus 5 <[email protected]>

>From f039a4b2a3172eb4259fec98460dde9b577718ea Mon Sep 17 00:00:00 2001
From: Matt Arsenault <[email protected]>
Date: Thu, 1 Oct 2026 13:37:10 +0200
Subject: [PATCH] CodeGen: Check subrange liveness directly when trimming split
 edges

SplitCriticalEdge trims the stale extension of a live range into the newly
created block. The subrange guard used overlaps(StartIndex, EndIndex), which
happens to work only because insertMBBInMaps creates exactly one fresh index for
the new block, so no pre-existing segment endpoint can fall strictly inside the
range. That only happens to make makes overlap equivalent to containment.

Check liveAt(PrevIndex) instead, mirroring the same condition on the main range.

Co-authored-by: Claude Opus 5 <[email protected]>
---
 llvm/lib/CodeGen/MachineBasicBlock.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp 
b/llvm/lib/CodeGen/MachineBasicBlock.cpp
index 006a9fcb02bf4..4cd6afed26405 100644
--- a/llvm/lib/CodeGen/MachineBasicBlock.cpp
+++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp
@@ -1385,8 +1385,10 @@ MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge(
         }
       } else if (!isLiveOut && !isLastMBB) {
         LI.removeSegment(StartIndex, EndIndex);
+        // The main range is live across NMBB, but an individual lane need not
+        // be.
         for (auto &SR : LI.subranges()) {
-          if (SR.overlaps(StartIndex, EndIndex))
+          if (SR.liveAt(PrevIndex))
             SR.removeSegment(StartIndex, EndIndex);
         }
       }

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to