[llvm] 353322f - [AMDGPU] Fix end() iterator dereference in SILowerSGPRSpills (#88828)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 18 07:34:32 PDT 2024
Author: bcahoon
Date: 2024-04-18T09:34:27-05:00
New Revision: 353322f61db41392c56dd9204e912199b5250e78
URL: https://github.com/llvm/llvm-project/commit/353322f61db41392c56dd9204e912199b5250e78
DIFF: https://github.com/llvm/llvm-project/commit/353322f61db41392c56dd9204e912199b5250e78.diff
LOG: [AMDGPU] Fix end() iterator dereference in SILowerSGPRSpills (#88828)
Added:
llvm/test/CodeGen/AMDGPU/sgpr-spills-empty-prolog-block.mir
Modified:
llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
index 4b13825040ebe6..b6a0152f6fa830 100644
--- a/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
+++ b/llvm/lib/Target/AMDGPU/SILowerSGPRSpills.cpp
@@ -278,7 +278,8 @@ void SILowerSGPRSpills::extendWWMVirtRegLiveness(MachineFunction &MF,
for (auto Reg : MFI->getSGPRSpillVGPRs()) {
for (MachineBasicBlock *SaveBlock : SaveBlocks) {
MachineBasicBlock::iterator InsertBefore = SaveBlock->begin();
- auto MIB = BuildMI(*SaveBlock, *InsertBefore, InsertBefore->getDebugLoc(),
+ DebugLoc DL = SaveBlock->findDebugLoc(InsertBefore);
+ auto MIB = BuildMI(*SaveBlock, InsertBefore, DL,
TII->get(AMDGPU::IMPLICIT_DEF), Reg);
MFI->setFlag(Reg, AMDGPU::VirtRegFlag::WWM_REG);
// Set SGPR_SPILL asm printer flag
@@ -294,10 +295,10 @@ void SILowerSGPRSpills::extendWWMVirtRegLiveness(MachineFunction &MF,
for (MachineBasicBlock *RestoreBlock : RestoreBlocks) {
MachineBasicBlock::iterator InsertBefore =
RestoreBlock->getFirstTerminator();
+ DebugLoc DL = RestoreBlock->findDebugLoc(InsertBefore);
for (auto Reg : MFI->getSGPRSpillVGPRs()) {
- auto MIB =
- BuildMI(*RestoreBlock, *InsertBefore, InsertBefore->getDebugLoc(),
- TII->get(TargetOpcode::KILL));
+ auto MIB = BuildMI(*RestoreBlock, InsertBefore, DL,
+ TII->get(TargetOpcode::KILL));
MIB.addReg(Reg);
if (LIS)
LIS->InsertMachineInstrInMaps(*MIB);
diff --git a/llvm/test/CodeGen/AMDGPU/sgpr-spills-empty-prolog-block.mir b/llvm/test/CodeGen/AMDGPU/sgpr-spills-empty-prolog-block.mir
new file mode 100644
index 00000000000000..0c6c0069911f0a
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/sgpr-spills-empty-prolog-block.mir
@@ -0,0 +1,33 @@
+# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs -run-pass=si-lower-sgpr-spills -o - %s | FileCheck %s
+
+# Test that the si-lower-sgpr-spills pass does not defeference a
+# machine instruction iterator that is equal to end().
+
+---
+name: empty_prolog_block
+stack:
+ - { id: 0, name: '', type: spill-slot, offset: 0, size: 32, alignment: 4,
+ stack-id: sgpr-spill, callee-saved-register: '', callee-saved-restored: true,
+ debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
+machineFunctionInfo:
+ hasSpilledSGPRs: true
+body: |
+ ; CHECK-LABEL: name: empty_prolog_block
+ ; CHECK: bb.0:
+ ; CHECK-NEXT: successors: %bb.1(0x80000000)
+ ; CHECK-NEXT: liveins: $sgpr0
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF
+ ; CHECK-NEXT: {{ $}}
+ ; CHECK-NEXT: bb.1:
+ ; CHECK-NEXT: $sgpr0 = SI_RESTORE_S32_FROM_VGPR [[DEF]], 0
+ ; CHECK-NEXT: KILL [[DEF]]
+ ; CHECK-NEXT: S_ENDPGM 0
+ bb.0:
+ liveins: $sgpr0
+ bb.1:
+ renamable $sgpr0 = SI_SPILL_S32_RESTORE %stack.0, implicit $exec, implicit $sgpr32
+ S_ENDPGM 0
+
+...
More information about the llvm-commits
mailing list