brintos

brintos / llvm-project-archived public Read only

0
0
Text · 84.6 KiB · 8300b2b Raw
1614 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -o - %s  | FileCheck %s3 4---5name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s326body:             |7  bb.0:8    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s329    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr110    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr111    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)12    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)13    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]14    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]15    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)16    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)17    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 118    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 119    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)20    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)21    %0:_(<2 x s32>) = COPY $vgpr0_vgpr122    %1:_(<2 x s32>) = COPY $vgpr0_vgpr123    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)24    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)25    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %426    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %527    %8:_(s32) = G_ANYEXT %6(s1)28    %9:_(s32) = G_ANYEXT %7(s1)29    %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %930    %11:_(<2 x s1>) = G_TRUNC %10(<2 x s32>)31    %12:_(s1), %13:_(s1) = G_UNMERGE_VALUES %1132    %14:_(s32) = G_SEXT %1233    %15:_(s32) = G_SEXT %1334    %16:_(<2 x s32>) = G_BUILD_VECTOR %14, %1535    $vgpr0_vgpr1 = COPY %1636 37...38 39# Requires looking thorugh extra copies between the build_vector,40# trunc and unmerge.41---42name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies43body:             |44  bb.0:45    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies46    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr147    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr148    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)49    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)50    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]51    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]52    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)53    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)54    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT]], 155    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ANYEXT1]], 156    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)57    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)58    %0:_(<2 x s32>) = COPY $vgpr0_vgpr159    %1:_(<2 x s32>) = COPY $vgpr0_vgpr160    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)61    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)62    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %463    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %564    %8:_(s32) = G_ANYEXT %6(s1)65    %9:_(s32) = G_ANYEXT %7(s1)66    %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %967    %11:_(<2 x s32>) = COPY %1068    %12:_(<2 x s1>) = G_TRUNC %11(<2 x s32>)69    %13:_(<2 x s1>) = COPY %1270    %14:_(s1), %15:_(s1) = G_UNMERGE_VALUES %1371    %16:_(s32) = G_SEXT %1472    %17:_(s32) = G_SEXT %1573    %18:_(<2 x s32>) = G_BUILD_VECTOR %16, %1774    $vgpr0_vgpr1 = COPY %1875 76...77 78---79name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s1680body:             |81  bb.0:82    ; CHECK-LABEL: name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s1683    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr184    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr185    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)86    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)87    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]88    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]89    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)90    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)91    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)92    ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)93    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1694    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)95    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]]96    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)97    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[BITCAST]](<2 x s16>)98    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)99    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[BITCAST1]], 16100    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[LSHR]], 16101    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)102    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)103    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1104    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1105    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)106    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)107    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4108    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5109    %8:_(s16) = G_ANYEXT %6110    %9:_(s16) = G_ANYEXT %7111    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9112    %11:_(<2 x s32>) = G_SEXT %10113    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11114    %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13115    $vgpr0_vgpr1 = COPY %14116 117...118 119---120name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16121body:             |122  bb.0:123    ; CHECK-LABEL: name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16124    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1125    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1126    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)127    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)128    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]129    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]130    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)131    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)132    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)133    ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)134    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16135    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)136    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]]137    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)138    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[BITCAST]](<2 x s16>)139    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)140    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535141    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]142    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[AND]](s32), [[LSHR]](s32)143    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)144    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1145    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1146    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)147    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)148    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4149    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5150    %8:_(s16) = G_ANYEXT %6(s1)151    %9:_(s16) = G_ANYEXT %7(s1)152    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9153    %11:_(<2 x s32>) = G_ZEXT %10154    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11155    %14:_(<2 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32)156    $vgpr0_vgpr1 = COPY %14(<2 x s32>)157 158...159 160---161name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16162body:             |163  bb.0:164    ; CHECK-LABEL: name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16165    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1166    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1167    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)168    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)169    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]170    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]171    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)172    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)173    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)174    ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)175    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16176    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[ZEXT1]], [[C]](s32)177    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[ZEXT]], [[SHL]]178    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)179    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[BITCAST]](<2 x s16>)180    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)181    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[BITCAST1]](s32), [[LSHR]](s32)182    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)183    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1184    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1185    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)186    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)187    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4188    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5189    %8:_(s16) = G_ANYEXT %6(s1)190    %9:_(s16) = G_ANYEXT %7(s1)191    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9192    %11:_(<2 x s32>) = G_ANYEXT %10193    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11194    %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13195    $vgpr0_vgpr1 = COPY %14196 197...198 199---200name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16201 202body:             |203  bb.0:204    ; CHECK-LABEL: name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16205    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1206    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1207    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)208    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)209    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]210    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]211    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)212    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)213    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)214    ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)215    ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)216    ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)217    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ZEXT]](s32), [[ZEXT1]](s32)218    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ZEXT2]](s32), [[ZEXT3]](s32)219    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<2 x s32>), implicit [[BUILD_VECTOR1]](<2 x s32>)220    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1221    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1222    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)223    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)224    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4225    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5226    %8:_(s16) = G_ANYEXT %6227    %9:_(s16) = G_ANYEXT %7228    %10:_(<4 x s16>) = G_BUILD_VECTOR %8, %9, %8, %9229    %11:_(<4 x s32>) = G_ZEXT %10230    %12:_(<2 x s32>), %13:_(<2 x s32>) = G_UNMERGE_VALUES %11231    S_ENDPGM 0, implicit %12, implicit %13232 233...234 235---236name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32237body:             |238  bb.0:239    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32240    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1241    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3242    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)243    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)244    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[UV]], 1245    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[UV1]], 1246    ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[UV2]], 1247    ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[UV3]], 1248    ; CHECK-NEXT: $vgpr0 = COPY [[SEXT_INREG]](s32)249    ; CHECK-NEXT: $vgpr1 = COPY [[SEXT_INREG1]](s32)250    ; CHECK-NEXT: $vgpr2 = COPY [[SEXT_INREG2]](s32)251    ; CHECK-NEXT: $vgpr3 = COPY [[SEXT_INREG3]](s32)252    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1253    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3254    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1255    %3:_(<4 x s1>) = G_TRUNC %2256    %4:_(s1), %5:_(s1), %6:_(s1), %7:_(s1) = G_UNMERGE_VALUES %3257    %8:_(s32) = G_SEXT %4258    %9:_(s32) = G_SEXT %5259    %10:_(s32) = G_SEXT %6260    %11:_(s32) = G_SEXT %7261    $vgpr0 = COPY %8262    $vgpr1 = COPY %9263    $vgpr2 = COPY %10264    $vgpr3 = COPY %11265...266 267---268name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16269body:             |270  bb.0:271    ; CHECK-LABEL: name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16272    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0273    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1274    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)275    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)276    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16277    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)278    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)279    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)280    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)281    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)282    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)283    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)284    %0:_(<2 x s16>) = COPY $vgpr0285    %1:_(<2 x s16>) = COPY $vgpr1286    %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1287    %3:_(s16), %4:_(s16), %5:_(s16), %6:_(s16) = G_UNMERGE_VALUES %2288    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6289...290 291---292name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32293body:             |294  bb.0:295    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32296    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1297    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr1_vgpr2298    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)299    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)300    ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32)301    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1302    %1:_(<2 x s32>) = COPY $vgpr1_vgpr2303    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1304    %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %2305    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6306...307 308---309name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64310body:             |311  bb.0:312    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64313    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3314    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7315    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)316    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)317    ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32), implicit [[UV4]](s32), implicit [[UV5]](s32), implicit [[UV6]](s32), implicit [[UV7]](s32)318    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3319    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7320    %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1321    %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %2322    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10323...324 325---326name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64327body:             |328  bb.0:329    ; CHECK-LABEL: name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64330    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3331    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7332    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)333    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)334    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)335    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)336    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)337    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)338    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32)339    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3340    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7341    %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1342    %3:_(<4 x s32>) = G_TRUNC %2343    %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %3344    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7345...346 347---348name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32349body:             |350  bb.0:351    ; CHECK-LABEL: name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32352    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1353    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3354    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)355    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)356    ; CHECK-NEXT: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32)357    ; CHECK-NEXT: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32)358    ; CHECK-NEXT: [[SEXT2:%[0-9]+]]:_(s64) = G_SEXT [[UV2]](s32)359    ; CHECK-NEXT: [[SEXT3:%[0-9]+]]:_(s64) = G_SEXT [[UV3]](s32)360    ; CHECK-NEXT: S_ENDPGM 0, implicit [[SEXT]](s64), implicit [[SEXT1]](s64), implicit [[SEXT2]](s64), implicit [[SEXT3]](s64)361    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1362    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3363    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1364    %3:_(<4 x s64>) = G_SEXT %2365    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3366    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7367...368 369---370name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32371body:             |372  bb.0:373    ; CHECK-LABEL: name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32374    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1375    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3376    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)377    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)378    ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)379    ; CHECK-NEXT: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)380    ; CHECK-NEXT: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)381    ; CHECK-NEXT: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)382    ; CHECK-NEXT: S_ENDPGM 0, implicit [[ZEXT]](s64), implicit [[ZEXT1]](s64), implicit [[ZEXT2]](s64), implicit [[ZEXT3]](s64)383    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1384    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3385    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1386    %3:_(<4 x s64>) = G_ZEXT %2387    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3388    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7389...390 391---392name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32393body:             |394  bb.0:395    ; CHECK-LABEL: name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32396    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1397    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3398    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)399    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)400    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32)401    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[UV1]](s32)402    ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[UV2]](s32)403    ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[UV3]](s32)404    ; CHECK-NEXT: S_ENDPGM 0, implicit [[ANYEXT]](s64), implicit [[ANYEXT1]](s64), implicit [[ANYEXT2]](s64), implicit [[ANYEXT3]](s64)405    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1406    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3407    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1408    %3:_(<4 x s64>) = G_ANYEXT %2409    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3410    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7411...412 413---414name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32415body:             |416  bb.0:417    ; CHECK-LABEL: name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32418    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1419    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3420    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>)421    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>)422    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)423    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32)424    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8425    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)426    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32)427    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16428    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)429    ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32)430    ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24431    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C2]](s32)432    ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR2]](s32)433    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)434    ; CHECK-NEXT: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32)435    ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)436    ; CHECK-NEXT: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR3]](s32)437    ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)438    ; CHECK-NEXT: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR4]](s32)439    ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C2]](s32)440    ; CHECK-NEXT: [[TRUNC9:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR5]](s32)441    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8), implicit [[TRUNC4]](s8), implicit [[TRUNC5]](s8), implicit [[TRUNC6]](s8), implicit [[TRUNC7]](s8), implicit [[TRUNC8]](s8), implicit [[TRUNC9]](s8)442    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1443    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3444    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1445    %3:_(<4 x s16>) = G_TRUNC %2446    %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8), %9:_(s8), %10:_(s8), %11:_(s8) = G_UNMERGE_VALUES %3447    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11448...449 450---451name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32452body:             |453  bb.0:454    ; CHECK-LABEL: name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32455    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1456    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)457    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32)458    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)459    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)460    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16461    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32)462    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)463    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)464    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV3]], [[C]](s32)465    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)466    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)467    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1468    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3469    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1470    %3:_(<4 x s64>) = G_ANYEXT %2471    %4:_(s16), %5:_(s16), %6:_(s16), %7:_(s16), %8:_(s16), %9:_(s16), %10:_(s16), %11:_(s16), %12:_(s16), %13:_(s16), %14:_(s16), %15:_(s16), %16:_(s16), %17:_(s16), %18:_(s16), %19:_(s16) = G_UNMERGE_VALUES %3472    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7473...474 475# FIXME: Handle this476---477name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32478body:             |479  bb.0:480    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32481    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1482    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3483    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5484    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7485    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>)486    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>)487    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY2]](<2 x s32>)488    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY3]](<2 x s32>)489    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)490    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)491    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC2]](<2 x s16>)492    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC3]](<2 x s16>)493    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32), implicit [[BITCAST2]](s32), implicit [[BITCAST3]](s32)494    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1495    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3496    %2:_(<2 x s32>) = COPY $vgpr4_vgpr5497    %3:_(<2 x s32>) = COPY $vgpr6_vgpr7498    %4:_(<8 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3499    %5:_(<8 x s16>) = G_TRUNC %4500    %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32) = G_UNMERGE_VALUES %5501    S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9502...503 504---505name: test_unmerge_values_s64_of_build_vector_v4s32506body:             |507  bb.0:508    ; CHECK-LABEL: name: test_unmerge_values_s64_of_build_vector_v4s32509    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0510    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1511    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2512    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3513    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)514    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY2]](s32), [[COPY3]](s32)515    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR]](<2 x s32>)516    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR1]](<2 x s32>)517    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)518    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)519    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32)520    %0:_(s32) = COPY $vgpr0521    %1:_(s32) = COPY $vgpr1522    %2:_(s32) = COPY $vgpr2523    %3:_(s32) = COPY $vgpr3524    %4:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %2, %3525    %5:_(<4 x s16>) = G_TRUNC %4526    %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %5527    S_ENDPGM 0, implicit %6, implicit %7528...529 530# To properly simplify that one, we would need to insert bitcast531# after the G_ZEXT.532# i.e.,533# s64 = zext <2 x s16> <-- invalid534# vs.535# <2 x s32> = zext <2 x s16>536# s64 = bitcast <2 x s32> <-- we are missing the code to do that537---538name: test_unmerge_values_s128_of_zext_of_concat_vectors539body:             |540  bb.0:541    ; CHECK-LABEL: name: test_unmerge_values_s128_of_zext_of_concat_vectors542    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0543    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1544    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)545    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16546    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)547    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)548    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)549    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535550    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[BITCAST]], [[C1]]551    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[BITCAST1]], [[C1]]552    ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[LSHR]](s32)553    ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND1]](s32), [[LSHR1]](s32)554    ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s64), implicit [[MV1]](s64)555    %0:_(<2 x s16>) = COPY $vgpr0556    %1:_(<2 x s16>) = COPY $vgpr1557    %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1558    %3:_(<4 x s32>) = G_ZEXT %2559    %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3560    S_ENDPGM 0, implicit %4, implicit %5561...562 563---564 565name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32566body:             |567  bb.0:568    ; CHECK-LABEL: name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32569    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3570    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7571    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11572    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>), [[COPY2]](<4 x s32>)573    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<3 x s32>), [[UV1:%[0-9]+]]:_(<3 x s32>), [[UV2:%[0-9]+]]:_(<3 x s32>), [[UV3:%[0-9]+]]:_(<3 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s32>)574    ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](<3 x s32>), implicit [[UV1]](<3 x s32>), implicit [[UV2]](<3 x s32>), implicit [[UV3]](<3 x s32>)575    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3576    %1:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7577    %2:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11578    %3:_(<12 x s32>) = G_CONCAT_VECTORS %0, %1, %2579    %4:_(<3 x s32>), %5:_(<3 x s32>), %6:_(<3 x s32>), %7:_(<3 x s32>) = G_UNMERGE_VALUES %3580    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7581...582 583---584name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16585body:             |586  bb.0:587    ; CHECK-LABEL: name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16588    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1589    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3590    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr4_vgpr5591    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)592    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)593    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16594    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)595    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)596    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST]](s32), [[LSHR]](s32), [[BITCAST1]](s32)597    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)598    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>)599    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)600    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)601    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)602    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)603    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR1]](s32), [[BITCAST3]](s32), [[LSHR2]](s32)604    ; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)605    ; CHECK-NEXT: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>)606    ; CHECK-NEXT: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C]](s32)607    ; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<2 x s16>), [[UV9:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)608    ; CHECK-NEXT: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV8]](<2 x s16>)609    ; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[BITCAST4]](s32), [[LSHR3]](s32), [[BITCAST5]](s32)610    ; CHECK-NEXT: [[UV10:%[0-9]+]]:_(<2 x s16>), [[UV11:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)611    ; CHECK-NEXT: [[BITCAST6:%[0-9]+]]:_(s32) = G_BITCAST [[UV10]](<2 x s16>)612    ; CHECK-NEXT: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST6]], [[C]](s32)613    ; CHECK-NEXT: [[BITCAST7:%[0-9]+]]:_(s32) = G_BITCAST [[UV11]](<2 x s16>)614    ; CHECK-NEXT: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST7]], [[C]](s32)615    ; CHECK-NEXT: [[BUILD_VECTOR3:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR4]](s32), [[BITCAST7]](s32), [[LSHR5]](s32)616    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<3 x s32>), implicit [[BUILD_VECTOR1]](<3 x s32>), implicit [[BUILD_VECTOR2]](<3 x s32>), implicit [[BUILD_VECTOR3]](<3 x s32>)617    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1618    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3619    %2:_(<4 x s16>) = COPY $vgpr4_vgpr5620    %3:_(<12 x s16>) = G_CONCAT_VECTORS %0, %1, %2621    %4:_(<3 x s16>), %5:_(<3 x s16>), %6:_(<3 x s16>), %7:_(<3 x s16>) = G_UNMERGE_VALUES %3622    %8:_(<3 x s32>) = G_ANYEXT %4623    %9:_(<3 x s32>) = G_ANYEXT %5624    %10:_(<3 x s32>) = G_ANYEXT %6625    %11:_(<3 x s32>) = G_ANYEXT %7626    S_ENDPGM 0, implicit %8, implicit %9, implicit %10, implicit %11627...628 629---630name:            unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8631tracksRegLiveness: true632body:             |633  bb.1:634    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3635 636    ; CHECK-LABEL: name: unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8637    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3638    ; CHECK-NEXT: {{  $}}639    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0640    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1641    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2642    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3643    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8644    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8645    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535646    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG]], [[C]]647    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG1]], [[C]]648    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16649    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)650    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]651    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)652    ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 8653    ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 8654    ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG2]], [[C]]655    ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG3]], [[C]]656    ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)657    ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]658    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)659    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>)660    %0:_(s32) = COPY $vgpr0661    %1:_(s32) = COPY $vgpr1662    %2:_(s32) = COPY $vgpr2663    %3:_(s32) = COPY $vgpr3664    %4:_(s8) = G_TRUNC %0665    %5:_(s8) = G_TRUNC %1666    %6:_(s8) = G_TRUNC %2667    %7:_(s8) = G_TRUNC %3668    %8:_(<2 x s8>) = G_BUILD_VECTOR %4, %5669    %9:_(<2 x s8>) = G_BUILD_VECTOR %6, %7670    %10:_(<4 x s8>) = G_CONCAT_VECTORS %8, %9671    %11:_(<4 x s16>) = G_SEXT %10672    %12:_(<2 x s16>), %13:_(<2 x s16>) = G_UNMERGE_VALUES %11673    S_ENDPGM 0, implicit %12, implicit %13674...675 676---677name:            unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8678tracksRegLiveness: true679body:             |680  bb.1:681    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7682 683    ; CHECK-LABEL: name: unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8684    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7685    ; CHECK-NEXT: {{  $}}686    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0687    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1688    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2689    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3690    ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4691    ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5692    ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6693    ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7694    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8695    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8696    ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 8697    ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 8698    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535699    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG]], [[C]]700    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG1]], [[C]]701    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16702    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)703    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]704    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)705    ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG2]], [[C]]706    ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG3]], [[C]]707    ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)708    ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]709    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)710    ; CHECK-NEXT: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 8711    ; CHECK-NEXT: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 8712    ; CHECK-NEXT: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 8713    ; CHECK-NEXT: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 8714    ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG4]], [[C]]715    ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG5]], [[C]]716    ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32)717    ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]718    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)719    ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG6]], [[C]]720    ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG7]], [[C]]721    ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32)722    ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]723    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32)724    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>)725    %0:_(s32) = COPY $vgpr0726    %1:_(s32) = COPY $vgpr1727    %2:_(s32) = COPY $vgpr2728    %3:_(s32) = COPY $vgpr3729    %4:_(s32) = COPY $vgpr4730    %5:_(s32) = COPY $vgpr5731    %6:_(s32) = COPY $vgpr6732    %7:_(s32) = COPY $vgpr7733    %8:_(s8) = G_TRUNC %0734    %9:_(s8) = G_TRUNC %1735    %10:_(s8) = G_TRUNC %2736    %11:_(s8) = G_TRUNC %3737    %12:_(s8) = G_TRUNC %4738    %13:_(s8) = G_TRUNC %5739    %14:_(s8) = G_TRUNC %6740    %15:_(s8) = G_TRUNC %7741    %16:_(<4 x s8>) = G_BUILD_VECTOR %8, %9, %10, %11742    %17:_(<4 x s8>) = G_BUILD_VECTOR %12, %13, %14, %15743    %18:_(<8 x s8>) = G_CONCAT_VECTORS %16, %17744    %19:_(<8 x s16>) = G_SEXT %18745    %20:_(<2 x s16>), %21:_(<2 x s16>), %22:_(<2 x s16>), %23:_(<2 x s16>) = G_UNMERGE_VALUES %19746    S_ENDPGM 0, implicit %20, implicit %21, implicit %22, implicit %23747...748 749---750name:            unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8751tracksRegLiveness: true752body:             |753  bb.1:754    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15755 756    ; CHECK-LABEL: name: unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8757    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15758    ; CHECK-NEXT: {{  $}}759    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0760    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1761    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2762    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3763    ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4764    ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5765    ; CHECK-NEXT: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6766    ; CHECK-NEXT: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7767    ; CHECK-NEXT: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8768    ; CHECK-NEXT: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9769    ; CHECK-NEXT: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10770    ; CHECK-NEXT: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11771    ; CHECK-NEXT: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12772    ; CHECK-NEXT: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13773    ; CHECK-NEXT: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14774    ; CHECK-NEXT: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15775    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY]], 8776    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY1]], 8777    ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 8778    ; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 8779    ; CHECK-NEXT: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 8780    ; CHECK-NEXT: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 8781    ; CHECK-NEXT: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 8782    ; CHECK-NEXT: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 8783    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535784    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG]], [[C]]785    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG1]], [[C]]786    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16787    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)788    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]789    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)790    ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG2]], [[C]]791    ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG3]], [[C]]792    ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)793    ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]794    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)795    ; CHECK-NEXT: [[AND4:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG4]], [[C]]796    ; CHECK-NEXT: [[AND5:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG5]], [[C]]797    ; CHECK-NEXT: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32)798    ; CHECK-NEXT: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]799    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)800    ; CHECK-NEXT: [[AND6:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG6]], [[C]]801    ; CHECK-NEXT: [[AND7:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG7]], [[C]]802    ; CHECK-NEXT: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32)803    ; CHECK-NEXT: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]804    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32)805    ; CHECK-NEXT: [[SEXT_INREG8:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY8]], 8806    ; CHECK-NEXT: [[SEXT_INREG9:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY9]], 8807    ; CHECK-NEXT: [[SEXT_INREG10:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY10]], 8808    ; CHECK-NEXT: [[SEXT_INREG11:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY11]], 8809    ; CHECK-NEXT: [[SEXT_INREG12:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY12]], 8810    ; CHECK-NEXT: [[SEXT_INREG13:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY13]], 8811    ; CHECK-NEXT: [[SEXT_INREG14:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY14]], 8812    ; CHECK-NEXT: [[SEXT_INREG15:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY15]], 8813    ; CHECK-NEXT: [[AND8:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG8]], [[C]]814    ; CHECK-NEXT: [[AND9:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG9]], [[C]]815    ; CHECK-NEXT: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[AND9]], [[C1]](s32)816    ; CHECK-NEXT: [[OR4:%[0-9]+]]:_(s32) = G_OR [[AND8]], [[SHL4]]817    ; CHECK-NEXT: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32)818    ; CHECK-NEXT: [[AND10:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG10]], [[C]]819    ; CHECK-NEXT: [[AND11:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG11]], [[C]]820    ; CHECK-NEXT: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[AND11]], [[C1]](s32)821    ; CHECK-NEXT: [[OR5:%[0-9]+]]:_(s32) = G_OR [[AND10]], [[SHL5]]822    ; CHECK-NEXT: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32)823    ; CHECK-NEXT: [[AND12:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG12]], [[C]]824    ; CHECK-NEXT: [[AND13:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG13]], [[C]]825    ; CHECK-NEXT: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND13]], [[C1]](s32)826    ; CHECK-NEXT: [[OR6:%[0-9]+]]:_(s32) = G_OR [[AND12]], [[SHL6]]827    ; CHECK-NEXT: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR6]](s32)828    ; CHECK-NEXT: [[AND14:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG14]], [[C]]829    ; CHECK-NEXT: [[AND15:%[0-9]+]]:_(s32) = G_AND [[SEXT_INREG15]], [[C]]830    ; CHECK-NEXT: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[AND15]], [[C1]](s32)831    ; CHECK-NEXT: [[OR7:%[0-9]+]]:_(s32) = G_OR [[AND14]], [[SHL7]]832    ; CHECK-NEXT: [[BITCAST7:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR7]](s32)833    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>), implicit [[BITCAST4]](<2 x s16>), implicit [[BITCAST5]](<2 x s16>), implicit [[BITCAST6]](<2 x s16>), implicit [[BITCAST7]](<2 x s16>)834    %0:_(s32) = COPY $vgpr0835    %1:_(s32) = COPY $vgpr1836    %2:_(s32) = COPY $vgpr2837    %3:_(s32) = COPY $vgpr3838    %4:_(s32) = COPY $vgpr4839    %5:_(s32) = COPY $vgpr5840    %6:_(s32) = COPY $vgpr6841    %7:_(s32) = COPY $vgpr7842    %8:_(s32) = COPY $vgpr8843    %9:_(s32) = COPY $vgpr9844    %10:_(s32) = COPY $vgpr10845    %11:_(s32) = COPY $vgpr11846    %12:_(s32) = COPY $vgpr12847    %13:_(s32) = COPY $vgpr13848    %14:_(s32) = COPY $vgpr14849    %15:_(s32) = COPY $vgpr15850    %16:_(s8) = G_TRUNC %0851    %17:_(s8) = G_TRUNC %1852    %18:_(s8) = G_TRUNC %2853    %19:_(s8) = G_TRUNC %3854    %20:_(s8) = G_TRUNC %4855    %21:_(s8) = G_TRUNC %5856    %22:_(s8) = G_TRUNC %6857    %23:_(s8) = G_TRUNC %7858    %24:_(s8) = G_TRUNC %8859    %25:_(s8) = G_TRUNC %9860    %26:_(s8) = G_TRUNC %10861    %27:_(s8) = G_TRUNC %11862    %28:_(s8) = G_TRUNC %12863    %29:_(s8) = G_TRUNC %13864    %30:_(s8) = G_TRUNC %14865    %31:_(s8) = G_TRUNC %15866    %32:_(<8 x s8>) = G_BUILD_VECTOR %16, %17, %18, %19, %20, %21, %22, %23867    %33:_(<8 x s8>) = G_BUILD_VECTOR %24, %25, %26, %27, %28, %29, %30, %31868    %34:_(<16 x s8>) = G_CONCAT_VECTORS %32, %33869    %35:_(<16 x s16>) = G_SEXT %34870    %36:_(<2 x s16>), %37:_(<2 x s16>), %38:_(<2 x s16>), %39:_(<2 x s16>), %40:_(<2 x s16>), %41:_(<2 x s16>), %42:_(<2 x s16>), %43:_(<2 x s16>) = G_UNMERGE_VALUES %35871    S_ENDPGM 0, implicit %36, implicit %37, implicit %38, implicit %39, implicit %40, implicit %41, implicit %42, implicit %43872...873 874---875name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64876body:             |877  bb.0:878    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5879    ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64880    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5881    ; CHECK-NEXT: {{  $}}882    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1883    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3884    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)885    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)886    ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32)887    %0:_(s64) = COPY $vgpr0_vgpr1888    %1:_(s64) = COPY $vgpr2_vgpr3889    %2:_(s64) = COPY $vgpr4_vgpr5890    %3:_(s192) = G_MERGE_VALUES %0, %1, %2891    %4:_(s96) = G_TRUNC %3892    %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %4893    S_ENDPGM 0, implicit %5, implicit %6, implicit %7894 895...896 897---898name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64899body:             |900  bb.0:901    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5902    ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64903    ; CHECK: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5904    ; CHECK-NEXT: {{  $}}905    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1906    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3907    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)908    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)909    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16910    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32)911    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)912    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)913    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32)914    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)915    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)916    ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)917    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32)918    ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)919    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)920    %0:_(s64) = COPY $vgpr0_vgpr1921    %1:_(s64) = COPY $vgpr2_vgpr3922    %2:_(s64) = COPY $vgpr4_vgpr5923    %3:_(s192) = G_MERGE_VALUES %0, %1, %2924    %4:_(s96) = G_TRUNC %3925    %5:_(s16), %6:_(s16), %7:_(s16),  %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %4926    S_ENDPGM 0, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10927 928...929 930---931name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32932body:             |933  bb.0:934    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5935    ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32936    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5937    ; CHECK-NEXT: {{  $}}938    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0939    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1940    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2941    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3942    ; CHECK-NEXT: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4943    ; CHECK-NEXT: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5944    ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)945    ; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)946    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)947    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16948    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)949    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)950    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)951    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C]](s32)952    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)953    ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)954    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32)955    ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)956    ; CHECK-NEXT: S_ENDPGM 0, implicit [[MV]](s192), implicit [[MV1]](s96), implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)957    %0:_(s32) = COPY $vgpr0958    %1:_(s32) = COPY $vgpr1959    %2:_(s32) = COPY $vgpr2960    %3:_(s32) = COPY $vgpr3961    %4:_(s32) = COPY $vgpr4962    %5:_(s32) = COPY $vgpr5963    %6:_(s192) = G_MERGE_VALUES %0, %1, %2, %3, %4, %5964    %7:_(s96) = G_TRUNC %6965    %8:_(s16), %9:_(s16), %10:_(s16),  %11:_(s16), %12:_(s16), %13:_(s16) = G_UNMERGE_VALUES %7966    S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %13967 968...969 970---971name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64972body:             |973  bb.0:974    ; CHECK-LABEL: name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64975    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0976    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1977    ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)978    ; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF979    ; CHECK-NEXT: $vgpr0_vgpr1 = COPY [[MV]](s64)980    ; CHECK-NEXT: $vgpr2_vgpr3 = COPY [[DEF]](s64)981    %0:_(s32) = COPY $vgpr0982    %1:_(s32) = COPY $vgpr1983    %2:_(s64) = G_MERGE_VALUES %0, %1984    %3:_(s128) = G_ANYEXT %2985    %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3986    $vgpr0_vgpr1 = COPY %4987    $vgpr2_vgpr3 = COPY %5988 989...990 991---992name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128993body:             |994  bb.0:995    ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128996    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1997    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)998    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)999    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1000    %0:_(s64) = COPY $vgpr0_vgpr11001    %1:_(s64) = COPY $vgpr2_vgpr31002    %2:_(s128) = G_MERGE_VALUES %0, %11003    %3:_(s64) = G_TRUNC %21004    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %31005    $vgpr0 = COPY %41006    $vgpr1 = COPY %51007...1008 1009---1010name: test_unmerge_values_s8_v4s8_trunc_v4s321011body:             |1012  bb.0:1013    liveins: $vgpr0_vgpr1_vgpr2_vgpr31014 1015    ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s321016    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr31017    ; CHECK-NEXT: {{  $}}1018    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31019    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)1020    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s32)1021    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[UV1]](s32)1022    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)1023    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[UV3]](s32)1024    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8)1025    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31026    %1:_(<4 x s8>) = G_TRUNC %01027    %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %11028    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51029 1030...1031 1032---1033name: test_unmerge_values_v2s8_v4s8_trunc_v4s321034body:             |1035  bb.0:1036    liveins: $vgpr0_vgpr1_vgpr2_vgpr31037 1038    ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s321039    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr31040    ; CHECK-NEXT: {{  $}}1041    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31042    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)1043    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)1044    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)1045    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>)1046    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31047    %1:_(<4 x s8>) = G_TRUNC %01048    %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %11049    %4:_(<2 x s16>) = G_ANYEXT %21050    %5:_(<2 x s16>) = G_ANYEXT %31051    S_ENDPGM 0, implicit %4, implicit %51052 1053...1054 1055---1056name: test_unmerge_values_v4s8_v8s8_trunc_v8s321057body:             |1058  bb.0:1059    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71060 1061    ; CHECK-LABEL: name: test_unmerge_values_v4s8_v8s8_trunc_v8s321062    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71063    ; CHECK-NEXT: {{  $}}1064    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71065    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)1066    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV]](<4 x s32>)1067    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV1]](<4 x s32>)1068    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](<4 x s8>), implicit [[TRUNC1]](<4 x s8>)1069    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71070    %1:_(<8 x s8>) = G_TRUNC %01071    %2:_(<4 x s8>), %3:_(<4 x s8>) = G_UNMERGE_VALUES %11072    S_ENDPGM 0, implicit %2, implicit %31073 1074...1075 1076---1077 1078name: test_unmerge_values_s16_v4s16_trunc_v4s321079body:             |1080  bb.0:1081    liveins: $vgpr0_vgpr1_vgpr2_vgpr31082 1083    ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s321084    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr31085    ; CHECK-NEXT: {{  $}}1086    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31087    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)1088    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)1089    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)1090    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)1091    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)1092    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)1093    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31094    %1:_(<4 x s16>) = G_TRUNC %01095    %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %11096    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51097 1098...1099 1100---1101name: test_unmerge_values_v2s16_v4s16_trunc_v4s321102body:             |1103  bb.0:1104    liveins: $vgpr0_vgpr1_vgpr2_vgpr31105 1106    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s321107    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr31108    ; CHECK-NEXT: {{  $}}1109    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31110    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)1111    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)1112    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)1113    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>)1114    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr31115    %1:_(<4 x s16>) = G_TRUNC %01116    %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %11117    S_ENDPGM 0, implicit %2, implicit %31118 1119...1120 1121---1122name: test_unmerge_values_v2s16_v8s16_trunc_v8s321123body:             |1124  bb.0:1125    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71126 1127    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v8s16_trunc_v8s321128    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71129    ; CHECK-NEXT: {{  $}}1130    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71131    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>), [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)1132    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)1133    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)1134    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV2]](<2 x s32>)1135    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV3]](<2 x s32>)1136    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>), implicit [[TRUNC2]](<2 x s16>), implicit [[TRUNC3]](<2 x s16>)1137    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71138    %1:_(<8 x s16>) = G_TRUNC %01139    %2:_(<2 x s16>), %3:_(<2 x s16>), %4:_(<2 x s16>), %5:_(<2 x s16>) = G_UNMERGE_VALUES %11140    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51141 1142...1143 1144---1145name: test_unmerge_values_v4s16_v8s16_trunc_v8s321146body:             |1147  bb.0:1148    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71149 1150    ; CHECK-LABEL: name: test_unmerge_values_v4s16_v8s16_trunc_v8s321151    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71152    ; CHECK-NEXT: {{  $}}1153    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71154    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>), [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)1155    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)1156    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)1157    ; CHECK-NEXT: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>)1158    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<2 x s32>), [[UV5:%[0-9]+]]:_(<2 x s32>), [[UV6:%[0-9]+]]:_(<2 x s32>), [[UV7:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)1159    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV6]](<2 x s32>)1160    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV7]](<2 x s32>)1161    ; CHECK-NEXT: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC2]](<2 x s16>), [[TRUNC3]](<2 x s16>)1162    ; CHECK-NEXT: S_ENDPGM 0, implicit [[CONCAT_VECTORS]](<4 x s16>), implicit [[CONCAT_VECTORS1]](<4 x s16>)1163    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71164    %1:_(<8 x s16>) = G_TRUNC %01165    %2:_(<4 x s16>), %3:_(<4 x s16>) = G_UNMERGE_VALUES %11166    S_ENDPGM 0, implicit %2, implicit %31167 1168...1169 1170---1171name: test_unmerge_values_s8_v4s8_trunc_v4s161172body:             |1173  bb.0:1174    liveins: $vgpr0_vgpr11175 1176    ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s161177    ; CHECK: liveins: $vgpr0_vgpr11178    ; CHECK-NEXT: {{  $}}1179    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr11180    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)1181    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)1182    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 161183    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1184    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)1185    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)1186    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32)1187    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32)1188    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32)1189    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32)1190    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8)1191    %0:_(<4 x s16>) = COPY $vgpr0_vgpr11192    %1:_(<4 x s8>) = G_TRUNC %01193    %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %11194    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51195 1196...1197 1198---1199name: test_unmerge_values_v2s8_v4s8_trunc_v4s161200body:             |1201  bb.0:1202    liveins: $vgpr0_vgpr11203 1204    ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s161205    ; CHECK: liveins: $vgpr0_vgpr11206    ; CHECK-NEXT: {{  $}}1207    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr11208    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)1209    ; CHECK-NEXT: S_ENDPGM 0, implicit [[UV]](<2 x s16>), implicit [[UV1]](<2 x s16>)1210    %0:_(<4 x s16>) = COPY $vgpr0_vgpr11211    %1:_(<4 x s8>) = G_TRUNC %01212    %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %11213    %4:_(<2 x s16>) = G_ANYEXT %21214    %5:_(<2 x s16>) = G_ANYEXT %31215    S_ENDPGM 0, implicit %4, implicit %51216 1217...1218 1219---1220name: test_unmerge_values_s32_v4s32_trunc_v4s641221body:             |1222  bb.0:1223    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71224 1225    ; CHECK-LABEL: name: test_unmerge_values_s32_v4s32_trunc_v4s641226    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71227    ; CHECK-NEXT: {{  $}}1228    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71229    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1230    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)1231    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)1232    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)1233    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)1234    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32)1235    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71236    %1:_(<4 x s32>) = G_TRUNC %01237    %2:_(s32), %3:_(s32), %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %11238    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51239 1240...1241 1242---1243name: test_unmerge_values_v2s32_v4s32_trunc_v4s641244body:             |1245  bb.0:1246    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71247 1248    ; CHECK-LABEL: name: test_unmerge_values_v2s32_v4s32_trunc_v4s641249    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71250    ; CHECK-NEXT: {{  $}}1251    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71252    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1253    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)1254    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)1255    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32)1256    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1257    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV6]](s64)1258    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV7]](s64)1259    ; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC2]](s32), [[TRUNC3]](s32)1260    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<2 x s32>), implicit [[BUILD_VECTOR1]](<2 x s32>)1261    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71262    %1:_(<4 x s32>) = G_TRUNC %01263    %2:_(<2 x s32>), %3:_(<2 x s32>) = G_UNMERGE_VALUES %11264    S_ENDPGM 0, implicit %2, implicit %31265 1266...1267 1268---1269name: test_unmerge_values_s16_v4s16_trunc_v4s641270body:             |1271  bb.0:1272    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71273 1274    ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s641275    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71276    ; CHECK-NEXT: {{  $}}1277    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71278    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1279    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s64)1280    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s64)1281    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s64)1282    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s64)1283    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)1284    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71285    %1:_(<4 x s16>) = G_TRUNC %01286    %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %11287    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %51288 1289...1290 1291---1292name: test_unmerge_values_v2s16_v4s16_trunc_v4s641293body:             |1294  bb.0:1295    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71296 1297    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s641298    ; CHECK: liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71299    ; CHECK-NEXT: {{  $}}1300    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71301    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1302    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)1303    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 655351304    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]1305    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)1306    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC1]], [[C]]1307    ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 161308    ; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)1309    ; CHECK-NEXT: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]1310    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)1311    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64), [[UV6:%[0-9]+]]:_(s64), [[UV7:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)1312    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV6]](s64)1313    ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]1314    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV7]](s64)1315    ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]1316    ; CHECK-NEXT: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)1317    ; CHECK-NEXT: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]1318    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)1319    ; CHECK-NEXT: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>)1320    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr71321    %1:_(<4 x s16>) = G_TRUNC %01322    %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %11323    S_ENDPGM 0, implicit %2, implicit %31324 1325...1326 1327---1328name: test_unmerge_values_s16_from_v3s16_from_v6s161329body:             |1330  bb.0:1331    liveins: $vgpr0_vgpr1_vgpr21332 1333    ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s161334    ; CHECK: liveins: $vgpr0_vgpr1_vgpr21335    ; CHECK-NEXT: {{  $}}1336    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr21337    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)1338    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)1339    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)1340    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 161341    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1342    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)1343    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)1344    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)1345    ; CHECK-NEXT: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)1346    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)1347    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)1348    ; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)1349    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>)1350    ; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST3]](s32)1351    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)1352    ; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)1353    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)1354  %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr21355  %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %01356  %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %11357  %6:_(s16), %7:_(s16), %8:_(s16) = G_UNMERGE_VALUES %21358  S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %81359 1360...1361 1362---1363name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use1364body:             |1365  bb.0:1366    liveins: $vgpr0_vgpr1_vgpr21367 1368    ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use1369    ; CHECK: liveins: $vgpr0_vgpr1_vgpr21370    ; CHECK-NEXT: {{  $}}1371    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr21372    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>), [[UV2:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)1373    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)1374    ; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)1375    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 161376    ; CHECK-NEXT: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)1377    ; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)1378    ; CHECK-NEXT: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)1379    ; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)1380    ; CHECK-NEXT: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)1381    ; CHECK-NEXT: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)1382    ; CHECK-NEXT: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)1383    ; CHECK-NEXT: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>)1384    ; CHECK-NEXT: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)1385    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[LSHR1]](s32), [[BITCAST3]](s32), [[LSHR2]](s32)1386    ; CHECK-NEXT: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[BUILD_VECTOR]](<3 x s32>)1387  %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr21388  %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %01389  %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %11390  %6:_(<3 x s32>) = G_ANYEXT %21391  S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %61392 1393...1394 1395---1396name: test_unmerge_values_s32_from_sext_v2s64_from_v2s11397body:             |1398  bb.0:1399    liveins: $vgpr0, $vgpr1, $vgpr21400 1401    ; CHECK-LABEL: name: test_unmerge_values_s32_from_sext_v2s64_from_v2s11402    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr21403    ; CHECK-NEXT: {{  $}}1404    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01405    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11406    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21407    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY2]]1408    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]1409    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP]](s1)1410    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT]], 11411    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP1]](s1)1412    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT1]], 11413    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG]](s64)1414    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG1]](s64)1415    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)1416    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1417    ; CHECK-NEXT: $vgpr2 = COPY [[UV2]](s32)1418    ; CHECK-NEXT: $vgpr3 = COPY [[UV3]](s32)1419    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31420    %0:_(s32) = COPY $vgpr01421    %1:_(s32) = COPY $vgpr11422    %2:_(s32) = COPY $vgpr21423    %3:_(s1) = G_ICMP intpred(eq), %0, %21424    %4:_(s1) = G_ICMP intpred(eq), %1, %21425    %5:_(<2 x s1>) = G_BUILD_VECTOR %3, %41426    %6:_(<2 x s64>) = G_SEXT %51427    %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %61428    $vgpr0 = COPY %71429    $vgpr1 = COPY %81430    $vgpr2 = COPY %91431    $vgpr3 = COPY %101432    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31433 1434...1435 1436---1437name: test_unmerge_values_s32_from_zext_v2s64_from_v2s11438body:             |1439  bb.0:1440    liveins: $vgpr0, $vgpr1, $vgpr21441 1442    ; CHECK-LABEL: name: test_unmerge_values_s32_from_zext_v2s64_from_v2s11443    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr21444    ; CHECK-NEXT: {{  $}}1445    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01446    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11447    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21448    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY2]]1449    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]1450    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP]](s1)1451    ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 11452    ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s64) = G_AND [[ANYEXT]], [[C]]1453    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP1]](s1)1454    ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s64) = G_AND [[ANYEXT1]], [[C]]1455    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[AND]](s64)1456    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[AND1]](s64)1457    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)1458    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1459    ; CHECK-NEXT: $vgpr2 = COPY [[UV2]](s32)1460    ; CHECK-NEXT: $vgpr3 = COPY [[UV3]](s32)1461    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31462    %0:_(s32) = COPY $vgpr01463    %1:_(s32) = COPY $vgpr11464    %2:_(s32) = COPY $vgpr21465    %3:_(s1) = G_ICMP intpred(eq), %0, %21466    %4:_(s1) = G_ICMP intpred(eq), %1, %21467    %5:_(<2 x s1>) = G_BUILD_VECTOR %3, %41468    %6:_(<2 x s64>) = G_ZEXT %51469    %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %61470    $vgpr0 = COPY %71471    $vgpr1 = COPY %81472    $vgpr2 = COPY %91473    $vgpr3 = COPY %101474    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31475 1476...1477 1478---1479name: test_unmerge_values_s32_from_anyext_v2s64_from_v2s11480body:             |1481  bb.0:1482    liveins: $vgpr0, $vgpr1, $vgpr21483 1484    ; CHECK-LABEL: name: test_unmerge_values_s32_from_anyext_v2s64_from_v2s11485    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr21486    ; CHECK-NEXT: {{  $}}1487    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01488    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11489    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21490    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY2]]1491    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]1492    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)1493    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)1494    ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP]](s1)1495    ; CHECK-NEXT: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP1]](s1)1496    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT2]](s64)1497    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT3]](s64)1498    ; CHECK-NEXT: $vgpr0 = COPY [[ANYEXT]](s32)1499    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1500    ; CHECK-NEXT: $vgpr2 = COPY [[ANYEXT1]](s32)1501    ; CHECK-NEXT: $vgpr3 = COPY [[UV3]](s32)1502    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31503    %0:_(s32) = COPY $vgpr01504    %1:_(s32) = COPY $vgpr11505    %2:_(s32) = COPY $vgpr21506    %3:_(s1) = G_ICMP intpred(eq), %0, %21507    %4:_(s1) = G_ICMP intpred(eq), %1, %21508    %5:_(<2 x s1>) = G_BUILD_VECTOR %3, %41509    %6:_(<2 x s64>) = G_ANYEXT %51510    %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %61511    $vgpr0 = COPY %71512    $vgpr1 = COPY %81513    $vgpr2 = COPY %91514    $vgpr3 = COPY %101515    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr31516 1517...1518 1519---1520name: test_unmerge_values_s32_from_sext_v3s64_from_v3s11521body:             |1522  bb.0:1523    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr31524 1525    ; CHECK-LABEL: name: test_unmerge_values_s32_from_sext_v3s64_from_v3s11526    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr31527    ; CHECK-NEXT: {{  $}}1528    ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01529    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11530    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr21531    ; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr31532    ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY3]]1533    ; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]1534    ; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY3]]1535    ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP]](s1)1536    ; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT]], 11537    ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP1]](s1)1538    ; CHECK-NEXT: [[SEXT_INREG1:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT1]], 11539    ; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[ICMP2]](s1)1540    ; CHECK-NEXT: [[SEXT_INREG2:%[0-9]+]]:_(s64) = G_SEXT_INREG [[ANYEXT2]], 11541    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG]](s64)1542    ; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG1]](s64)1543    ; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[SEXT_INREG2]](s64)1544    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)1545    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1546    ; CHECK-NEXT: $vgpr2 = COPY [[UV2]](s32)1547    ; CHECK-NEXT: $vgpr3 = COPY [[UV3]](s32)1548    ; CHECK-NEXT: $vgpr4 = COPY [[UV4]](s32)1549    ; CHECK-NEXT: $vgpr5 = COPY [[UV5]](s32)1550    ; CHECK-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3, implicit $vgpr4, implicit $vgpr51551    %0:_(s32) = COPY $vgpr01552    %1:_(s32) = COPY $vgpr11553    %2:_(s32) = COPY $vgpr21554    %3:_(s32) = COPY $vgpr31555    %4:_(s1) = G_ICMP intpred(eq), %0, %31556    %5:_(s1) = G_ICMP intpred(eq), %1, %31557    %6:_(s1) = G_ICMP intpred(eq), %2, %31558    %7:_(<3 x s1>) = G_BUILD_VECTOR %4, %5, %61559    %8:_(<3 x s64>) = G_SEXT %71560    %9:_(s32), %10:_(s32), %11:_(s32), %12:_(s32), %13:_(s32), %14:_(s32) = G_UNMERGE_VALUES %81561    $vgpr0 = COPY %91562    $vgpr1 = COPY %101563    $vgpr2 = COPY %111564    $vgpr3 = COPY %121565    $vgpr4 = COPY %131566    $vgpr5 = COPY %141567    S_SETPC_B64_return undef $sgpr30_sgpr31, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr3 , implicit $vgpr4, implicit $vgpr51568 1569...1570 1571---1572name: test_unmerge_values_look_through_scalar_to_vector_bitcast1573body: |1574  bb.0:1575 1576    ; CHECK-LABEL: name: test_unmerge_values_look_through_scalar_to_vector_bitcast1577    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01578    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11579    ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)1580    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[MV]](s64)1581    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BITCAST]](<2 x s32>)1582    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)1583    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1584    %0:_(s32) = COPY $vgpr01585    %1:_(s32) = COPY $vgpr11586    %2:_(s64) = G_MERGE_VALUES %0:_(s32), %1:_(s32)1587    %3:_(<2 x s32>) = G_BITCAST %2:_(s64)1588    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %3:_(<2 x s32>)1589    $vgpr0 = COPY %41590    $vgpr1 = COPY %51591...1592 1593---1594name: test_unmerge_values_look_through_vector_to_scalar_bitcast1595body: |1596  bb.0:1597 1598    ; CHECK-LABEL: name: test_unmerge_values_look_through_vector_to_scalar_bitcast1599    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr01600    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr11601    ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)1602    ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s64) = G_BITCAST [[BUILD_VECTOR]](<2 x s32>)1603    ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BITCAST]](s64)1604    ; CHECK-NEXT: $vgpr0 = COPY [[UV]](s32)1605    ; CHECK-NEXT: $vgpr1 = COPY [[UV1]](s32)1606    %0:_(s32) = COPY $vgpr01607    %1:_(s32) = COPY $vgpr11608    %2:_(<2 x s32>) = G_BUILD_VECTOR %0:_(s32), %1:_(s32)1609    %3:_(s64) = G_BITCAST %2:_(<2 x s32>)1610    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %3:_(s64)1611    $vgpr0 = COPY %41612    $vgpr1 = COPY %51613...1614