]> granicus.if.org Git - llvm/commitdiff
MIR: Fix printer crashing on dead CSR frame indexes
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 28 May 2019 13:08:31 +0000 (13:08 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 28 May 2019 13:08:31 +0000 (13:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@361819 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MIRPrinter.cpp
test/CodeGen/AMDGPU/mir-print-dead-csr-fi.mir [new file with mode: 0644]

index 86e3f53608c687018284d2a32f9bcf746e0a21f0..1d95187d597c5d5c0c58116be6b95c0a27d54b17 100644 (file)
@@ -403,6 +403,9 @@ void MIRPrinter::convertStackObjects(yaml::MachineFunction &YMF,
   }
 
   for (const auto &CSInfo : MFI.getCalleeSavedInfo()) {
+    if (!CSInfo.isSpilledToReg() && MFI.isDeadObjectIndex(CSInfo.getFrameIdx()))
+      continue;
+
     yaml::StringValue Reg;
     printRegMIR(CSInfo.getReg(), Reg, TRI);
     if (!CSInfo.isSpilledToReg()) {
diff --git a/test/CodeGen/AMDGPU/mir-print-dead-csr-fi.mir b/test/CodeGen/AMDGPU/mir-print-dead-csr-fi.mir
new file mode 100644 (file)
index 0000000..cccf2c1
--- /dev/null
@@ -0,0 +1,28 @@
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -run-pass=prologepilog -o - %s | FileCheck %s
+
+# Make sure the MIR printer doesn't crash when there are dead frame indexes. The
+# CSR SGPR frame indexes are inserted, but deleted.
+
+# CHECK-LABEL: name: csr_sgpr
+# CHECK: fixedStack: []
+# CHECK: stack: []
+---
+name:            csr_sgpr
+tracksRegLiveness: true
+liveins:
+  - { reg: '$sgpr30_sgpr31' }
+frameInfo:
+  maxAlignment:    4
+machineFunctionInfo:
+  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
+  scratchWaveOffsetReg: '$sgpr4'
+  frameOffsetReg:  '$sgpr5'
+  stackPtrOffsetReg: '$sgpr32'
+body:             |
+  bb.0:
+    liveins: $sgpr30_sgpr31
+
+    INLINEASM &"; clobber s42", 1, 12, implicit-def dead early-clobber $sgpr42
+    S_SETPC_B64_return $sgpr30_sgpr31
+
+...