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
+73-21Lines changed: 73 additions & 21 deletions
Original file line number
Diff line number
Diff line change
@@ -1164,48 +1164,100 @@ define <vscale x 4 x i32> @vwmacc_vx(<vscale x 4 x i32> %a, i16 %b, <vscale x 4
1164
1164
ret <vscale x 4 x i32> %2
1165
1165
}
1166
1166
1167
-
define <vscale x 4 x i32> @vwmaccu_vv(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen %vl) {
1168
-
; NOVLOPT-LABEL: vwmaccu_vv:
1167
+
define <vscale x 4 x i64> @vwmaccu_vv_nopropagate(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, <vscale x 4 x i64> %d, iXLen %vl) {
1168
+
; NOVLOPT-LABEL: vwmaccu_vv_nopropagate:
1169
1169
; NOVLOPT: # %bb.0:
1170
+
; NOVLOPT-NEXT: vmv2r.v v16, v8
1170
1171
; NOVLOPT-NEXT: vsetvli a1, zero, e16, m1, tu, ma
1171
-
; NOVLOPT-NEXT: vwmaccu.vv v8, v10, v11
1172
-
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, ta, ma
1173
-
; NOVLOPT-NEXT: vadd.vv v8, v8, v8
1172
+
; NOVLOPT-NEXT: vwmaccu.vv v16, v10, v11
1173
+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, tu, ma
1174
+
; NOVLOPT-NEXT: vwmaccu.vv v12, v16, v8
1175
+
; NOVLOPT-NEXT: vmv4r.v v8, v12
1176
+
; NOVLOPT-NEXT: ret
1177
+
;
1178
+
; VLOPT-LABEL: vwmaccu_vv_nopropagate:
1179
+
; VLOPT: # %bb.0:
1180
+
; VLOPT-NEXT: vmv2r.v v16, v8
1181
+
; VLOPT-NEXT: vsetvli a1, zero, e16, m1, tu, ma
1182
+
; VLOPT-NEXT: vwmaccu.vv v16, v10, v11
1183
+
; VLOPT-NEXT: vsetvli zero, a0, e32, m2, tu, ma
1184
+
; VLOPT-NEXT: vwmaccu.vv v12, v16, v8
1185
+
; VLOPT-NEXT: vmv4r.v v8, v12
1186
+
; VLOPT-NEXT: ret
1187
+
%1 = call <vscale x 4 x i32> @llvm.riscv.vwmaccu.nxv4i32.nxv4i16(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen -1, iXLen 0)
1188
+
%2 = call <vscale x 4 x i64> @llvm.riscv.vwmaccu.nxv4i64.nxv4i32(<vscale x 4 x i64> %d, <vscale x 4 x i32> %1, <vscale x 4 x i32> %a, iXLen %vl, iXLen 0)
1189
+
ret <vscale x 4 x i64> %2
1190
+
}
1191
+
1192
+
define <vscale x 4 x i64> @vwmaccu_vv_propagate(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, <vscale x 4 x i64> %d, iXLen %vl) {
1193
+
; NOVLOPT-LABEL: vwmaccu_vv_propagate:
1194
+
; NOVLOPT: # %bb.0:
1195
+
; NOVLOPT-NEXT: vmv2r.v v16, v8
1196
+
; NOVLOPT-NEXT: vsetvli a1, zero, e16, m1, tu, ma
1197
+
; NOVLOPT-NEXT: vwmaccu.vv v16, v10, v11
1198
+
; NOVLOPT-NEXT: vsetvli zero, a0, e32, m2, tu, ma
1199
+
; NOVLOPT-NEXT: vwmaccu.vv v12, v8, v16
1200
+
; NOVLOPT-NEXT: vmv4r.v v8, v12
1174
1201
; NOVLOPT-NEXT: ret
1175
1202
;
1176
-
; VLOPT-LABEL: vwmaccu_vv:
1203
+
; VLOPT-LABEL: vwmaccu_vv_propagate:
1177
1204
; VLOPT: # %bb.0:
1205
+
; VLOPT-NEXT: vmv2r.v v16, v8
1178
1206
; VLOPT-NEXT: vsetvli zero, a0, e16, m1, tu, ma
1179
-
; VLOPT-NEXT: vwmaccu.vv v8, v10, v11
1180
-
; VLOPT-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1181
-
; VLOPT-NEXT: vadd.vv v8, v8, v8
1207
+
; VLOPT-NEXT: vwmaccu.vv v16, v10, v11
1208
+
; VLOPT-NEXT: vsetvli zero, zero, e32, m2, tu, ma
1209
+
; VLOPT-NEXT: vwmaccu.vv v12, v8, v16
1210
+
; VLOPT-NEXT: vmv4r.v v8, v12
1182
1211
; VLOPT-NEXT: ret
1183
1212
%1 = call <vscale x 4 x i32> @llvm.riscv.vwmaccu.nxv4i32.nxv4i16(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen -1, iXLen 0)
1184
-
%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> %1, iXLen %vl)
1185
-
ret <vscale x 4 x i32> %2
1213
+
%2 = call <vscale x 4 x i64> @llvm.riscv.vwmaccu.nxv4i64.nxv4i32(<vscale x 4 x i64> %d, <vscale x 4 x i32> %a, <vscale x 4 x i32> %1, iXLen %vl, iXLen 0)
1214
+
ret <vscale x 4 x i64> %2
1186
1215
}
1187
1216
1188
-
define <vscale x 4 x i32> @vwmaccu_vx(<vscale x 4 x i32> %a, i16%b, <vscale x 4 x i16> %c, iXLen %vl) {
1189
-
; NOVLOPT-LABEL: vwmaccu_vx:
1217
+
define <vscale x 4 x i32> @vwmaccu_vx_nopropagate(<vscale x 4 x i32> %a, i16%b, <vscale x 4 x i16> %c, <vscale x 4 x i16> %d, i16%e, iXLen %vl) {
1218
+
; NOVLOPT-LABEL: vwmaccu_vx_nopropagate:
1190
1219
; NOVLOPT: # %bb.0:
1191
-
; NOVLOPT-NEXT: vsetvli a2, zero, e16, m1, tu, ma
1220
+
; NOVLOPT-NEXT: vsetvli a3, zero, e16, m1, tu, ma
1192
1221
; NOVLOPT-NEXT: vwmaccu.vx v8, a0, v10
1193
-
; NOVLOPT-NEXT: vsetvli zero, a1, e32, m2, ta, ma
1194
-
; NOVLOPT-NEXT: vadd.vv v8, v8, v8
1222
+
; NOVLOPT-NEXT: vsetvli zero, a2, e16, m1, tu, ma
1223
+
; NOVLOPT-NEXT: vwmaccu.vx v8, a1, v11
1195
1224
; NOVLOPT-NEXT: ret
1196
1225
;
1197
-
; VLOPT-LABEL: vwmaccu_vx:
1226
+
; VLOPT-LABEL: vwmaccu_vx_nopropagate:
1198
1227
; VLOPT: # %bb.0:
1199
-
; VLOPT-NEXT: vsetvli zero, a1, e16, m1, tu, ma
1228
+
; VLOPT-NEXT: vsetvli a3, zero, e16, m1, tu, ma
1200
1229
; VLOPT-NEXT: vwmaccu.vx v8, a0, v10
1201
-
; VLOPT-NEXT: vsetvli zero, zero, e32, m2, ta, ma
1202
-
; VLOPT-NEXT: vadd.vv v8, v8, v8
1230
+
; VLOPT-NEXT: vsetvli zero, a2, e16, m1, tu, ma
1231
+
; VLOPT-NEXT: vwmaccu.vx v8, a1, v11
1203
1232
; VLOPT-NEXT: ret
1204
1233
%1 = call <vscale x 4 x i32> @llvm.riscv.vwmaccu.nxv4i32.i16(<vscale x 4 x i32> %a, i16%b, <vscale x 4 x i16> %c, iXLen -1, iXLen 0)
1205
-
%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> %1, iXLen %vl)
1234
+
%2 = call <vscale x 4 x i32> @llvm.riscv.vwmaccu.nxv4i32.i16(<vscale x 4 x i32> %1, i16%e, <vscale x 4 x i16> %d, iXLen %vl, iXLen 0)
1206
1235
ret <vscale x 4 x i32> %2
1207
1236
}
1208
1237
1238
+
define <vscale x 4 x i64> @vwmaccu_vx_propagate(<vscale x 4 x i32> %a, i16%b, <vscale x 4 x i16> %c, <vscale x 4 x i64> %d, i32%e, iXLen %vl) {
1239
+
; NOVLOPT-LABEL: vwmaccu_vx_propagate:
1240
+
; NOVLOPT: # %bb.0:
1241
+
; NOVLOPT-NEXT: vsetvli a3, zero, e16, m1, tu, ma
1242
+
; NOVLOPT-NEXT: vwmaccu.vx v8, a0, v10
1243
+
; NOVLOPT-NEXT: vsetvli zero, a2, e32, m2, tu, ma
1244
+
; NOVLOPT-NEXT: vwmaccu.vx v12, a1, v8
1245
+
; NOVLOPT-NEXT: vmv4r.v v8, v12
1246
+
; NOVLOPT-NEXT: ret
1247
+
;
1248
+
; VLOPT-LABEL: vwmaccu_vx_propagate:
1249
+
; VLOPT: # %bb.0:
1250
+
; VLOPT-NEXT: vsetvli zero, a2, e16, m1, tu, ma
1251
+
; VLOPT-NEXT: vwmaccu.vx v8, a0, v10
1252
+
; VLOPT-NEXT: vsetvli zero, zero, e32, m2, tu, ma
1253
+
; VLOPT-NEXT: vwmaccu.vx v12, a1, v8
1254
+
; VLOPT-NEXT: vmv4r.v v8, v12
1255
+
; VLOPT-NEXT: ret
1256
+
%1 = call <vscale x 4 x i32> @llvm.riscv.vwmaccu.nxv4i32.i16(<vscale x 4 x i32> %a, i16%b, <vscale x 4 x i16> %c, iXLen -1, iXLen 0)
1257
+
%2 = call <vscale x 4 x i64> @llvm.riscv.vwmaccu.nxv4i64.i32(<vscale x 4 x i64> %d, i32%e, <vscale x 4 x i32> %1, iXLen %vl, iXLen 0)
1258
+
ret <vscale x 4 x i64> %2
1259
+
}
1260
+
1209
1261
define <vscale x 4 x i32> @vwmaccsu_vv(<vscale x 4 x i32> %a, <vscale x 4 x i16> %b, <vscale x 4 x i16> %c, iXLen %vl) {
0 commit comments