@@ -962,6 +962,106 @@ define <vscale x 4 x i64> @vzext_vf8(<vscale x 4 x i8> %a, <vscale x 4 x i64> %b
962
962
ret <vscale x 4 x i64 > %2
963
963
}
964
964
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
+
965
1065
define <vscale x 4 x i16 > @vnsrl_wi (<vscale x 4 x i32 > %a , <vscale x 4 x i16 > %b , iXLen %vl ) {
966
1066
; NOVLOPT-LABEL: vnsrl_wi:
967
1067
; NOVLOPT: # %bb.0:
0 commit comments