231 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -run-pass peephole-opt -verify-machineinstrs -o - %s | FileCheck -check-prefix=GCN %s3 4# Check that when we jump through several subregisters in sequence of5# reg_sequence we can still find a plain src for a copy.6# In this specific test, we want %4 to read directly from %1 and7# %5 from %0. These values come from the respective chains:8# %4 -> %3.sub0 -> %2.sub1 -> %19# %5 -> %3.sub1 -> %2.sub0 -> %010#11# We used to not simplify this because we were bailing when two12# subreg indices were in the same chain (%3.subX and %2.subY)13---14name: reg_sequence_removal15body: |16 bb.0:17 liveins: $vgpr0, $vgpr118 19 ; GCN-LABEL: name: reg_sequence_removal20 ; GCN: liveins: $vgpr0, $vgpr121 ; GCN-NEXT: {{ $}}22 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr023 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr124 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub125 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY1]], %subreg.sub0, [[COPY]], %subreg.sub126 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY1]]27 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[COPY]]28 ; GCN-NEXT: KILL [[COPY3]], implicit [[COPY2]]29 %0:vgpr_32 = COPY $vgpr030 %1:vgpr_32 = COPY $vgpr131 %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub132 %3:vreg_64 = REG_SEQUENCE %2.sub1, %subreg.sub0, %2.sub0, %subreg.sub133 %4:vgpr_32 = COPY %3.sub034 %5:vgpr_32 = COPY %3.sub135 KILL implicit %4, %536...37 38---39name: reg_sequence_removal_240body: |41 bb.0:42 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr743 44 ; GCN-LABEL: name: reg_sequence_removal_245 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr746 ; GCN-NEXT: {{ $}}47 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr348 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr4_vgpr5_vgpr6_vgpr749 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]].sub0_sub1, %subreg.sub2_sub3, [[COPY1]].sub2_sub3, %subreg.sub0_sub150 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[REG_SEQUENCE]].sub1_sub2_sub3, %subreg.sub0_sub1_sub2, [[COPY1]].sub0, %subreg.sub351 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[REG_SEQUENCE]].sub1, %subreg.sub0, [[REG_SEQUENCE]].sub2, %subreg.sub1, [[REG_SEQUENCE]].sub3, %subreg.sub2, [[COPY1]].sub0, %subreg.sub352 ; GCN-NEXT: KILL implicit [[REG_SEQUENCE2]]53 %0:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr354 %1:vreg_128 = COPY $vgpr4_vgpr5_vgpr6_vgpr755 %2:vreg_128 = REG_SEQUENCE %0.sub0_sub1, %subreg.sub2_sub3, %1.sub2_sub3, %subreg.sub0_sub156 %3:vreg_128 = REG_SEQUENCE %2.sub1_sub2_sub3, %subreg.sub0_sub1_sub2, %1.sub0, %subreg.sub357 %4:vreg_128 = REG_SEQUENCE %3.sub0, %subreg.sub0, %3.sub1, %subreg.sub1, %3.sub2, %subreg.sub2, %3.sub3, %subreg.sub358 KILL implicit %459...60 61---62name: reg_sequence_removal_363body: |64 bb.0:65 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr766 67 ; GCN-LABEL: name: reg_sequence_removal_368 ; GCN: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr769 ; GCN-NEXT: {{ $}}70 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr371 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vreg_128 = COPY $vgpr4_vgpr5_vgpr6_vgpr772 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]].sub0_sub1, %subreg.sub2_sub3, [[COPY1]].sub2_sub3, %subreg.sub0_sub173 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY1]].sub2_sub3, %subreg.sub2_sub3, [[COPY]].sub0, %subreg.sub1, [[COPY]].sub1, %subreg.sub074 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[COPY]].sub1, %subreg.sub0, [[COPY]].sub0, %subreg.sub1, [[COPY1]].sub2, %subreg.sub2, [[COPY1]].sub3, %subreg.sub375 ; GCN-NEXT: KILL implicit [[REG_SEQUENCE2]]76 %0:vreg_128 = COPY $vgpr0_vgpr1_vgpr2_vgpr377 %1:vreg_128 = COPY $vgpr4_vgpr5_vgpr6_vgpr778 %2:vreg_128 = REG_SEQUENCE %0.sub0_sub1, %subreg.sub2_sub3, %1.sub2_sub3, %subreg.sub0_sub179 %3:vreg_128 = REG_SEQUENCE %2.sub0_sub1, %subreg.sub2_sub3, %2.sub2, %subreg.sub1, %2.sub3, %subreg.sub080 %4:vreg_128 = REG_SEQUENCE %3.sub0, %subreg.sub0, %3.sub1, %subreg.sub1, %3.sub2, %subreg.sub2, %3.sub3, %subreg.sub381 KILL implicit %482...83 84---85name: copy_vreg_64_subreg_from_vgpr_reg_sequence86body: |87 bb.0:88 liveins: $vgpr0, $vgpr189 ; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence90 ; GCN: liveins: $vgpr0, $vgpr191 ; GCN-NEXT: {{ $}}92 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr093 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr194 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub195 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]]96 ; GCN-NEXT: $vgpr0 = COPY [[COPY2]]97 %0:vgpr_32 = COPY $vgpr098 %1:vgpr_32 = COPY $vgpr199 %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1100 %3:vgpr_32 = COPY %2.sub0101 $vgpr0 = COPY %3102...103 104---105name: copy_vreg_64_subreg_from_vgpr_reg_sequence_extra_copy106body: |107 bb.0:108 liveins: $vgpr0, $vgpr1109 ; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_extra_copy110 ; GCN: liveins: $vgpr0, $vgpr1111 ; GCN-NEXT: {{ $}}112 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0113 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1114 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1115 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]116 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0117 ; GCN-NEXT: $vgpr0 = COPY [[COPY3]]118 %0:vgpr_32 = COPY $vgpr0119 %1:vgpr_32 = COPY $vgpr1120 %2:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1121 %3:vreg_64 = COPY %2122 %4:vgpr_32 = COPY %3.sub0123 $vgpr0 = COPY %4124...125 126---127name: copy_av_64_subreg_from_vgpr_reg_sequence128body: |129 bb.0:130 liveins: $vgpr0, $vgpr1131 ; GCN-LABEL: name: copy_av_64_subreg_from_vgpr_reg_sequence132 ; GCN: liveins: $vgpr0, $vgpr1133 ; GCN-NEXT: {{ $}}134 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0135 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1136 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64_align2 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1137 ; GCN-NEXT: [[COPY2:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]]138 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0139 ; GCN-NEXT: $vgpr0 = COPY [[COPY3]]140 %0:vgpr_32 = COPY $vgpr0141 %1:vgpr_32 = COPY $vgpr1142 %2:vreg_64_align2 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1143 %3:av_64_align2 = COPY %2144 %4:vgpr_32 = COPY %3.sub0145 $vgpr0 = COPY %4146...147 148---149name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub0_compose150body: |151 bb.0:152 liveins: $vgpr0_vgpr1153 ; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub0_compose154 ; GCN: liveins: $vgpr0_vgpr1155 ; GCN-NEXT: {{ $}}156 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1157 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1158 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]].sub0, %subreg.sub0, [[COPY1]], %subreg.sub1159 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub0160 ; GCN-NEXT: $vgpr0 = COPY [[COPY2]]161 %0:vreg_64 = COPY $vgpr0_vgpr1162 %1:vgpr_32 = COPY $vgpr1163 %2:vreg_64 = REG_SEQUENCE %0.sub0, %subreg.sub0, %1, %subreg.sub1164 %3:vgpr_32 = COPY %2.sub0165 $vgpr0 = COPY %3166...167 168---169name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub1_compose170body: |171 bb.0:172 liveins: $vgpr0_vgpr1173 ; GCN-LABEL: name: copy_vreg_64_subreg_from_vgpr_reg_sequence_with_sub1_compose174 ; GCN: liveins: $vgpr0_vgpr1175 ; GCN-NEXT: {{ $}}176 ; GCN-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1177 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1178 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]].sub1, %subreg.sub0, [[COPY1]], %subreg.sub1179 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY [[COPY]].sub1180 ; GCN-NEXT: $vgpr0 = COPY [[COPY2]]181 %0:vreg_64 = COPY $vgpr0_vgpr1182 %1:vgpr_32 = COPY $vgpr1183 %2:vreg_64 = REG_SEQUENCE %0.sub1, %subreg.sub0, %1, %subreg.sub1184 %3:vgpr_32 = COPY %2.sub0185 $vgpr0 = COPY %3186...187 188---189name: copy_vreg_64_subreg_from_multiple_vgpr_reg_sequence190body: |191 bb.0:192 liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3193 ; GCN-LABEL: name: copy_vreg_64_subreg_from_multiple_vgpr_reg_sequence194 ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3195 ; GCN-NEXT: {{ $}}196 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0197 ; GCN-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1198 ; GCN-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2199 ; GCN-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY $vgpr3200 ; GCN-NEXT: [[REG_SEQUENCE:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY]], %subreg.sub0, [[COPY1]], %subreg.sub1201 ; GCN-NEXT: [[REG_SEQUENCE1:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[COPY2]], %subreg.sub0, [[COPY3]], %subreg.sub1202 ; GCN-NEXT: [[REG_SEQUENCE2:%[0-9]+]]:vreg_128 = REG_SEQUENCE [[REG_SEQUENCE]], %subreg.sub0_sub1, [[REG_SEQUENCE1]], %subreg.sub2_sub3203 ; GCN-NEXT: [[COPY4:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]204 ; GCN-NEXT: [[COPY5:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE2]].sub1_sub2205 ; GCN-NEXT: [[COPY6:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE1]]206 ; GCN-NEXT: [[COPY7:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE1]].sub0207 ; GCN-NEXT: [[COPY8:%[0-9]+]]:vgpr_32 = COPY [[REG_SEQUENCE]].sub0208 ; GCN-NEXT: $vgpr0_vgpr1 = COPY [[COPY4]]209 ; GCN-NEXT: $vgpr2_vgpr3 = COPY [[COPY5]]210 ; GCN-NEXT: $vgpr4_vgpr5 = COPY [[COPY6]]211 ; GCN-NEXT: $vgpr6 = COPY [[COPY7]]212 ; GCN-NEXT: $vgpr6 = COPY [[COPY8]]213 %0:vgpr_32 = COPY $vgpr0214 %1:vgpr_32 = COPY $vgpr1215 %2:vgpr_32 = COPY $vgpr2216 %3:vgpr_32 = COPY $vgpr3217 %4:vreg_64 = REG_SEQUENCE %0, %subreg.sub0, %1, %subreg.sub1218 %5:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %3, %subreg.sub1219 %6:vreg_128 = REG_SEQUENCE %4, %subreg.sub0_sub1, %5, %subreg.sub2_sub3220 %7:vreg_64 = COPY %6.sub0_sub1221 %8:vreg_64 = COPY %6.sub1_sub2222 %9:vreg_64 = COPY %6.sub2_sub3223 %10:vgpr_32 = COPY %6.sub2224 %11:vgpr_32 = COPY %6.sub0225 $vgpr0_vgpr1 = COPY %7226 $vgpr2_vgpr3 = COPY %8227 $vgpr4_vgpr5 = COPY %9228 $vgpr6 = COPY %10229 $vgpr6 = COPY %11230...231