1b3cdaef5Sdfukalov# This test used to crash MIRPrinter::convertStackObjects():
2b3cdaef5Sdfukalov# MFI can contain some dead stack objects after PEI pass, but objects storage
3b3cdaef5Sdfukalov# contains not dead objects only. So using objects IDs as offset in the storage
4b3cdaef5Sdfukalov# caused out of bounds access.
5b3cdaef5Sdfukalov
6b3cdaef5Sdfukalov# RUN: llc -march=amdgcn -run-pass=si-lower-sgpr-spills,prologepilog -verify-machineinstrs -o - %s | FileCheck %s
7b3cdaef5Sdfukalov
8b3cdaef5Sdfukalov# CHECK-LABEL: name:            foo
9b3cdaef5Sdfukalov# CHECK: {{^}}fixedStack:      []
10b3cdaef5Sdfukalov# CHECK: stack:           []
11b3cdaef5Sdfukalov
12b3cdaef5Sdfukalov# CHECK-LABEL: name:            bar
13b3cdaef5Sdfukalov# CHECK: fixedStack:      []
14b3cdaef5Sdfukalov# CHECK-NEXT: {{^}}stack:
15b3cdaef5Sdfukalov# CHECK-NEXT:  - { id:
16b3cdaef5Sdfukalov
17b3cdaef5Sdfukalov
18b3cdaef5Sdfukalov---
19b3cdaef5Sdfukalovname:            foo
20b3cdaef5Sdfukalovbody:             |
21b3cdaef5Sdfukalov  bb.0:
2204fff547SVenkata Ramanaiah Nalamothu    SI_RETURN
23b3cdaef5Sdfukalov
24b3cdaef5Sdfukalov...
25b3cdaef5Sdfukalov---
26b3cdaef5Sdfukalovname:            bar
27b3cdaef5SdfukalovtracksRegLiveness: true
28b3cdaef5Sdfukalovliveins:
29b3cdaef5Sdfukalov  - { reg: '$vgpr0', virtual-reg: '' }
30b3cdaef5Sdfukalov  - { reg: '$vgpr1', virtual-reg: '' }
31b3cdaef5Sdfukalov  - { reg: '$vgpr2', virtual-reg: '' }
32b3cdaef5Sdfukalovstack:
33b3cdaef5Sdfukalov  - { id: 0, name: '', type: spill-slot, offset: 0, size: 8, alignment: 4,
34b3cdaef5Sdfukalov      stack-id: sgpr-spill, callee-saved-register: '', callee-saved-restored: true,
35b3cdaef5Sdfukalov      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
36b3cdaef5SdfukalovmachineFunctionInfo:
37b3cdaef5Sdfukalov  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'
38b3cdaef5Sdfukalov  stackPtrOffsetReg: '$sgpr32'
39b3cdaef5Sdfukalovbody:             |
40b3cdaef5Sdfukalov  bb.0:
4104fff547SVenkata Ramanaiah Nalamothu    liveins: $vgpr0, $vgpr1, $vgpr2
42b3cdaef5Sdfukalov
43b3cdaef5Sdfukalov    renamable $vgpr41 = COPY $vgpr2, implicit $exec
44b3cdaef5Sdfukalov    renamable $vgpr40 = COPY $vgpr1, implicit $exec
45b3cdaef5Sdfukalov    renamable $vcc = V_CMP_NE_U32_e64 42, killed $vgpr0, implicit $exec
46b3cdaef5Sdfukalov    $sgpr4_sgpr5 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec
47b3cdaef5Sdfukalov    renamable $sgpr34_sgpr35 = S_XOR_B64 $exec, killed renamable $sgpr4_sgpr5, implicit-def dead $scc
48b3cdaef5Sdfukalov
49b3cdaef5Sdfukalov    ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
50b3cdaef5Sdfukalov    renamable $sgpr4_sgpr5 = SI_PC_ADD_REL_OFFSET target-flags(amdgpu-gotprel32-lo) @foo + 4, target-flags(amdgpu-gotprel32-hi) @foo + 12, implicit-def dead $scc
513bffb1cdSStanislav Mekhanoshin    renamable $sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0
52*2d43955cSScott Linder    dead $sgpr30_sgpr31 = SI_CALL killed renamable $sgpr4_sgpr5, @foo, csr_amdgpu, implicit $sgpr0_sgpr1_sgpr2_sgpr3
53b3cdaef5Sdfukalov    ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
54b3cdaef5Sdfukalov
5504fff547SVenkata Ramanaiah Nalamothu    SI_RETURN
56b3cdaef5Sdfukalov
57b3cdaef5Sdfukalov...
58b3cdaef5Sdfukalov
59