@@ -962,6 +962,106 @@ define <vscale x 4 x i64> @vzext_vf8(<vscale x 4 x i8> %a, <vscale x 4 x i64> %b
962962 ret <vscale x 4 x i64 > %2
963963}
964964
965+ define <vscale x 4 x i1 > @vmadc_vi (<vscale x 4 x i32 > %a , <vscale x 4 x i1 > %b , iXLen %vl ) {
966+ ; NOVLOPT-LABEL: vmadc_vi:
967+ ; NOVLOPT: # %bb.0:
968+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
969+ ; NOVLOPT-NEXT: vmadc.vi v10, v8, 5
970+ ; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
971+ ; NOVLOPT-NEXT: vmand.mm v0, v10, v0
972+ ; NOVLOPT-NEXT: ret
973+ ;
974+ ; VLOPT-LABEL: vmadc_vi:
975+ ; VLOPT: # %bb.0:
976+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
977+ ; VLOPT-NEXT: vmadc.vi v10, v8, 5
978+ ; VLOPT-NEXT: vmand.mm v0, v10, v0
979+ ; VLOPT-NEXT: ret
980+ %1 = call <vscale x 4 x i1 > @llvm.riscv.vmadc.nxv4i32.i32 (<vscale x 4 x i32 > %a , i32 5 , iXLen -1 )
981+ %2 = call <vscale x 4 x i1 > @llvm.riscv.vmand.nxv4i1 (<vscale x 4 x i1 > %1 , <vscale x 4 x i1 > %b , iXLen %vl )
982+ ret <vscale x 4 x i1 > %2
983+ }
984+
985+ define <vscale x 4 x i1 > @vmadc_vx (<vscale x 4 x i32 > %a , <vscale x 4 x i1 > %b , i32 %c , iXLen %vl ) {
986+ ; NOVLOPT-LABEL: vmadc_vx:
987+ ; NOVLOPT: # %bb.0:
988+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
989+ ; NOVLOPT-NEXT: vmadc.vx v10, v8, a0
990+ ; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
991+ ; NOVLOPT-NEXT: vmand.mm v0, v10, v0
992+ ; NOVLOPT-NEXT: ret
993+ ;
994+ ; VLOPT-LABEL: vmadc_vx:
995+ ; VLOPT: # %bb.0:
996+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
997+ ; VLOPT-NEXT: vmadc.vx v10, v8, a0
998+ ; VLOPT-NEXT: vmand.mm v0, v10, v0
999+ ; VLOPT-NEXT: ret
1000+ %1 = call <vscale x 4 x i1 > @llvm.riscv.vmadc.nxv4i32.i32 (<vscale x 4 x i32 > %a , i32 %c , iXLen -1 )
1001+ %2 = call <vscale x 4 x i1 > @llvm.riscv.vmand.nxv4i1 (<vscale x 4 x i1 > %1 , <vscale x 4 x i1 > %b , iXLen %vl )
1002+ ret <vscale x 4 x i1 > %2
1003+ }
1004+
1005+ define <vscale x 4 x i1 > @vmadc_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i1 > %b , <vscale x 4 x i32 > %c , iXLen %vl ) {
1006+ ; NOVLOPT-LABEL: vmadc_vv:
1007+ ; NOVLOPT: # %bb.0:
1008+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1009+ ; NOVLOPT-NEXT: vmadc.vv v12, v8, v10
1010+ ; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1011+ ; NOVLOPT-NEXT: vmand.mm v0, v12, v0
1012+ ; NOVLOPT-NEXT: ret
1013+ ;
1014+ ; VLOPT-LABEL: vmadc_vv:
1015+ ; VLOPT: # %bb.0:
1016+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1017+ ; VLOPT-NEXT: vmadc.vv v12, v8, v10
1018+ ; VLOPT-NEXT: vmand.mm v0, v12, v0
1019+ ; VLOPT-NEXT: ret
1020+ %1 = call <vscale x 4 x i1 > @llvm.riscv.vmadc.nxv4i32.nxv4i32 (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %c , iXLen -1 )
1021+ %2 = call <vscale x 4 x i1 > @llvm.riscv.vmand.nxv4i1 (<vscale x 4 x i1 > %1 , <vscale x 4 x i1 > %b , iXLen %vl )
1022+ ret <vscale x 4 x i1 > %2
1023+ }
1024+
1025+ define <vscale x 4 x i1 > @vmsbc_vx (<vscale x 4 x i32 > %a , <vscale x 4 x i1 > %b , i32 %c , iXLen %vl ) {
1026+ ; NOVLOPT-LABEL: vmsbc_vx:
1027+ ; NOVLOPT: # %bb.0:
1028+ ; NOVLOPT-NEXT: vsetvli a2, zero, e32, m2, ta, ma
1029+ ; NOVLOPT-NEXT: vmsbc.vx v10, v8, a0
1030+ ; NOVLOPT-NEXT: vsetvli zero, a1, e8, mf2, ta, ma
1031+ ; NOVLOPT-NEXT: vmand.mm v0, v10, v0
1032+ ; NOVLOPT-NEXT: ret
1033+ ;
1034+ ; VLOPT-LABEL: vmsbc_vx:
1035+ ; VLOPT: # %bb.0:
1036+ ; VLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1037+ ; VLOPT-NEXT: vmsbc.vx v10, v8, a0
1038+ ; VLOPT-NEXT: vmand.mm v0, v10, v0
1039+ ; VLOPT-NEXT: ret
1040+ %1 = call <vscale x 4 x i1 > @llvm.riscv.vmsbc.nxv4i32.i32 (<vscale x 4 x i32 > %a , i32 %c , iXLen -1 )
1041+ %2 = call <vscale x 4 x i1 > @llvm.riscv.vmand.nxv4i1 (<vscale x 4 x i1 > %1 , <vscale x 4 x i1 > %b , iXLen %vl )
1042+ ret <vscale x 4 x i1 > %2
1043+ }
1044+
1045+ define <vscale x 4 x i1 > @vmsbc_vv (<vscale x 4 x i32 > %a , <vscale x 4 x i1 > %b , <vscale x 4 x i32 > %c , iXLen %vl ) {
1046+ ; NOVLOPT-LABEL: vmsbc_vv:
1047+ ; NOVLOPT: # %bb.0:
1048+ ; NOVLOPT-NEXT: vsetvli a1, zero, e32, m2, ta, ma
1049+ ; NOVLOPT-NEXT: vmsbc.vv v12, v8, v10
1050+ ; NOVLOPT-NEXT: vsetvli zero, a0, e8, mf2, ta, ma
1051+ ; NOVLOPT-NEXT: vmand.mm v0, v12, v0
1052+ ; NOVLOPT-NEXT: ret
1053+ ;
1054+ ; VLOPT-LABEL: vmsbc_vv:
1055+ ; VLOPT: # %bb.0:
1056+ ; VLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1057+ ; VLOPT-NEXT: vmsbc.vv v12, v8, v10
1058+ ; VLOPT-NEXT: vmand.mm v0, v12, v0
1059+ ; VLOPT-NEXT: ret
1060+ %1 = call <vscale x 4 x i1 > @llvm.riscv.vmsbc.nxv4i32.nxv4i32 (<vscale x 4 x i32 > %a , <vscale x 4 x i32 > %c , iXLen -1 )
1061+ %2 = call <vscale x 4 x i1 > @llvm.riscv.vmand.nxv4i1 (<vscale x 4 x i1 > %1 , <vscale x 4 x i1 > %b , iXLen %vl )
1062+ ret <vscale x 4 x i1 > %2
1063+ }
1064+
9651065define <vscale x 4 x i16 > @vnsrl_wi (<vscale x 4 x i32 > %a , <vscale x 4 x i16 > %b , iXLen %vl ) {
9661066; NOVLOPT-LABEL: vnsrl_wi:
9671067; NOVLOPT: # %bb.0:
0 commit comments