@@ -570,7 +570,83 @@ define <vscale x 2 x i32> @vwop_vscale_zext_i8i32_multiple_users(ptr %x, ptr %y,
570570 ret <vscale x 2 x i32 > %i
571571}
572572
573+ define <vscale x 4 x i32 > @mismatched_extend_sub_add (<vscale x 4 x i16 > %x , <vscale x 4 x i16 > %y ) {
574+ ; FOLDING-LABEL: mismatched_extend_sub_add:
575+ ; FOLDING: # %bb.0:
576+ ; FOLDING-NEXT: vsetvli a0, zero, e32, m2, ta, ma
577+ ; FOLDING-NEXT: vzext.vf2 v10, v8
578+ ; FOLDING-NEXT: vsetvli zero, zero, e16, m1, ta, ma
579+ ; FOLDING-NEXT: vwsub.wv v12, v10, v9
580+ ; FOLDING-NEXT: vwadd.wv v10, v10, v9
581+ ; FOLDING-NEXT: vsetvli zero, zero, e32, m2, ta, ma
582+ ; FOLDING-NEXT: vmul.vv v8, v12, v10
583+ ; FOLDING-NEXT: ret
584+ %a = zext <vscale x 4 x i16 > %x to <vscale x 4 x i32 >
585+ %b = sext <vscale x 4 x i16 > %y to <vscale x 4 x i32 >
586+ %c = sub <vscale x 4 x i32 > %a , %b
587+ %d = add <vscale x 4 x i32 > %a , %b
588+ %e = mul <vscale x 4 x i32 > %c , %d
589+ ret <vscale x 4 x i32 > %e
590+ }
591+
592+ ; FIXME: this should remove the vsext
593+ define <vscale x 4 x i32 > @mismatched_extend_sub_add_commuted (<vscale x 4 x i16 > %x , <vscale x 4 x i16 > %y ) {
594+ ; FOLDING-LABEL: mismatched_extend_sub_add_commuted:
595+ ; FOLDING: # %bb.0:
596+ ; FOLDING-NEXT: vsetvli a0, zero, e32, m2, ta, ma
597+ ; FOLDING-NEXT: vzext.vf2 v10, v8
598+ ; FOLDING-NEXT: vsext.vf2 v12, v9
599+ ; FOLDING-NEXT: vsetvli zero, zero, e16, m1, ta, ma
600+ ; FOLDING-NEXT: vwsub.wv v10, v10, v9
601+ ; FOLDING-NEXT: vwaddu.wv v12, v12, v8
602+ ; FOLDING-NEXT: vsetvli zero, zero, e32, m2, ta, ma
603+ ; FOLDING-NEXT: vmul.vv v8, v10, v12
604+ ; FOLDING-NEXT: ret
605+ %a = zext <vscale x 4 x i16 > %x to <vscale x 4 x i32 >
606+ %b = sext <vscale x 4 x i16 > %y to <vscale x 4 x i32 >
607+ %c = sub <vscale x 4 x i32 > %a , %b
608+ %d = add <vscale x 4 x i32 > %b , %a
609+ %e = mul <vscale x 4 x i32 > %c , %d
610+ ret <vscale x 4 x i32 > %e
611+ }
573612
613+ define <vscale x 4 x i32 > @mismatched_extend_add_sub (<vscale x 4 x i16 > %x , <vscale x 4 x i16 > %y ) {
614+ ; FOLDING-LABEL: mismatched_extend_add_sub:
615+ ; FOLDING: # %bb.0:
616+ ; FOLDING-NEXT: vsetvli a0, zero, e32, m2, ta, ma
617+ ; FOLDING-NEXT: vzext.vf2 v10, v8
618+ ; FOLDING-NEXT: vsetvli zero, zero, e16, m1, ta, ma
619+ ; FOLDING-NEXT: vwadd.wv v12, v10, v9
620+ ; FOLDING-NEXT: vwsub.wv v10, v10, v9
621+ ; FOLDING-NEXT: vsetvli zero, zero, e32, m2, ta, ma
622+ ; FOLDING-NEXT: vmul.vv v8, v12, v10
623+ ; FOLDING-NEXT: ret
624+ %a = zext <vscale x 4 x i16 > %x to <vscale x 4 x i32 >
625+ %b = sext <vscale x 4 x i16 > %y to <vscale x 4 x i32 >
626+ %c = add <vscale x 4 x i32 > %a , %b
627+ %d = sub <vscale x 4 x i32 > %a , %b
628+ %e = mul <vscale x 4 x i32 > %c , %d
629+ ret <vscale x 4 x i32 > %e
630+ }
631+
632+ define <vscale x 4 x i32 > @mismatched_extend_add_sub_commuted (<vscale x 4 x i16 > %x , <vscale x 4 x i16 > %y ) {
633+ ; FOLDING-LABEL: mismatched_extend_add_sub_commuted:
634+ ; FOLDING: # %bb.0:
635+ ; FOLDING-NEXT: vsetvli a0, zero, e32, m2, ta, ma
636+ ; FOLDING-NEXT: vzext.vf2 v10, v8
637+ ; FOLDING-NEXT: vsetvli zero, zero, e16, m1, ta, ma
638+ ; FOLDING-NEXT: vwadd.wv v12, v10, v9
639+ ; FOLDING-NEXT: vwsub.wv v10, v10, v9
640+ ; FOLDING-NEXT: vsetvli zero, zero, e32, m2, ta, ma
641+ ; FOLDING-NEXT: vmul.vv v8, v12, v10
642+ ; FOLDING-NEXT: ret
643+ %a = zext <vscale x 4 x i16 > %x to <vscale x 4 x i32 >
644+ %b = sext <vscale x 4 x i16 > %y to <vscale x 4 x i32 >
645+ %c = add <vscale x 4 x i32 > %a , %b
646+ %d = sub <vscale x 4 x i32 > %a , %b
647+ %e = mul <vscale x 4 x i32 > %c , %d
648+ ret <vscale x 4 x i32 > %e
649+ }
574650
575651;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
576652; RV32: {{.*}}
0 commit comments