@@ -661,3 +661,35 @@ body: |
661661 %y:vrnov0, %vl:gprnox0 = PseudoVLE8FF_V_M1_MASK $noreg, $noreg, $noreg, 1, 3 /* e8 */, 3 /* ta, ma */
662662 PseudoVSE8_V_M1 %x, $noreg, %vl, 3 /* e8 */
663663 ...
664+ ---
665+ name : insert_subreg_bitcast_no_peekthru
666+ body : |
667+ bb.0:
668+ liveins: $v8, $v9, $v10
669+
670+ ; We should not peekthrough an INSERT_SUBREG if its user is not a segmented store or another INSERT_SUBREG.
671+ ; CHECK-LABEL: name: insert_subreg_bitcast_no_peekthru
672+ ; CHECK: liveins: $v8, $v9, $v10
673+ ; CHECK-NEXT: {{ $}}
674+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:vr = COPY $v8
675+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vr = COPY $v9
676+ ; CHECK-NEXT: [[PseudoVADD_VV_M1_:%[0-9]+]]:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 3 /* ta, ma */
677+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vr = COPY $v10
678+ ; CHECK-NEXT: [[DEF:%[0-9]+]]:vrn4m1 = IMPLICIT_DEF
679+ ; CHECK-NEXT: [[INSERT_SUBREG:%[0-9]+]]:vrn4m1 = INSERT_SUBREG [[DEF]], [[COPY]], %subreg.sub_vrm1_0
680+ ; CHECK-NEXT: [[INSERT_SUBREG1:%[0-9]+]]:vrn4m1 = INSERT_SUBREG [[INSERT_SUBREG]], [[COPY1]], %subreg.sub_vrm1_1
681+ ; CHECK-NEXT: [[INSERT_SUBREG2:%[0-9]+]]:vrn4m1 = INSERT_SUBREG [[INSERT_SUBREG1]], [[PseudoVADD_VV_M1_]], %subreg.sub_vrm1_2
682+ ; CHECK-NEXT: [[INSERT_SUBREG3:%[0-9]+]]:vrn4m1 = INSERT_SUBREG [[INSERT_SUBREG2]], [[COPY2]], %subreg.sub_vrm1_3
683+ ; CHECK-NEXT: [[COPY3:%[0-9]+]]:vrm4 = COPY [[INSERT_SUBREG3]]
684+ ; CHECK-NEXT: PseudoVSE32_V_M4 [[COPY3]], $noreg, 1, 5 /* e32 */
685+ %0:vr = COPY $v8
686+ %1:vr = COPY $v9
687+ %2:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 5 /* e32 */, 3 /* ta, ma */
688+ %3:vr = COPY $v10
689+ %6:vrn4m1 = IMPLICIT_DEF
690+ %5:vrn4m1 = INSERT_SUBREG %6, %0, %subreg.sub_vrm1_0
691+ %7:vrn4m1 = INSERT_SUBREG %5, %1, %subreg.sub_vrm1_1
692+ %8:vrn4m1 = INSERT_SUBREG %7, %2, %subreg.sub_vrm1_2
693+ %9:vrn4m1 = INSERT_SUBREG %8, %3, %subreg.sub_vrm1_3
694+ %10:vrm4 = COPY %9
695+ PseudoVSE32_V_M4 %10:vrm4, $noreg, 1, 5 /* e32 */
0 commit comments