[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