@@ -642,7 +642,165 @@ define <vscale x 4 x i16> @vnsrl_wi(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b
642
642
ret <vscale x 4 x i16 > %2
643
643
}
644
644
645
+ define <vscale x 4 x i32 > @vminu_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
646
+ ; NOVLOPT-LABEL: vminu_vv:
647
+ ; NOVLOPT: # %bb.0:
648
+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
649
+ ; NOVLOPT-NEXT: vminu.vv v8, v8, v10
650
+ ; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
651
+ ; NOVLOPT-NEXT: vadd.vv v8, v8, v10
652
+ ; NOVLOPT-NEXT: ret
653
+ ;
654
+ ; VLOPT-LABEL: vminu_vv:
655
+ ; VLOPT: # %bb.0:
656
+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
657
+ ; VLOPT-NEXT: vminu.vv v8, v8, v10
658
+ ; VLOPT-NEXT: vadd.vv v8, v8, v10
659
+ ; VLOPT-NEXT: ret
660
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vminu.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen -1 )
661
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %b , iXLen %vl )
662
+ ret <vscale x 4 x i32 > %2
663
+ }
664
+
665
+ define <vscale x 4 x i32 > @vminu_vx (<vscale x 4 x i32 > %a , i32 %b , iXLen %vl ) {
666
+ ; NOVLOPT-LABEL: vminu_vx:
667
+ ; NOVLOPT: # %bb.0:
668
+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
669
+ ; NOVLOPT-NEXT: vminu.vx v10, v8, a0
670
+ ; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
671
+ ; NOVLOPT-NEXT: vadd.vv v8, v10, v8
672
+ ; NOVLOPT-NEXT: ret
673
+ ;
674
+ ; VLOPT-LABEL: vminu_vx:
675
+ ; VLOPT: # %bb.0:
676
+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
677
+ ; VLOPT-NEXT: vminu.vx v10, v8, a0
678
+ ; VLOPT-NEXT: vadd.vv v8, v10, v8
679
+ ; VLOPT-NEXT: ret
680
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vminu.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , i32 %b , iXLen -1 )
681
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %a , iXLen %vl )
682
+ ret <vscale x 4 x i32 > %2
683
+ }
684
+
685
+ define <vscale x 4 x i32 > @vmin_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
686
+ ; NOVLOPT-LABEL: vmin_vv:
687
+ ; NOVLOPT: # %bb.0:
688
+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
689
+ ; NOVLOPT-NEXT: vmin.vv v8, v8, v10
690
+ ; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
691
+ ; NOVLOPT-NEXT: vadd.vv v8, v8, v10
692
+ ; NOVLOPT-NEXT: ret
693
+ ;
694
+ ; VLOPT-LABEL: vmin_vv:
695
+ ; VLOPT: # %bb.0:
696
+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
697
+ ; VLOPT-NEXT: vmin.vv v8, v8, v10
698
+ ; VLOPT-NEXT: vadd.vv v8, v8, v10
699
+ ; VLOPT-NEXT: ret
700
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmin.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen -1 )
701
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %b , iXLen %vl )
702
+ ret <vscale x 4 x i32 > %2
703
+ }
704
+
705
+ define <vscale x 4 x i32 > @vmin_vx (<vscale x 4 x i32 > %a , i32 %b , iXLen %vl ) {
706
+ ; NOVLOPT-LABEL: vmin_vx:
707
+ ; NOVLOPT: # %bb.0:
708
+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
709
+ ; NOVLOPT-NEXT: vmin.vx v10, v8, a0
710
+ ; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
711
+ ; NOVLOPT-NEXT: vadd.vv v8, v10, v8
712
+ ; NOVLOPT-NEXT: ret
713
+ ;
714
+ ; VLOPT-LABEL: vmin_vx:
715
+ ; VLOPT: # %bb.0:
716
+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
717
+ ; VLOPT-NEXT: vmin.vx v10, v8, a0
718
+ ; VLOPT-NEXT: vadd.vv v8, v10, v8
719
+ ; VLOPT-NEXT: ret
720
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmin.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , i32 %b , iXLen -1 )
721
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %a , iXLen %vl )
722
+ ret <vscale x 4 x i32 > %2
723
+ }
645
724
725
+ define <vscale x 4 x i32 > @vmaxu_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
726
+ ; NOVLOPT-LABEL: vmaxu_vv:
727
+ ; NOVLOPT: # %bb.0:
728
+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
729
+ ; NOVLOPT-NEXT: vmaxu.vv v8, v8, v10
730
+ ; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
731
+ ; NOVLOPT-NEXT: vadd.vv v8, v8, v10
732
+ ; NOVLOPT-NEXT: ret
733
+ ;
734
+ ; VLOPT-LABEL: vmaxu_vv:
735
+ ; VLOPT: # %bb.0:
736
+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
737
+ ; VLOPT-NEXT: vmaxu.vv v8, v8, v10
738
+ ; VLOPT-NEXT: vadd.vv v8, v8, v10
739
+ ; VLOPT-NEXT: ret
740
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmaxu.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen -1 )
741
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %b , iXLen %vl )
742
+ ret <vscale x 4 x i32 > %2
743
+ }
744
+
745
+ define <vscale x 4 x i32 > @vmaxu_vx (<vscale x 4 x i32 > %a , i32 %b , iXLen %vl ) {
746
+ ; NOVLOPT-LABEL: vmaxu_vx:
747
+ ; NOVLOPT: # %bb.0:
748
+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
749
+ ; NOVLOPT-NEXT: vmaxu.vx v10, v8, a0
750
+ ; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
751
+ ; NOVLOPT-NEXT: vadd.vv v8, v10, v8
752
+ ; NOVLOPT-NEXT: ret
753
+ ;
754
+ ; VLOPT-LABEL: vmaxu_vx:
755
+ ; VLOPT: # %bb.0:
756
+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
757
+ ; VLOPT-NEXT: vmaxu.vx v10, v8, a0
758
+ ; VLOPT-NEXT: vadd.vv v8, v10, v8
759
+ ; VLOPT-NEXT: ret
760
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmaxu.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , i32 %b , iXLen -1 )
761
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %a , iXLen %vl )
762
+ ret <vscale x 4 x i32 > %2
763
+ }
764
+
765
+ define <vscale x 4 x i32 > @vmax_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
766
+ ; NOVLOPT-LABEL: vmax_vv:
767
+ ; NOVLOPT: # %bb.0:
768
+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
769
+ ; NOVLOPT-NEXT: vmax.vv v8, v8, v10
770
+ ; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
771
+ ; NOVLOPT-NEXT: vadd.vv v8, v8, v10
772
+ ; NOVLOPT-NEXT: ret
773
+ ;
774
+ ; VLOPT-LABEL: vmax_vv:
775
+ ; VLOPT: # %bb.0:
776
+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
777
+ ; VLOPT-NEXT: vmax.vv v8, v8, v10
778
+ ; VLOPT-NEXT: vadd.vv v8, v8, v10
779
+ ; VLOPT-NEXT: ret
780
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmax.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen -1 )
781
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %b , iXLen %vl )
782
+ ret <vscale x 4 x i32 > %2
783
+ }
784
+
785
+ define <vscale x 4 x i32 > @vmax_vx (<vscale x 4 x i32 > %a , i32 %b , iXLen %vl ) {
786
+ ; NOVLOPT-LABEL: vmax_vx:
787
+ ; NOVLOPT: # %bb.0:
788
+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
789
+ ; NOVLOPT-NEXT: vmax.vx v10, v8, a0
790
+ ; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
791
+ ; NOVLOPT-NEXT: vadd.vv v8, v10, v8
792
+ ; NOVLOPT-NEXT: ret
793
+ ;
794
+ ; VLOPT-LABEL: vmax_vx:
795
+ ; VLOPT: # %bb.0:
796
+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
797
+ ; VLOPT-NEXT: vmax.vx v10, v8, a0
798
+ ; VLOPT-NEXT: vadd.vv v8, v10, v8
799
+ ; VLOPT-NEXT: ret
800
+ %1 = call <vscale x 4 x i32 > @llvm.riscv.vmax.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %a , i32 %b , iXLen -1 )
801
+ %2 = call <vscale x 4 x i32 > @llvm.riscv.vadd.nxv4i32.nxv4i32 (<vscale x 4 x i32 > poison, <vscale x 4 x i32 > %1 , <vscale x 4 x i32 > %a , iXLen %vl )
802
+ ret <vscale x 4 x i32 > %2
803
+ }
646
804
647
805
define <vscale x 4 x i32 > @vmul_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
648
806
; NOVLOPT-LABEL: vmul_vv:
0 commit comments