[llvm] Fix assert in SlotIndexes::getInstructionIndex in debug builds (PR #189370)

via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 30 05:56:26 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-amdgpu

Author: MarcoCastorina

<details>
<summary>Changes</summary>

In some cases, when debug info is enabled, the assertion in SlotIndexes::getInstructionIndex fires as the interval contains only debug instructions. This change ensures only valid instructions are taken into account.

---
Full diff: https://github.com/llvm/llvm-project/pull/189370.diff


1 Files Affected:

- (modified) llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp (+7-4) 


``````````diff
diff --git a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
index 5fd0c1e1064cb..f67b5cd65ec92 100644
--- a/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
+++ b/llvm/lib/Target/AMDGPU/SIWholeQuadMode.cpp
@@ -1174,12 +1174,15 @@ void SIWholeQuadMode::toExact(MachineBasicBlock &MBB,
                               Register SaveWQM) {
   assert(LiveMaskReg.isVirtual());
 
-  bool IsTerminator = Before == MBB.end();
+  auto MBBE = MBB.end();
+  bool IsTerminator = Before == MBBE;
   if (!IsTerminator) {
     auto FirstTerm = MBB.getFirstTerminator();
-    if (FirstTerm != MBB.end()) {
-      SlotIndex FirstTermIdx = LIS->getInstructionIndex(*FirstTerm);
-      SlotIndex BeforeIdx = LIS->getInstructionIndex(*Before);
+    auto FirstNonDbg = skipDebugInstructionsForward(FirstTerm, MBBE);
+    if (FirstNonDbg != MBBE) {
+      auto BeforeNonDbg = skipDebugInstructionsForward(Before, MBBE);
+      SlotIndex FirstTermIdx = LIS->getInstructionIndex(*FirstNonDbg);
+      SlotIndex BeforeIdx = LIS->getInstructionIndex(*BeforeNonDbg);
       IsTerminator = BeforeIdx > FirstTermIdx;
     }
   }

``````````

</details>


https://github.com/llvm/llvm-project/pull/189370


More information about the llvm-commits mailing list