@@ -642,7 +642,165 @@ define <vscale x 4 x i16> @vnsrl_wi(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b
642642 ret <vscale x 4 x i16 > %2
643643}
644644
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+ }
645724
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+ }
646804
647805define <vscale x 4 x i32 > @vmul_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %b , iXLen %vl ) {
648806; NOVLOPT-LABEL: vmul_vv:
0 commit comments