@@ -214,6 +214,8 @@ defm PseudoVCPOP : VPseudoUnaryV_V;
214
214
defm PseudoVROL : VPseudoVALU_VV_VX;
215
215
defm PseudoVROR : VPseudoVALU_VV_VX_VI<uimm6>;
216
216
217
+ defm PseudoVWSLL : VPseudoVWALU_VV_VX_VI<uimm5>;
218
+
217
219
//===----------------------------------------------------------------------===//
218
220
// SDNode patterns
219
221
//===----------------------------------------------------------------------===//
@@ -288,6 +290,35 @@ foreach vti = AllIntegerVectors in {
288
290
}
289
291
defm : VPatBinarySDNode_VV_VX_VI<rotr, "PseudoVROR", uimm6>;
290
292
293
+ foreach vtiToWti = AllWidenableIntVectors in {
294
+ defvar vti = vtiToWti.Vti;
295
+ defvar wti = vtiToWti.Wti;
296
+ let Predicates = !listconcat([HasStdExtZvbb],
297
+ GetVTypePredicates<vti>.Predicates,
298
+ GetVTypePredicates<wti>.Predicates) in {
299
+ def : Pat<(shl (wti.Vector (zext_oneuse (vti.Vector vti.RegClass:$rs2))),
300
+ (wti.Vector (ext_oneuse (vti.Vector vti.RegClass:$rs1)))),
301
+ (!cast<Instruction>("PseudoVWSLL_VV_"#vti.LMul.MX)
302
+ (wti.Vector (IMPLICIT_DEF)),
303
+ vti.RegClass:$rs2, vti.RegClass:$rs1,
304
+ vti.AVL, vti.Log2SEW, TA_MA)>;
305
+
306
+ def : Pat<(shl (wti.Vector (zext_oneuse (vti.Vector vti.RegClass:$rs2))),
307
+ (wti.Vector (Low8BitsSplatPat (XLenVT GPR:$rs1)))),
308
+ (!cast<Instruction>("PseudoVWSLL_VX_"#vti.LMul.MX)
309
+ (wti.Vector (IMPLICIT_DEF)),
310
+ vti.RegClass:$rs2, GPR:$rs1,
311
+ vti.AVL, vti.Log2SEW, TA_MA)>;
312
+
313
+ def : Pat<(shl (wti.Vector (zext_oneuse (vti.Vector vti.RegClass:$rs2))),
314
+ (wti.Vector (SplatPat_uimm5 uimm5:$rs1))),
315
+ (!cast<Instruction>("PseudoVWSLL_VI_"#vti.LMul.MX)
316
+ (wti.Vector (IMPLICIT_DEF)),
317
+ vti.RegClass:$rs2, uimm5:$rs1,
318
+ vti.AVL, vti.Log2SEW, TA_MA)>;
319
+ }
320
+ }
321
+
291
322
//===----------------------------------------------------------------------===//
292
323
// VL patterns
293
324
//===----------------------------------------------------------------------===//
0 commit comments