@@ -910,10 +910,10 @@ body: |
910910 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
911911 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
912912 ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5
913- ; CHECK: [[TRUNC :%[0-9]+]]:_(s32 ) = G_TRUNC [[COPY]](s64)
914- ; CHECK: [[TRUNC1 :%[0-9]+]]:_(s32 ) = G_TRUNC [[COPY1 ]](s64 )
915- ; CHECK: [[TRUNC2 :%[0-9]+]]:_(s32) = G_TRUNC [[COPY2 ]](s64 )
916- ; CHECK: S_ENDPGM 0, implicit [[TRUNC ]](s32), implicit [[TRUNC1 ]](s32), implicit [[TRUNC2 ]](s32)
913+ ; CHECK: [[MV :%[0-9]+]]:_(s192 ) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64), [[COPY2 ]](s64)
914+ ; CHECK: [[TRUNC :%[0-9]+]]:_(s96 ) = G_TRUNC [[MV ]](s192 )
915+ ; CHECK: [[UV :%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[TRUNC ]](s96 )
916+ ; CHECK: S_ENDPGM 0, implicit [[UV ]](s32), implicit [[UV1 ]](s32), implicit [[UV2 ]](s32)
917917 %0:_(s64) = COPY $vgpr0_vgpr1
918918 %1:_(s64) = COPY $vgpr2_vgpr3
919919 %2:_(s64) = COPY $vgpr4_vgpr5
@@ -933,16 +933,20 @@ body: |
933933 ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
934934 ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
935935 ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5
936- ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
937- ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
938- ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
939- ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
940- ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
941- ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)
942- ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
943- ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV4]](s32)
944- ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[UV5]](s32)
945- ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)
936+ ; CHECK: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s64), [[COPY1]](s64), [[COPY2]](s64)
937+ ; CHECK: [[TRUNC:%[0-9]+]]:_(s96) = G_TRUNC [[MV]](s192)
938+ ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[TRUNC]](s96)
939+ ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
940+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
941+ ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32)
942+ ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
943+ ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
944+ ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32)
945+ ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
946+ ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
947+ ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32)
948+ ; CHECK: [[TRUNC6:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
949+ ; CHECK: S_ENDPGM 0, implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16), implicit [[TRUNC6]](s16)
946950 %0:_(s64) = COPY $vgpr0_vgpr1
947951 %1:_(s64) = COPY $vgpr2_vgpr3
948952 %2:_(s64) = COPY $vgpr4_vgpr5
@@ -968,11 +972,15 @@ body: |
968972 ; CHECK: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)
969973 ; CHECK: [[MV1:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
970974 ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
971- ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
972- ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
973- ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[COPY3]](s32)
974- ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY4]](s32)
975- ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[COPY5]](s32)
975+ ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
976+ ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
977+ ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
978+ ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
979+ ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C]](s32)
980+ ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
981+ ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
982+ ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32)
983+ ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
976984 ; CHECK: 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)
977985 %0:_(s32) = COPY $vgpr0
978986 %1:_(s32) = COPY $vgpr1
@@ -986,3 +994,46 @@ body: |
986994 S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %13
987995
988996 ...
997+
998+ ---
999+ name : test_unmerge_values_s64_anyext_s128_of_merge_values_s64
1000+ body : |
1001+ bb.0:
1002+ ; CHECK-LABEL: name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64
1003+ ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1004+ ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1005+ ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1006+ ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
1007+ ; CHECK: [[MV1:%[0-9]+]]:_(s128) = G_MERGE_VALUES [[MV]](s64), [[DEF]](s64)
1008+ ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[MV1]](s128)
1009+ ; CHECK: $vgpr0_vgpr1 = COPY [[UV]](s64)
1010+ ; CHECK: $vgpr2_vgpr3 = COPY [[UV1]](s64)
1011+ %0:_(s32) = COPY $vgpr0
1012+ %1:_(s32) = COPY $vgpr1
1013+ %2:_(s64) = G_MERGE_VALUES %0, %1
1014+ %3:_(s128) = G_ANYEXT %2
1015+ %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3
1016+ $vgpr0_vgpr1 = COPY %4
1017+ $vgpr2_vgpr3 = COPY %5
1018+
1019+ ...
1020+
1021+ ---
1022+ name : test_unmerge_values_s32_trunc_s64_of_merge_values_s128
1023+ body : |
1024+ bb.0:
1025+ ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128
1026+ ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
1027+ ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
1028+ ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
1029+ ; CHECK: $vgpr0 = COPY [[UV]](s32)
1030+ ; CHECK: $vgpr1 = COPY [[UV1]](s32)
1031+ %0:_(s64) = COPY $vgpr0_vgpr1
1032+ %1:_(s64) = COPY $vgpr2_vgpr3
1033+ %2:_(s128) = G_MERGE_VALUES %0, %1
1034+ %3:_(s64) = G_TRUNC %2
1035+ %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %3
1036+ $vgpr0 = COPY %4
1037+ $vgpr1 = COPY %5
1038+
1039+ ...
0 commit comments