@@ -10,9 +10,9 @@ body: |
1010 bb.1:
1111 ; CHECK-LABEL: name: test_combine_unmerge_merge
1212 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
13- ; CHECK-NEXT: [[DEF1 :%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
13+ ; CHECK-NEXT: [[C :%[0-9]+]]:_(s32) = G_CONSTANT i32 0
1414 ; CHECK-NEXT: $w0 = COPY [[DEF]](s32)
15- ; CHECK-NEXT: $w1 = COPY [[DEF1 ]](s32)
15+ ; CHECK-NEXT: $w1 = COPY [[C ]](s32)
1616 %0:_(s32) = G_IMPLICIT_DEF
1717 %1:_(s32) = G_IMPLICIT_DEF
1818 %2:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
@@ -115,9 +115,11 @@ body: |
115115 bb.1:
116116 ; CHECK-LABEL: name: test_combine_unmerge_bitcast_merge
117117 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
118- ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
119- ; CHECK-NEXT: $w0 = COPY [[DEF]](s32)
120- ; CHECK-NEXT: $w1 = COPY [[DEF1]](s32)
118+ ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[DEF]](s32)
119+ ; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[ZEXT]](s64)
120+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[BITCAST]](<2 x s32>)
121+ ; CHECK-NEXT: $w0 = COPY [[UV]](s32)
122+ ; CHECK-NEXT: $w1 = COPY [[UV1]](s32)
121123 %0:_(s32) = G_IMPLICIT_DEF
122124 %1:_(s32) = G_IMPLICIT_DEF
123125 %2:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
@@ -136,9 +138,8 @@ body: |
136138 bb.1:
137139 ; CHECK-LABEL: name: test_combine_unmerge_merge_incompatible_types
138140 ; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
139- ; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
140- ; CHECK-NEXT: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[DEF]](s32), [[DEF1]](s32)
141- ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[MV]](s64)
141+ ; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[DEF]](s32)
142+ ; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[ZEXT]](s64)
142143 ; CHECK-NEXT: $h0 = COPY [[UV]](s16)
143144 ; CHECK-NEXT: $h1 = COPY [[UV1]](s16)
144145 ; CHECK-NEXT: $h2 = COPY [[UV2]](s16)
@@ -539,3 +540,36 @@ body: |
539540 $q0 = COPY %un1(s128)
540541 $q1 = COPY %un2(s128)
541542 ...
543+
544+ # Check that we zext the merge
545+ ---
546+ name : test_merge_undef
547+ body : |
548+ bb.1:
549+ ; CHECK-LABEL: name: test_merge_undef
550+ ; CHECK: %opaque:_(s64) = COPY $x0
551+ ; CHECK-NEXT: %me:_(s128) = G_ZEXT %opaque(s64)
552+ ; CHECK-NEXT: $q0 = COPY %me(s128)
553+ %opaque:_(s64) = COPY $x0
554+ %def:_(s64) = G_IMPLICIT_DEF
555+ %me:_(s128) = G_MERGE_VALUES %opaque(s64), %def
556+ $q0 = COPY %me(s128)
557+ ...
558+
559+ # Check that we don't zext the merge, multi-use
560+ ---
561+ name : test_merge_undef_multi_use
562+ body : |
563+ bb.1:
564+ ; CHECK-LABEL: name: test_merge_undef_multi_use
565+ ; CHECK: %opaque:_(s64) = COPY $x0
566+ ; CHECK-NEXT: %def:_(s64) = G_IMPLICIT_DEF
567+ ; CHECK-NEXT: %me:_(s128) = G_MERGE_VALUES %opaque(s64), %def(s64)
568+ ; CHECK-NEXT: $q0 = COPY %me(s128)
569+ ; CHECK-NEXT: $x0 = COPY %def(s64)
570+ %opaque:_(s64) = COPY $x0
571+ %def:_(s64) = G_IMPLICIT_DEF
572+ %me:_(s128) = G_MERGE_VALUES %opaque(s64), %def
573+ $q0 = COPY %me(s128)
574+ $x0 = COPY %def(s64)
575+ ...
0 commit comments