You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: llvm/test/CodeGen/RISCV/rvv/vl-opt-instrs.ll
+101Lines changed: 101 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -982,6 +982,107 @@ define <vscale x 4 x i16> @vnsrl_wi(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b
982
982
ret <vscale x 4 x i16> %2
983
983
}
984
984
985
+
define <vscale x 4 x i16> @vnsrl_wx(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, iXLen %c, iXLen %vl) {
986
+
; NOVLOPT-LABEL: vnsrl_wx:
987
+
; NOVLOPT: # %bb.0:
988
+
; NOVLOPT-NEXT: vsetvli a2, zero, e16, m1, ta, ma
989
+
; NOVLOPT-NEXT: vnsrl.wx v11, v8, a0
990
+
; NOVLOPT-NEXT: vsetvli zero, a1, e16, m1, ta, ma
991
+
; NOVLOPT-NEXT: vadd.vv v8, v11, v10
992
+
; NOVLOPT-NEXT: ret
993
+
;
994
+
; VLOPT-LABEL: vnsrl_wx:
995
+
; VLOPT: # %bb.0:
996
+
; VLOPT-NEXT: vsetvli zero, a1, e16, m1, ta, ma
997
+
; VLOPT-NEXT: vnsrl.wx v11, v8, a0
998
+
; VLOPT-NEXT: vadd.vv v8, v11, v10
999
+
; VLOPT-NEXT: ret
1000
+
%1 = call <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32(<vscale x 4 x i16> poison, <vscale x 4 x i32> %a, iXLen %c, iXLen -1)
1001
+
%2 = call <vscale x 4 x i16> @llvm.riscv.vadd.nxv4i16.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i16> %1, <vscale x 4 x i16> %b, iXLen %vl)
1002
+
ret <vscale x 4 x i16> %2
1003
+
}
1004
+
1005
+
define <vscale x 4 x i16> @vnsrl_wv(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen %vl) {
1006
+
; NOVLOPT-LABEL: vnsrl_wv:
1007
+
; NOVLOPT: # %bb.0:
1008
+
; NOVLOPT-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1009
+
; NOVLOPT-NEXT: vnsrl.wv v12, v8, v11
1010
+
; NOVLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1011
+
; NOVLOPT-NEXT: vadd.vv v8, v12, v10
1012
+
; NOVLOPT-NEXT: ret
1013
+
;
1014
+
; VLOPT-LABEL: vnsrl_wv:
1015
+
; VLOPT: # %bb.0:
1016
+
; VLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1017
+
; VLOPT-NEXT: vnsrl.wv v12, v8, v11
1018
+
; VLOPT-NEXT: vadd.vv v8, v12, v10
1019
+
; VLOPT-NEXT: ret
1020
+
%1 = call <vscale x 4 x i16> @llvm.riscv.vnsrl.nxv4i16.nxv4i32.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i32> %a, <vscale x 4 x i16> %c, iXLen -1)
1021
+
%2 = call <vscale x 4 x i16> @llvm.riscv.vadd.nxv4i16.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i16> %1, <vscale x 4 x i16> %b, iXLen %vl)
1022
+
ret <vscale x 4 x i16> %2
1023
+
}
1024
+
1025
+
define <vscale x 4 x i16> @vnsra_wi(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, iXLen %vl) {
1026
+
; NOVLOPT-LABEL: vnsra_wi:
1027
+
; NOVLOPT: # %bb.0:
1028
+
; NOVLOPT-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1029
+
; NOVLOPT-NEXT: vnsra.wi v11, v8, 5
1030
+
; NOVLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1031
+
; NOVLOPT-NEXT: vadd.vv v8, v11, v10
1032
+
; NOVLOPT-NEXT: ret
1033
+
;
1034
+
; VLOPT-LABEL: vnsra_wi:
1035
+
; VLOPT: # %bb.0:
1036
+
; VLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1037
+
; VLOPT-NEXT: vnsra.wi v11, v8, 5
1038
+
; VLOPT-NEXT: vadd.vv v8, v11, v10
1039
+
; VLOPT-NEXT: ret
1040
+
%1 = call <vscale x 4 x i16> @llvm.riscv.vnsra.nxv4i16.nxv4i32(<vscale x 4 x i16> poison, <vscale x 4 x i32> %a, iXLen 5, iXLen -1)
1041
+
%2 = call <vscale x 4 x i16> @llvm.riscv.vadd.nxv4i16.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i16> %1, <vscale x 4 x i16> %b, iXLen %vl)
1042
+
ret <vscale x 4 x i16> %2
1043
+
}
1044
+
1045
+
define <vscale x 4 x i16> @vnsra_wx(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, iXLen %c, iXLen %vl) {
1046
+
; NOVLOPT-LABEL: vnsra_wx:
1047
+
; NOVLOPT: # %bb.0:
1048
+
; NOVLOPT-NEXT: vsetvli a2, zero, e16, m1, ta, ma
1049
+
; NOVLOPT-NEXT: vnsra.wx v11, v8, a0
1050
+
; NOVLOPT-NEXT: vsetvli zero, a1, e16, m1, ta, ma
1051
+
; NOVLOPT-NEXT: vadd.vv v8, v11, v10
1052
+
; NOVLOPT-NEXT: ret
1053
+
;
1054
+
; VLOPT-LABEL: vnsra_wx:
1055
+
; VLOPT: # %bb.0:
1056
+
; VLOPT-NEXT: vsetvli zero, a1, e16, m1, ta, ma
1057
+
; VLOPT-NEXT: vnsra.wx v11, v8, a0
1058
+
; VLOPT-NEXT: vadd.vv v8, v11, v10
1059
+
; VLOPT-NEXT: ret
1060
+
%1 = call <vscale x 4 x i16> @llvm.riscv.vnsra.nxv4i16.nxv4i32(<vscale x 4 x i16> poison, <vscale x 4 x i32> %a, iXLen %c, iXLen -1)
1061
+
%2 = call <vscale x 4 x i16> @llvm.riscv.vadd.nxv4i16.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i16> %1, <vscale x 4 x i16> %b, iXLen %vl)
1062
+
ret <vscale x 4 x i16> %2
1063
+
}
1064
+
1065
+
define <vscale x 4 x i16> @vnsra_wv(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen %vl) {
1066
+
; NOVLOPT-LABEL: vnsra_wv:
1067
+
; NOVLOPT: # %bb.0:
1068
+
; NOVLOPT-NEXT: vsetvli a1, zero, e16, m1, ta, ma
1069
+
; NOVLOPT-NEXT: vnsra.wv v12, v8, v11
1070
+
; NOVLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1071
+
; NOVLOPT-NEXT: vadd.vv v8, v12, v10
1072
+
; NOVLOPT-NEXT: ret
1073
+
;
1074
+
; VLOPT-LABEL: vnsra_wv:
1075
+
; VLOPT: # %bb.0:
1076
+
; VLOPT-NEXT: vsetvli zero, a0, e16, m1, ta, ma
1077
+
; VLOPT-NEXT: vnsra.wv v12, v8, v11
1078
+
; VLOPT-NEXT: vadd.vv v8, v12, v10
1079
+
; VLOPT-NEXT: ret
1080
+
%1 = call <vscale x 4 x i16> @llvm.riscv.vnsra.nxv4i16.nxv4i32.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i32> %a, <vscale x 4 x i16> %c, iXLen -1)
1081
+
%2 = call <vscale x 4 x i16> @llvm.riscv.vadd.nxv4i16.nxv4i16(<vscale x 4 x i16> poison, <vscale x 4 x i16> %1, <vscale x 4 x i16> %b, iXLen %vl)
1082
+
ret <vscale x 4 x i16> %2
1083
+
}
1084
+
1085
+
985
1086
define <vscale x 4 x i32> @vminu_vv(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b, iXLen %vl) {
0 commit comments