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