273 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer %s -o - | FileCheck -check-prefix=GFX9 %s3 4# The G_ZEXT and G_SHL will be scalarized, introducing a5# G_UNMERGE_VALUES of G_BUILD_VECTOR. The artifact combiner should6# eliminate the pair.7---8name: revisit_build_vector_unmerge_user9tracksRegLiveness: true10body: |11 bb.0:12 liveins: $vgpr0_vgpr113 14 ; GFX9-LABEL: name: revisit_build_vector_unmerge_user15 ; GFX9: liveins: $vgpr0_vgpr116 ; GFX9-NEXT: {{ $}}17 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr118 ; GFX9-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 219 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)20 ; GFX9-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)21 ; GFX9-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)22 ; GFX9-NEXT: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[ZEXT]], [[C]](s32)23 ; GFX9-NEXT: [[SHL1:%[0-9]+]]:_(s64) = G_SHL [[ZEXT1]], [[C]](s32)24 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[SHL]](s64), [[SHL1]](s64)25 ; GFX9-NEXT: $vgpr0_vgpr1_vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s64>)26 %0:_(<2 x s32>) = COPY $vgpr0_vgpr127 %1:_(s32) = G_CONSTANT i32 228 %2:_(<2 x s32>) = G_BUILD_VECTOR %1, %129 %3:_(<2 x s64>) = G_ZEXT %030 %4:_(<2 x s64>) = G_SHL %3, %231 $vgpr0_vgpr1_vgpr2_vgpr3 = COPY %432...33 34---35name: copy_scalar36body: |37 bb.0:38 liveins: $vgpr0_vgpr1, $vgpr2_vgpr339 40 ; GFX9-LABEL: name: copy_scalar41 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr342 ; GFX9-NEXT: {{ $}}43 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr144 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[COPY]](s64)45 %0:_(s64) = COPY $vgpr0_vgpr146 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(s64)47 %3:_(s64) = G_MERGE_VALUES %1, %248 $vgpr2_vgpr3= COPY %349...50 51---52name: copy_vector_using_elements53body: |54 bb.0:55 liveins: $vgpr0_vgpr1, $vgpr2_vgpr356 57 ; GFX9-LABEL: name: copy_vector_using_elements58 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr359 ; GFX9-NEXT: {{ $}}60 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr161 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[COPY]](<2 x s32>)62 %0:_(<2 x s32>) = COPY $vgpr0_vgpr163 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)64 %3:_(<2 x s32>) = G_BUILD_VECTOR %1, %265 $vgpr2_vgpr3= COPY %366...67 68---69name: copy_vector_using_subvectors70body: |71 bb.0:72 liveins: $vgpr0_vgpr1, $vgpr2_vgpr373 74 ; GFX9-LABEL: name: copy_vector_using_subvectors75 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr376 ; GFX9-NEXT: {{ $}}77 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr178 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[COPY]](<4 x s16>)79 %0:_(<4 x s16>) = COPY $vgpr0_vgpr180 %1:_(<2 x s16>), %2:_(<2 x s16>) = G_UNMERGE_VALUES %0(<4 x s16>)81 %3:_(<4 x s16>) = G_CONCAT_VECTORS %1, %282 $vgpr2_vgpr3= COPY %383...84 85---86name: shuffle_vector_elements87body: |88 bb.0:89 liveins: $vgpr0_vgpr1, $vgpr2_vgpr390 91 ; GFX9-LABEL: name: shuffle_vector_elements92 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr393 ; GFX9-NEXT: {{ $}}94 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr195 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)96 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV1]](s32), [[UV]](s32)97 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s32>)98 %0:_(<2 x s32>) = COPY $vgpr0_vgpr199 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)100 %3:_(<2 x s32>) = G_BUILD_VECTOR %2, %1101 $vgpr2_vgpr3= COPY %3102...103 104---105name: insert_element106body: |107 bb.0:108 liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3_vgpr4109 110 ; GFX9-LABEL: name: insert_element111 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2, $vgpr3_vgpr4112 ; GFX9-NEXT: {{ $}}113 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1114 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr2115 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)116 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[COPY1]](s32)117 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[BUILD_VECTOR]](<2 x s32>)118 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1119 %1:_(s32) = COPY $vgpr2120 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)121 %4:_(<2 x s32>) = G_BUILD_VECTOR %2, %1122 $vgpr2_vgpr3= COPY %4123...124 125---126name: unmerge_to_sub_vectors127body: |128 bb.0:129 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7130 131 ; GFX9-LABEL: name: unmerge_to_sub_vectors132 ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7133 ; GFX9-NEXT: {{ $}}134 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3135 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)136 ; GFX9-NEXT: $vgpr4_vgpr5 = COPY [[UV]](<2 x s32>)137 ; GFX9-NEXT: $vgpr6_vgpr7 = COPY [[UV1]](<2 x s32>)138 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3139 %1:_(s32), %2:_(s32), %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %0(<4 x s32>)140 %5:_(<2 x s32>) = G_BUILD_VECTOR %1, %2141 %6:_(<2 x s32>) = G_BUILD_VECTOR %3, %4142 $vgpr4_vgpr5= COPY %5143 $vgpr6_vgpr7= COPY %6144...145 146---147name: cant_unmerge_to_sub_vectors148body: |149 bb.0:150 liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7151 152 ; GFX9-LABEL: name: cant_unmerge_to_sub_vectors153 ; GFX9: liveins: $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr4_vgpr5, $vgpr6_vgpr7154 ; GFX9-NEXT: {{ $}}155 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3156 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)157 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV3]](s32)158 ; GFX9-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[UV1]](s32), [[UV2]](s32)159 ; GFX9-NEXT: $vgpr4_vgpr5 = COPY [[BUILD_VECTOR]](<2 x s32>)160 ; GFX9-NEXT: $vgpr6_vgpr7 = COPY [[BUILD_VECTOR1]](<2 x s32>)161 %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3162 %1:_(s32), %2:_(s32), %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %0(<4 x s32>)163 %5:_(<2 x s32>) = G_BUILD_VECTOR %1, %4164 %6:_(<2 x s32>) = G_BUILD_VECTOR %2, %3165 $vgpr4_vgpr5= COPY %5166 $vgpr6_vgpr7= COPY %6167...168 169---170name: concat171body: |172 bb.0:173 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7174 175 ; GFX9-LABEL: name: concat176 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7177 ; GFX9-NEXT: {{ $}}178 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1179 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3180 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[COPY1]](<2 x s32>)181 ; GFX9-NEXT: $vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[CONCAT_VECTORS]](<4 x s32>)182 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1183 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3184 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)185 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)186 %6:_(<4 x s32>) = G_BUILD_VECTOR %2, %3, %4, %5187 $vgpr4_vgpr5_vgpr6_vgpr7= COPY %6188...189 190---191name: concat_same_vector192body: |193 bb.0:194 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5195 196 ; GFX9-LABEL: name: concat_same_vector197 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5198 ; GFX9-NEXT: {{ $}}199 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1200 ; GFX9-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s32>) = G_CONCAT_VECTORS [[COPY]](<2 x s32>), [[COPY]](<2 x s32>)201 ; GFX9-NEXT: $vgpr2_vgpr3_vgpr4_vgpr5 = COPY [[CONCAT_VECTORS]](<4 x s32>)202 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1203 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)204 %3:_(<4 x s32>) = G_BUILD_VECTOR %1, %2, %1, %2205 $vgpr2_vgpr3_vgpr4_vgpr5= COPY %3206...207 208---209name: shuffle_not_concat210body: |211 bb.0:212 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7213 214 ; GFX9-LABEL: name: shuffle_not_concat215 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5_vgpr6_vgpr7216 ; GFX9-NEXT: {{ $}}217 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1218 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3219 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)220 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)221 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[UV2]](s32), [[UV]](s32), [[UV1]](s32), [[UV3]](s32)222 ; GFX9-NEXT: $vgpr4_vgpr5_vgpr6_vgpr7 = COPY [[BUILD_VECTOR]](<4 x s32>)223 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1224 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3225 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)226 %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)227 %6:_(<4 x s32>) = G_BUILD_VECTOR %4, %2, %3, %5228 $vgpr4_vgpr5_vgpr6_vgpr7= COPY %6229...230 231---232name: not_a_concat233body: |234 bb.0:235 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8_vgpr9236 237 ; GFX9-LABEL: name: not_a_concat238 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4, $vgpr5_vgpr6_vgpr7_vgpr8_vgpr9239 ; GFX9-NEXT: {{ $}}240 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1241 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3242 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr4243 ; GFX9-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)244 ; GFX9-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)245 ; GFX9-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<5 x s32>) = G_BUILD_VECTOR [[UV]](s32), [[UV1]](s32), [[UV2]](s32), [[UV3]](s32), [[COPY2]](s32)246 ; GFX9-NEXT: $vgpr5_vgpr6_vgpr7_vgpr8_vgpr9 = COPY [[BUILD_VECTOR]](<5 x s32>)247 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1248 %1:_(<2 x s32>) = COPY $vgpr2_vgpr3249 %2:_(s32) = COPY $vgpr4250 %3:_(s32), %4:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)251 %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)252 %7:_(<5 x s32>) = G_BUILD_VECTOR %3, %4, %5, %6, %2253 $vgpr5_vgpr6_vgpr7_vgpr8_vgpr9= COPY %7254...255 256---257name: value_finder_look_through_copy258body: |259 bb.0:260 liveins: $vgpr0_vgpr1, $vgpr2_vgpr3261 262 ; GFX9-LABEL: name: value_finder_look_through_copy263 ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3264 ; GFX9-NEXT: {{ $}}265 ; GFX9-NEXT: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1266 ; GFX9-NEXT: $vgpr2_vgpr3 = COPY [[COPY]](<2 x s32>)267 %0:_(<2 x s32>) = COPY $vgpr0_vgpr1268 %1:_(s32), %2:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)269 %3:_(s32) = COPY %1270 %4:_(<2 x s32>) = G_BUILD_VECTOR %3, %2271 $vgpr2_vgpr3= COPY %4272...273