213 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 42# RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1010 -start-before=rename-independent-subregs -mattr=+wavefrontsize64 -stop-before=amdgpu-mark-last-scratch-load %s -o - | FileCheck -check-prefix=REG_ALLOC %s3# RUN: llc -mtriple=amdgcn--amdpal -mcpu=gfx1010 -start-before=rename-independent-subregs -mattr=+wavefrontsize64 -stop-after=machine-cp %s -o - | FileCheck -check-prefix=DEAD_INST_DEL %s4 5---6name: _amdgpu_cs_main7tracksRegLiveness: true8body: |9 ; REG_ALLOC-LABEL: name: _amdgpu_cs_main10 ; REG_ALLOC: bb.0:11 ; REG_ALLOC-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)12 ; REG_ALLOC-NEXT: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr1113 ; REG_ALLOC-NEXT: {{ $}}14 ; REG_ALLOC-NEXT: renamable $vgpr11_vgpr12_vgpr13_vgpr14 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr3, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)15 ; REG_ALLOC-NEXT: renamable $vgpr12_vgpr13_vgpr14_vgpr15 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr2, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)16 ; REG_ALLOC-NEXT: renamable $vgpr5_vgpr6_vgpr7_vgpr8 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr0, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)17 ; REG_ALLOC-NEXT: renamable $vgpr6_vgpr7_vgpr8_vgpr9 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr4, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)18 ; REG_ALLOC-NEXT: KILL killed renamable $vgpr419 ; REG_ALLOC-NEXT: KILL killed renamable $vgpr220 ; REG_ALLOC-NEXT: KILL killed renamable $vgpr021 ; REG_ALLOC-NEXT: KILL killed renamable $vgpr322 ; REG_ALLOC-NEXT: KILL killed renamable $sgpr8_sgpr9_sgpr10_sgpr1123 ; REG_ALLOC-NEXT: renamable $sgpr8 = V_READFIRSTLANE_B32 killed $vgpr11, implicit $exec24 ; REG_ALLOC-NEXT: renamable $sgpr9 = V_READFIRSTLANE_B32 killed $vgpr12, implicit $exec25 ; REG_ALLOC-NEXT: renamable $sgpr6_sgpr7 = V_CMP_NE_U32_e64 killed $vgpr1, 0, implicit $exec26 ; REG_ALLOC-NEXT: S_CMP_EQ_U64 killed renamable $sgpr8_sgpr9, killed renamable $sgpr2_sgpr3, implicit-def $scc27 ; REG_ALLOC-NEXT: renamable $sgpr1 = S_CSELECT_B32 1, 0, implicit $scc28 ; REG_ALLOC-NEXT: renamable $vgpr0 = IMPLICIT_DEF29 ; REG_ALLOC-NEXT: $exec = S_MOV_B64_term renamable $sgpr6_sgpr730 ; REG_ALLOC-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec31 ; REG_ALLOC-NEXT: S_BRANCH %bb.232 ; REG_ALLOC-NEXT: {{ $}}33 ; REG_ALLOC-NEXT: bb.1:34 ; REG_ALLOC-NEXT: successors: %bb.3(0x40000000), %bb.5(0x40000000)35 ; REG_ALLOC-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr4_sgpr5, $sgpr6_sgpr7, $vgpr5_vgpr6_vgpr7_vgpr8:0x0000000000000003, $vgpr6_vgpr7_vgpr8_vgpr9:0x000000000000000336 ; REG_ALLOC-NEXT: {{ $}}37 ; REG_ALLOC-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec38 ; REG_ALLOC-NEXT: $exec = S_XOR_B64_term $exec, renamable $sgpr2_sgpr3, implicit-def $scc39 ; REG_ALLOC-NEXT: S_CBRANCH_EXECZ %bb.5, implicit $exec40 ; REG_ALLOC-NEXT: S_BRANCH %bb.341 ; REG_ALLOC-NEXT: {{ $}}42 ; REG_ALLOC-NEXT: bb.2:43 ; REG_ALLOC-NEXT: successors: %bb.1(0x80000000)44 ; REG_ALLOC-NEXT: liveins: $sgpr0, $sgpr1, $vgpr10, $sgpr4_sgpr5, $sgpr6_sgpr745 ; REG_ALLOC-NEXT: {{ $}}46 ; REG_ALLOC-NEXT: renamable $sgpr1 = S_OR_B32 killed renamable $sgpr1, 2, implicit-def dead $scc47 ; REG_ALLOC-NEXT: renamable $vgpr0 = COPY killed renamable $sgpr148 ; REG_ALLOC-NEXT: renamable $vgpr5_vgpr6 = IMPLICIT_DEF49 ; REG_ALLOC-NEXT: renamable $vgpr6_vgpr7_vgpr8_vgpr9 = IMPLICIT_DEF50 ; REG_ALLOC-NEXT: S_BRANCH %bb.151 ; REG_ALLOC-NEXT: {{ $}}52 ; REG_ALLOC-NEXT: bb.3:53 ; REG_ALLOC-NEXT: successors: %bb.5(0x80000000)54 ; REG_ALLOC-NEXT: liveins: $sgpr0, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr5, $vgpr5_vgpr6_vgpr7_vgpr8:0x0000000000000003, $vgpr6_vgpr7_vgpr8_vgpr9:0x000000000000000355 ; REG_ALLOC-NEXT: {{ $}}56 ; REG_ALLOC-NEXT: renamable $sgpr1 = V_READFIRSTLANE_B32 killed $vgpr5, implicit $exec57 ; REG_ALLOC-NEXT: renamable $sgpr6 = V_READFIRSTLANE_B32 killed $vgpr6, implicit $exec58 ; REG_ALLOC-NEXT: S_CMP_EQ_U32 killed renamable $sgpr6, killed renamable $sgpr1, implicit-def $scc59 ; REG_ALLOC-NEXT: renamable $sgpr1 = S_CSELECT_B32 1, 0, implicit $scc60 ; REG_ALLOC-NEXT: renamable $vgpr0 = COPY killed renamable $sgpr161 ; REG_ALLOC-NEXT: S_BRANCH %bb.562 ; REG_ALLOC-NEXT: {{ $}}63 ; REG_ALLOC-NEXT: bb.4:64 ; REG_ALLOC-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr4_sgpr565 ; REG_ALLOC-NEXT: {{ $}}66 ; REG_ALLOC-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (invariant load (<4 x s32>), addrspace 4)67 ; REG_ALLOC-NEXT: renamable $vgpr1 = V_ADD_U32_e64 killed $sgpr0, killed $vgpr10, 0, implicit $exec68 ; REG_ALLOC-NEXT: BUFFER_STORE_DWORD_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)69 ; REG_ALLOC-NEXT: S_ENDPGM 070 ; REG_ALLOC-NEXT: {{ $}}71 ; REG_ALLOC-NEXT: bb.5:72 ; REG_ALLOC-NEXT: successors: %bb.4(0x80000000)73 ; REG_ALLOC-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr574 ; REG_ALLOC-NEXT: {{ $}}75 ; REG_ALLOC-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc76 ; REG_ALLOC-NEXT: S_BRANCH %bb.477 ;78 ; DEAD_INST_DEL-LABEL: name: _amdgpu_cs_main79 ; DEAD_INST_DEL: bb.0:80 ; DEAD_INST_DEL-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)81 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr1182 ; DEAD_INST_DEL-NEXT: {{ $}}83 ; DEAD_INST_DEL-NEXT: renamable $vgpr11_vgpr12_vgpr13_vgpr14 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr3, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)84 ; DEAD_INST_DEL-NEXT: renamable $vgpr12_vgpr13_vgpr14_vgpr15 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr2, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)85 ; DEAD_INST_DEL-NEXT: renamable $vgpr5_vgpr6_vgpr7_vgpr8 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr0, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)86 ; DEAD_INST_DEL-NEXT: renamable $vgpr6_vgpr7_vgpr8_vgpr9 = BUFFER_LOAD_DWORDX4_OFFEN renamable $vgpr4, renamable $sgpr8_sgpr9_sgpr10_sgpr11, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)87 ; DEAD_INST_DEL-NEXT: KILL killed renamable $vgpr488 ; DEAD_INST_DEL-NEXT: KILL killed renamable $vgpr289 ; DEAD_INST_DEL-NEXT: KILL killed renamable $vgpr090 ; DEAD_INST_DEL-NEXT: KILL killed renamable $vgpr391 ; DEAD_INST_DEL-NEXT: KILL killed renamable $sgpr8_sgpr9_sgpr10_sgpr1192 ; DEAD_INST_DEL-NEXT: renamable $sgpr8 = V_READFIRSTLANE_B32 killed $vgpr11, implicit $exec93 ; DEAD_INST_DEL-NEXT: renamable $sgpr9 = V_READFIRSTLANE_B32 killed $vgpr12, implicit $exec94 ; DEAD_INST_DEL-NEXT: renamable $sgpr6_sgpr7 = V_CMP_NE_U32_e64 killed $vgpr1, 0, implicit $exec95 ; DEAD_INST_DEL-NEXT: S_CMP_EQ_U64 killed renamable $sgpr8_sgpr9, killed renamable $sgpr2_sgpr3, implicit-def $scc96 ; DEAD_INST_DEL-NEXT: renamable $sgpr1 = S_CSELECT_B32 1, 0, implicit $scc97 ; DEAD_INST_DEL-NEXT: renamable $vgpr0 = IMPLICIT_DEF98 ; DEAD_INST_DEL-NEXT: $exec = S_MOV_B64_term renamable $sgpr6_sgpr799 ; DEAD_INST_DEL-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec100 ; DEAD_INST_DEL-NEXT: S_BRANCH %bb.2101 ; DEAD_INST_DEL-NEXT: {{ $}}102 ; DEAD_INST_DEL-NEXT: bb.1:103 ; DEAD_INST_DEL-NEXT: successors: %bb.3(0x40000000), %bb.5(0x40000000)104 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr4_sgpr5, $sgpr6_sgpr7, $vgpr5_vgpr6_vgpr7_vgpr8:0x0000000000000003, $vgpr6_vgpr7_vgpr8_vgpr9:0x0000000000000003105 ; DEAD_INST_DEL-NEXT: {{ $}}106 ; DEAD_INST_DEL-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec107 ; DEAD_INST_DEL-NEXT: $exec = S_XOR_B64_term $exec, renamable $sgpr2_sgpr3, implicit-def $scc108 ; DEAD_INST_DEL-NEXT: S_CBRANCH_EXECZ %bb.5, implicit $exec109 ; DEAD_INST_DEL-NEXT: S_BRANCH %bb.3110 ; DEAD_INST_DEL-NEXT: {{ $}}111 ; DEAD_INST_DEL-NEXT: bb.2:112 ; DEAD_INST_DEL-NEXT: successors: %bb.1(0x80000000)113 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $sgpr1, $vgpr10, $sgpr4_sgpr5, $sgpr6_sgpr7114 ; DEAD_INST_DEL-NEXT: {{ $}}115 ; DEAD_INST_DEL-NEXT: renamable $sgpr1 = S_OR_B32 killed renamable $sgpr1, 2, implicit-def dead $scc116 ; DEAD_INST_DEL-NEXT: renamable $vgpr0 = COPY killed renamable $sgpr1117 ; DEAD_INST_DEL-NEXT: renamable $vgpr5_vgpr6 = IMPLICIT_DEF118 ; DEAD_INST_DEL-NEXT: renamable $vgpr6_vgpr7_vgpr8_vgpr9 = IMPLICIT_DEF119 ; DEAD_INST_DEL-NEXT: S_BRANCH %bb.1120 ; DEAD_INST_DEL-NEXT: {{ $}}121 ; DEAD_INST_DEL-NEXT: bb.3:122 ; DEAD_INST_DEL-NEXT: successors: %bb.5(0x80000000)123 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr5, $vgpr5_vgpr6_vgpr7_vgpr8:0x0000000000000003, $vgpr6_vgpr7_vgpr8_vgpr9:0x0000000000000003124 ; DEAD_INST_DEL-NEXT: {{ $}}125 ; DEAD_INST_DEL-NEXT: renamable $sgpr1 = V_READFIRSTLANE_B32 killed $vgpr5, implicit $exec126 ; DEAD_INST_DEL-NEXT: renamable $sgpr6 = V_READFIRSTLANE_B32 killed $vgpr6, implicit $exec127 ; DEAD_INST_DEL-NEXT: S_CMP_EQ_U32 killed renamable $sgpr6, killed renamable $sgpr1, implicit-def $scc128 ; DEAD_INST_DEL-NEXT: renamable $sgpr1 = S_CSELECT_B32 1, 0, implicit $scc129 ; DEAD_INST_DEL-NEXT: renamable $vgpr0 = COPY killed renamable $sgpr1130 ; DEAD_INST_DEL-NEXT: S_BRANCH %bb.5131 ; DEAD_INST_DEL-NEXT: {{ $}}132 ; DEAD_INST_DEL-NEXT: bb.4:133 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr4_sgpr5134 ; DEAD_INST_DEL-NEXT: {{ $}}135 ; DEAD_INST_DEL-NEXT: renamable $sgpr4_sgpr5_sgpr6_sgpr7 = S_LOAD_DWORDX4_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (invariant load (<4 x s32>), addrspace 4)136 ; DEAD_INST_DEL-NEXT: renamable $vgpr1 = V_ADD_U32_e64 killed $sgpr0, killed $vgpr10, 0, implicit $exec137 ; DEAD_INST_DEL-NEXT: BUFFER_STORE_DWORD_OFFEN_exact killed renamable $vgpr0, killed renamable $vgpr1, killed renamable $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)138 ; DEAD_INST_DEL-NEXT: S_ENDPGM 0139 ; DEAD_INST_DEL-NEXT: {{ $}}140 ; DEAD_INST_DEL-NEXT: bb.5:141 ; DEAD_INST_DEL-NEXT: successors: %bb.4(0x80000000)142 ; DEAD_INST_DEL-NEXT: liveins: $sgpr0, $vgpr0, $vgpr10, $sgpr2_sgpr3, $sgpr4_sgpr5143 ; DEAD_INST_DEL-NEXT: {{ $}}144 ; DEAD_INST_DEL-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc145 ; DEAD_INST_DEL-NEXT: S_BRANCH %bb.4146 bb.0:147 successors: %bb.2(0x40000000), %bb.1(0x40000000)148 liveins: $sgpr0, $sgpr2_sgpr3, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11, $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr10149 150 %0:sreg_32 = COPY $sgpr0151 %1:vgpr_32 = COPY $vgpr0152 %2:vgpr_32 = COPY $vgpr1153 %3:vgpr_32 = COPY $vgpr2154 %4:vgpr_32 = COPY $vgpr3155 %5:vgpr_32 = COPY $vgpr4156 %6:vgpr_32 = COPY $vgpr10157 %7:sreg_64 = COPY $sgpr2_sgpr3158 %8:sreg_64 = COPY $sgpr4_sgpr5159 %9:sgpr_128 = COPY $sgpr8_sgpr9_sgpr10_sgpr11160 undef %10.sub0_sub1_sub2_sub3:vreg_256 = BUFFER_LOAD_DWORDX4_OFFEN %1, %9, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)161 %10.sub4_sub5_sub6_sub7:vreg_256 = BUFFER_LOAD_DWORDX4_OFFEN %5, %9, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)162 %11:vreg_128 = BUFFER_LOAD_DWORDX4_OFFEN %4, %9, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)163 %12:vreg_128 = BUFFER_LOAD_DWORDX4_OFFEN %3, %9, 0, 0, 0, 0, implicit $exec :: (dereferenceable load (<4 x s32>), align 1, addrspace 8)164 undef %13.sub0:sgpr_256 = V_READFIRSTLANE_B32 %11.sub0, implicit $exec165 %13.sub1:sgpr_256 = V_READFIRSTLANE_B32 %12.sub0, implicit $exec166 S_CMP_EQ_U64 %13.sub0_sub1, %7, implicit-def $scc167 %14:sreg_32 = S_CSELECT_B32 1, 0, implicit killed $scc168 %15:sreg_64_xexec = V_CMP_NE_U32_e64 %2, 0, implicit $exec169 %16:vgpr_32 = IMPLICIT_DEF170 $exec = S_MOV_B64_term %15171 S_CBRANCH_EXECZ %bb.1, implicit $exec172 S_BRANCH %bb.2173 174 bb.1:175 successors: %bb.3(0x40000000), %bb.5(0x40000000)176 177 %17:sreg_64 = S_OR_SAVEEXEC_B64 %15, implicit-def $exec, implicit-def $scc, implicit $exec178 %18:sreg_64_xexec = S_AND_B64 $exec, %17, implicit-def $scc179 $exec = S_XOR_B64_term $exec, %18, implicit-def $scc180 S_CBRANCH_EXECZ %bb.5, implicit $exec181 S_BRANCH %bb.3182 183 bb.2:184 successors: %bb.1(0x80000000)185 186 %19:sreg_32 = S_OR_B32 %14, 2, implicit-def dead $scc187 %16:vgpr_32 = COPY %19188 undef %10.sub0_sub1:vreg_256 = IMPLICIT_DEF189 S_BRANCH %bb.1190 191 bb.3:192 successors: %bb.5(0x80000000)193 194 %20:sreg_32_xm0 = V_READFIRSTLANE_B32 %10.sub0, implicit $exec195 %21:sreg_32_xm0 = V_READFIRSTLANE_B32 %10.sub4, implicit $exec196 S_CMP_EQ_U32 %21, %20, implicit-def $scc197 %22:sreg_32 = S_CSELECT_B32 1, 0, implicit killed $scc198 %16:vgpr_32 = COPY %22199 S_BRANCH %bb.5200 201 bb.4:202 %23:vgpr_32 = V_ADD_U32_e64 %0, %6, 0, implicit $exec203 %24:sgpr_128 = S_LOAD_DWORDX4_IMM %8, 0, 0 :: (invariant load (<4 x s32>), addrspace 4)204 BUFFER_STORE_DWORD_OFFEN_exact %16, %23, %24, 0, 0, 0, 0, implicit $exec :: (dereferenceable store (s32), align 1, addrspace 8)205 S_ENDPGM 0206 207 bb.5:208 successors: %bb.4(0x80000000)209 210 $exec = S_OR_B64 $exec, %18, implicit-def $scc211 S_BRANCH %bb.4212...213