brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · cc261b0 Raw
143 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx906 -run-pass=prologepilog,machine-cp -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s3 4# The COPY that moves the return value to VGPR0 should not be removed during machine-cp. The spill restore of the same register that follows,5# meant to only reload its inactive lanes. By marking the reg itself as the tied-op in the spill reload prevents the undesired optimization.6 7---8name:            wwm_scratch_reg_spill_reload_of_outgoing_reg9tracksRegLiveness: true10machineFunctionInfo:11  wwmReservedRegs: ['$vgpr0']12  isEntryFunction: false13  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'14  stackPtrOffsetReg: '$sgpr32'15  frameOffsetReg: '$sgpr33'16body:             |17  bb.0:18    liveins: $sgpr20, $vgpr119    ; GCN-LABEL: name: wwm_scratch_reg_spill_reload_of_outgoing_reg20    ; GCN: liveins: $sgpr20, $vgpr121    ; GCN-NEXT: {{  $}}22    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec23    ; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)24    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr525    ; GCN-NEXT: $vgpr0 = IMPLICIT_DEF26    ; GCN-NEXT: $vgpr0 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr027    ; GCN-NEXT: $vgpr0 = COPY killed renamable $vgpr1, implicit $exec28    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec29    ; GCN-NEXT: $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit $vgpr0(tied-def 0) :: (load (s32) from %stack.0, addrspace 5)30    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr531    ; GCN-NEXT: SI_RETURN implicit $vgpr032    $vgpr0 = IMPLICIT_DEF33    $vgpr0 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr034    $vgpr0 = COPY killed renamable $vgpr1, implicit $exec35    SI_RETURN implicit $vgpr036...37 38# The reload of vgpr0 require the tied-op as it is a subreg in the outgoing tuple register vgpr0_vgpr1.39# The vgpr2 doesn't need the tied-op in the reload as it isn't holding any return value.40---41name:            wwm_scratch_reg_spill_reload_of_outgoing_tuple_subreg42tracksRegLiveness: true43machineFunctionInfo:44  wwmReservedRegs: ['$vgpr0', '$vgpr2']45  isEntryFunction: false46  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'47  stackPtrOffsetReg: '$sgpr32'48  frameOffsetReg: '$sgpr33'49body:             |50  bb.0:51    liveins: $sgpr20, $sgpr21, $vgpr152    ; GCN-LABEL: name: wwm_scratch_reg_spill_reload_of_outgoing_tuple_subreg53    ; GCN: liveins: $sgpr20, $sgpr21, $vgpr154    ; GCN-NEXT: {{  $}}55    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec56    ; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)57    ; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)58    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr559    ; GCN-NEXT: $vgpr0 = IMPLICIT_DEF60    ; GCN-NEXT: $vgpr2 = IMPLICIT_DEF61    ; GCN-NEXT: $vgpr0 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr062    ; GCN-NEXT: $vgpr2 = SI_SPILL_S32_TO_VGPR killed $sgpr21, 0, $vgpr263    ; GCN-NEXT: $vgpr0 = COPY $vgpr1, implicit $exec64    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec65    ; GCN-NEXT: $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec, implicit $vgpr0(tied-def 0) :: (load (s32) from %stack.0, addrspace 5)66    ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 4, 0, 0, implicit $exec :: (load (s32) from %stack.1, addrspace 5)67    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr568    ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr169    $vgpr0 = IMPLICIT_DEF70    $vgpr2 = IMPLICIT_DEF71    $vgpr0 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr072    $vgpr2 = SI_SPILL_S32_TO_VGPR killed $sgpr21, 0, $vgpr273    $vgpr0 = COPY $vgpr1, implicit $exec74    SI_RETURN implicit $vgpr0_vgpr175...76 77# Tied op not required in the spill reload of vgpr2.78 79---80name:            wwm_scratch_reg_spill_reload_different_outgoing_reg81tracksRegLiveness: true82machineFunctionInfo:83  wwmReservedRegs: ['$vgpr2']84  isEntryFunction: false85  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'86  stackPtrOffsetReg: '$sgpr32'87  frameOffsetReg: '$sgpr33'88body:             |89  bb.0:90    liveins: $sgpr20, $vgpr191    ; GCN-LABEL: name: wwm_scratch_reg_spill_reload_different_outgoing_reg92    ; GCN: liveins: $sgpr20, $vgpr193    ; GCN-NEXT: {{  $}}94    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec95    ; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)96    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr597    ; GCN-NEXT: $vgpr2 = IMPLICIT_DEF98    ; GCN-NEXT: $vgpr2 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr299    ; GCN-NEXT: $vgpr0 = COPY $vgpr1, implicit $exec100    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec101    ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)102    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr5103    ; GCN-NEXT: SI_RETURN implicit $vgpr0_vgpr1104    $vgpr2 = IMPLICIT_DEF105    $vgpr2 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr2106    $vgpr0 = COPY $vgpr1, implicit $exec107    SI_RETURN implicit $vgpr0_vgpr1108...109 110# Tied op not required in the spill reload of vgpr40 which is in the CSR range.111---112name:            wwm_csr_spill_reload113tracksRegLiveness: true114machineFunctionInfo:115  wwmReservedRegs: ['$vgpr40']116  isEntryFunction: false117  scratchRSrcReg:  '$sgpr0_sgpr1_sgpr2_sgpr3'118  stackPtrOffsetReg: '$sgpr32'119  frameOffsetReg: '$sgpr33'120body:             |121  bb.0:122    liveins: $sgpr20, $vgpr1123    ; GCN-LABEL: name: wwm_csr_spill_reload124    ; GCN: liveins: $sgpr20, $vgpr1125    ; GCN-NEXT: {{  $}}126    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec127    ; GCN-NEXT: BUFFER_STORE_DWORD_OFFSET killed $vgpr2, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (store (s32) into %stack.0, addrspace 5)128    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr5129    ; GCN-NEXT: $vgpr2 = IMPLICIT_DEF130    ; GCN-NEXT: $vgpr2 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr2131    ; GCN-NEXT: $sgpr20 = SI_RESTORE_S32_FROM_VGPR $vgpr2, 0, implicit $exec132    ; GCN-NEXT: $vgpr0 = COPY killed $vgpr1, implicit $exec133    ; GCN-NEXT: $sgpr4_sgpr5 = S_XOR_SAVEEXEC_B64 -1, implicit-def $exec, implicit-def dead $scc, implicit $exec134    ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFSET $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr32, 0, 0, 0, implicit $exec :: (load (s32) from %stack.0, addrspace 5)135    ; GCN-NEXT: $exec = S_MOV_B64 killed $sgpr4_sgpr5136    ; GCN-NEXT: SI_RETURN implicit $vgpr0137    $vgpr40 = IMPLICIT_DEF138    $vgpr40 = SI_SPILL_S32_TO_VGPR killed $sgpr20, 0, $vgpr40139    $sgpr20 = SI_RESTORE_S32_FROM_VGPR $vgpr40, 0, implicit $exec140    $vgpr0 = COPY killed $vgpr1, implicit $exec141    SI_RETURN implicit $vgpr0142...143