@@ -489,3 +489,68 @@ body: |
489489 RET_ReallyLR implicit $x0
490490
491491 ...
492+ # Same as above but with a source MI with multiple destination operands.
493+ ---
494+ name : anyext_add_through_phi_multiple_operands
495+ tracksRegLiveness : true
496+ body : |
497+ ; CHECK-LABEL: name: anyext_add_through_phi_multiple_operands
498+ ; CHECK: bb.0.entry:
499+ ; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
500+ ; CHECK-NEXT: liveins: $w0, $w1
501+ ; CHECK-NEXT: {{ $}}
502+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
503+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
504+ ; CHECK-NEXT: %one:_(s32) = G_CONSTANT i32 2
505+ ; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one
506+ ; CHECK-NEXT: G_BRCOND %cmp(s1), %bb.2
507+ ; CHECK-NEXT: G_BR %bb.1
508+ ; CHECK-NEXT: {{ $}}
509+ ; CHECK-NEXT: bb.1:
510+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
511+ ; CHECK-NEXT: {{ $}}
512+ ; CHECK-NEXT: %big0:_(s64) = G_SEXT [[COPY]](s32)
513+ ; CHECK-NEXT: %big1:_(s64) = G_SEXT [[COPY1]](s32)
514+ ; CHECK-NEXT: %add:_(s64) = G_ADD %big0, %big1
515+ ; CHECK-NEXT: %first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add(s64)
516+ ; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT %second(s32)
517+ ; CHECK-NEXT: G_BR %bb.3
518+ ; CHECK-NEXT: {{ $}}
519+ ; CHECK-NEXT: bb.2:
520+ ; CHECK-NEXT: successors: %bb.3(0x80000000)
521+ ; CHECK-NEXT: {{ $}}
522+ ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
523+ ; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)
524+ ; CHECK-NEXT: {{ $}}
525+ ; CHECK-NEXT: bb.3:
526+ ; CHECK-NEXT: %ext:_(s64) = G_PHI [[ANYEXT]](s64), %bb.1, [[ANYEXT1]](s64), %bb.2
527+ ; CHECK-NEXT: $x0 = COPY %ext(s64)
528+ ; CHECK-NEXT: RET_ReallyLR implicit $x0
529+ bb.1.entry:
530+ liveins: $w0, $w1
531+
532+ %0:_(s32) = COPY $w0
533+ %1:_(s32) = COPY $w1
534+ %zero:_(s32) = G_CONSTANT i32 0
535+ %one:_(s32) = G_CONSTANT i32 2
536+ %cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one
537+ G_BRCOND %cmp(s1), %bb.2
538+ G_BR %bb.3
539+
540+ bb.2:
541+ %big0:_(s64) = G_SEXT %0
542+ %big1:_(s64) = G_SEXT %1
543+ %add:_(s64) = G_ADD %big0, %big1
544+ %first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add:_(s64)
545+ G_BR %bb.4
546+
547+ bb.3:
548+ %cst32_10:_(s32) = G_CONSTANT i32 10
549+
550+ bb.4:
551+ %phi:_(s32) = G_PHI %second, %bb.2, %cst32_10, %bb.3
552+ %ext:_(s64) = G_ANYEXT %phi
553+ $x0 = COPY %ext(s64)
554+ RET_ReallyLR implicit $x0
555+
556+ ...
0 commit comments