208 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -run-pass=regallocfast -o - %s | FileCheck -check-prefix=GCN %s3# RUN: llc -verify-machineinstrs -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -passes=regallocfast -o - %s | FileCheck -check-prefix=GCN %s4 5---6name: self_loop_single_def_use7tracksRegLiveness: true8machineFunctionInfo:9 isEntryFunction: true10 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'11 stackPtrOffsetReg: '$sgpr32'12body: |13 ; GCN-LABEL: name: self_loop_single_def_use14 ; GCN: bb.0:15 ; GCN-NEXT: successors: %bb.1(0x80000000)16 ; GCN-NEXT: liveins: $vgpr0_vgpr117 ; GCN-NEXT: {{ $}}18 ; GCN-NEXT: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)19 ; GCN-NEXT: {{ $}}20 ; GCN-NEXT: bb.1:21 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)22 ; GCN-NEXT: {{ $}}23 ; GCN-NEXT: $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)24 ; GCN-NEXT: renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec25 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec26 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec27 ; GCN-NEXT: {{ $}}28 ; GCN-NEXT: bb.2:29 ; GCN-NEXT: S_ENDPGM 030 bb.0:31 liveins: $vgpr0_vgpr132 %0:vreg_64 = COPY $vgpr0_vgpr133 34 bb.1:35 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec36 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec37 S_CBRANCH_EXECZ %bb.1, implicit $exec38 39 bb.2:40 S_ENDPGM 041 42...43 44---45name: self_loop_multi_def46tracksRegLiveness: true47machineFunctionInfo:48 isEntryFunction: true49 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'50 stackPtrOffsetReg: '$sgpr32'51body: |52 ; GCN-LABEL: name: self_loop_multi_def53 ; GCN: bb.0:54 ; GCN-NEXT: successors: %bb.1(0x80000000)55 ; GCN-NEXT: liveins: $vgpr0_vgpr156 ; GCN-NEXT: {{ $}}57 ; GCN-NEXT: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)58 ; GCN-NEXT: {{ $}}59 ; GCN-NEXT: bb.1:60 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)61 ; GCN-NEXT: {{ $}}62 ; GCN-NEXT: $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)63 ; GCN-NEXT: renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec64 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, renamable $vgpr2, 0, 0, implicit $exec65 ; GCN-NEXT: renamable $vgpr2 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec66 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec67 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec68 ; GCN-NEXT: {{ $}}69 ; GCN-NEXT: bb.2:70 ; GCN-NEXT: S_ENDPGM 071 72 bb.0:73 liveins: $vgpr0_vgpr174 %0:vreg_64 = COPY $vgpr0_vgpr175 76 bb.1:77 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec78 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec79 %1:vgpr_32 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec80 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec81 S_CBRANCH_EXECZ %bb.1, implicit $exec82 83 bb.2:84 S_ENDPGM 085 86...87 88# There's a single def inside the self loop, but it's also a use.89 90---91name: self_loop_def_use_same_inst92tracksRegLiveness: true93machineFunctionInfo:94 isEntryFunction: true95 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'96 stackPtrOffsetReg: '$sgpr32'97body: |98 ; GCN-LABEL: name: self_loop_def_use_same_inst99 ; GCN: bb.0:100 ; GCN-NEXT: successors: %bb.1(0x80000000)101 ; GCN-NEXT: liveins: $vgpr0_vgpr1102 ; GCN-NEXT: {{ $}}103 ; GCN-NEXT: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)104 ; GCN-NEXT: {{ $}}105 ; GCN-NEXT: bb.1:106 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)107 ; GCN-NEXT: {{ $}}108 ; GCN-NEXT: $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)109 ; GCN-NEXT: renamable $vgpr2 = V_ADD_U32_e32 1, undef $vgpr0, implicit $exec110 ; GCN-NEXT: SI_SPILL_V32_SAVE $vgpr2, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)111 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, renamable $vgpr2, 0, 0, implicit $exec112 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec113 ; GCN-NEXT: {{ $}}114 ; GCN-NEXT: bb.2:115 ; GCN-NEXT: S_ENDPGM 0116 bb.0:117 liveins: $vgpr0_vgpr1118 %0:vreg_64 = COPY $vgpr0_vgpr1119 120 bb.1:121 %1:vgpr_32 = V_ADD_U32_e32 1, undef %1, implicit $exec122 GLOBAL_STORE_DWORD %0, %1, 0, 0, implicit $exec123 S_CBRANCH_EXECZ %bb.1, implicit $exec124 125 bb.2:126 S_ENDPGM 0127 128...129 130---131name: self_loop_def_after_use132tracksRegLiveness: true133machineFunctionInfo:134 isEntryFunction: true135 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'136 stackPtrOffsetReg: '$sgpr32'137body: |138 ; GCN-LABEL: name: self_loop_def_after_use139 ; GCN: bb.0:140 ; GCN-NEXT: successors: %bb.1(0x80000000)141 ; GCN-NEXT: liveins: $vgpr0_vgpr1142 ; GCN-NEXT: {{ $}}143 ; GCN-NEXT: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)144 ; GCN-NEXT: {{ $}}145 ; GCN-NEXT: bb.1:146 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)147 ; GCN-NEXT: {{ $}}148 ; GCN-NEXT: $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)149 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, undef renamable $vgpr0, 0, 0, implicit $exec150 ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e64 1, 1, 0, implicit $exec151 ; GCN-NEXT: SI_SPILL_V32_SAVE killed $vgpr0, %stack.1, $sgpr32, 0, implicit $exec :: (store (s32) into %stack.1, addrspace 5)152 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec153 ; GCN-NEXT: {{ $}}154 ; GCN-NEXT: bb.2:155 ; GCN-NEXT: S_ENDPGM 0156 bb.0:157 liveins: $vgpr0_vgpr1158 %0:vreg_64 = COPY $vgpr0_vgpr1159 160 bb.1:161 GLOBAL_STORE_DWORD %0, undef %1, 0, 0, implicit $exec162 %1:vgpr_32 = V_ADD_U32_e64 1, 1, 0, implicit $exec163 S_CBRANCH_EXECZ %bb.1, implicit $exec164 165 bb.2:166 S_ENDPGM 0167 168...169 170---171name: self_loop_single_subreg_def_use172tracksRegLiveness: true173machineFunctionInfo:174 isEntryFunction: true175 scratchRSrcReg: '$sgpr0_sgpr1_sgpr2_sgpr3'176 stackPtrOffsetReg: '$sgpr32'177body: |178 ; GCN-LABEL: name: self_loop_single_subreg_def_use179 ; GCN: bb.0:180 ; GCN-NEXT: successors: %bb.1(0x80000000)181 ; GCN-NEXT: liveins: $vgpr0_vgpr1182 ; GCN-NEXT: {{ $}}183 ; GCN-NEXT: SI_SPILL_V64_SAVE killed $vgpr0_vgpr1, %stack.0, $sgpr32, 0, implicit $exec :: (store (s64) into %stack.0, align 4, addrspace 5)184 ; GCN-NEXT: {{ $}}185 ; GCN-NEXT: bb.1:186 ; GCN-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)187 ; GCN-NEXT: {{ $}}188 ; GCN-NEXT: $vgpr0_vgpr1 = SI_SPILL_V64_RESTORE %stack.0, $sgpr32, 0, implicit $exec :: (load (s64) from %stack.0, align 4, addrspace 5)189 ; GCN-NEXT: undef renamable $vgpr3 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit-def dead $vgpr2_vgpr3190 ; GCN-NEXT: GLOBAL_STORE_DWORD renamable $vgpr0_vgpr1, undef renamable $vgpr1, 0, 0, implicit $exec191 ; GCN-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec192 ; GCN-NEXT: {{ $}}193 ; GCN-NEXT: bb.2:194 ; GCN-NEXT: S_ENDPGM 0195 bb.0:196 liveins: $vgpr0_vgpr1197 %0:vreg_64 = COPY $vgpr0_vgpr1198 199 bb.1:200 undef %1.sub1:vreg_64 = GLOBAL_LOAD_DWORD %0, 0, 0, implicit $exec201 GLOBAL_STORE_DWORD %0, undef %1.sub1, 0, 0, implicit $exec202 S_CBRANCH_EXECZ %bb.1, implicit $exec203 204 bb.2:205 S_ENDPGM 0206 207...208