@@ -1352,7 +1352,7 @@ multiclass PatShiftVrVr<SDPatternOperator OpNode, string Inst> {
1352
1352
(!cast<LAInst>(Inst#"_D") LSX128:$vj, LSX128:$vk)>;
1353
1353
}
1354
1354
1355
- multiclass PatShiftVrUimm <SDPatternOperator OpNode, string Inst> {
1355
+ multiclass PatShiftVrSplatUimm <SDPatternOperator OpNode, string Inst> {
1356
1356
def : Pat<(OpNode (v16i8 LSX128:$vj), (v16i8 (SplatPat_uimm3 uimm3:$imm))),
1357
1357
(!cast<LAInst>(Inst#"_B") LSX128:$vj, uimm3:$imm)>;
1358
1358
def : Pat<(OpNode (v8i16 LSX128:$vj), (v8i16 (SplatPat_uimm4 uimm4:$imm))),
@@ -1363,6 +1363,17 @@ multiclass PatShiftVrUimm<SDPatternOperator OpNode, string Inst> {
1363
1363
(!cast<LAInst>(Inst#"_D") LSX128:$vj, uimm6:$imm)>;
1364
1364
}
1365
1365
1366
+ multiclass PatShiftVrUimm<SDPatternOperator OpNode, string Inst> {
1367
+ def : Pat<(OpNode(v16i8 LSX128:$vj), uimm3:$imm),
1368
+ (!cast<LAInst>(Inst#"_B") LSX128:$vj, uimm3:$imm)>;
1369
+ def : Pat<(OpNode(v8i16 LSX128:$vj), uimm4:$imm),
1370
+ (!cast<LAInst>(Inst#"_H") LSX128:$vj, uimm4:$imm)>;
1371
+ def : Pat<(OpNode(v4i32 LSX128:$vj), uimm5:$imm),
1372
+ (!cast<LAInst>(Inst#"_W") LSX128:$vj, uimm5:$imm)>;
1373
+ def : Pat<(OpNode(v2i64 LSX128:$vj), uimm6:$imm),
1374
+ (!cast<LAInst>(Inst#"_D") LSX128:$vj, uimm6:$imm)>;
1375
+ }
1376
+
1366
1377
multiclass PatCCVrSimm5<CondCode CC, string Inst> {
1367
1378
def : Pat<(v16i8 (setcc (v16i8 LSX128:$vj),
1368
1379
(v16i8 (SplatPat_simm5 simm5:$imm)), CC)),
@@ -1501,63 +1512,31 @@ def : Pat<(xor (v16i8 LSX128:$vj), (v16i8 (SplatPat_uimm8 uimm8:$imm))),
1501
1512
(VXORI_B LSX128:$vj, uimm8:$imm)>;
1502
1513
1503
1514
// VBSLL_V
1504
- def : Pat<(loongarch_vbsll v16i8:$vj, uimm5:$imm), (VBSLL_V v16i8:$vj,
1505
- uimm5:$imm)>;
1506
- def : Pat<(loongarch_vbsll v8i16:$vj, uimm5:$imm), (VBSLL_V v8i16:$vj,
1507
- uimm5:$imm)>;
1508
- def : Pat<(loongarch_vbsll v4i32:$vj, uimm5:$imm), (VBSLL_V v4i32:$vj,
1509
- uimm5:$imm)>;
1510
- def : Pat<(loongarch_vbsll v2i64:$vj, uimm5:$imm), (VBSLL_V v2i64:$vj,
1511
- uimm5:$imm)>;
1512
- def : Pat<(loongarch_vbsll v4f32:$vj, uimm5:$imm), (VBSLL_V v4f32:$vj,
1513
- uimm5:$imm)>;
1514
- def : Pat<(loongarch_vbsll v2f64:$vj, uimm5:$imm), (VBSLL_V v2f64:$vj,
1515
- uimm5:$imm)>;
1515
+ foreach vt = [v16i8, v8i16, v4i32, v2i64, v4f32,
1516
+ v2f64] in def : Pat<(loongarch_vbsll(vt LSX128:$vj), uimm5:$imm),
1517
+ (VBSLL_V LSX128:$vj, uimm5:$imm)>;
1516
1518
1517
1519
// VBSRL_V
1518
- def : Pat<(loongarch_vbsrl v16i8:$vj, uimm5:$imm), (VBSRL_V v16i8:$vj,
1519
- uimm5:$imm)>;
1520
- def : Pat<(loongarch_vbsrl v8i16:$vj, uimm5:$imm), (VBSRL_V v8i16:$vj,
1521
- uimm5:$imm)>;
1522
- def : Pat<(loongarch_vbsrl v4i32:$vj, uimm5:$imm), (VBSRL_V v4i32:$vj,
1523
- uimm5:$imm)>;
1524
- def : Pat<(loongarch_vbsrl v2i64:$vj, uimm5:$imm), (VBSRL_V v2i64:$vj,
1525
- uimm5:$imm)>;
1526
- def : Pat<(loongarch_vbsrl v4f32:$vj, uimm5:$imm), (VBSRL_V v4f32:$vj,
1527
- uimm5:$imm)>;
1528
- def : Pat<(loongarch_vbsrl v2f64:$vj, uimm5:$imm), (VBSRL_V v2f64:$vj,
1529
- uimm5:$imm)>;
1520
+ foreach vt = [v16i8, v8i16, v4i32, v2i64, v4f32,
1521
+ v2f64] in def : Pat<(loongarch_vbsrl(vt LSX128:$vj), uimm5:$imm),
1522
+ (VBSRL_V LSX128:$vj, uimm5:$imm)>;
1530
1523
1531
1524
// VSLL[I]_{B/H/W/D}
1532
1525
defm : PatVrVr<shl, "VSLL">;
1533
1526
defm : PatShiftVrVr<shl, "VSLL">;
1534
- defm : PatShiftVrUimm<shl, "VSLLI">;
1535
- def : Pat<(loongarch_vslli v16i8:$vj, uimm3:$imm), (VSLLI_B v16i8:$vj,
1536
- uimm3:$imm)>;
1537
- def : Pat<(loongarch_vslli v8i16:$vj, uimm4:$imm), (VSLLI_H v8i16:$vj,
1538
- uimm4:$imm)>;
1539
- def : Pat<(loongarch_vslli v4i32:$vj, uimm5:$imm), (VSLLI_W v4i32:$vj,
1540
- uimm5:$imm)>;
1541
- def : Pat<(loongarch_vslli v2i64:$vj, uimm6:$imm), (VSLLI_D v2i64:$vj,
1542
- uimm6:$imm)>;
1527
+ defm : PatShiftVrSplatUimm<shl, "VSLLI">;
1528
+ defm : PatShiftVrUimm<loongarch_vslli, "VSLLI">;
1543
1529
1544
1530
// VSRL[I]_{B/H/W/D}
1545
1531
defm : PatVrVr<srl, "VSRL">;
1546
1532
defm : PatShiftVrVr<srl, "VSRL">;
1547
- defm : PatShiftVrUimm<srl, "VSRLI">;
1548
- def : Pat<(loongarch_vsrli v16i8:$vj, uimm3:$imm), (VSRLI_B v16i8:$vj,
1549
- uimm3:$imm)>;
1550
- def : Pat<(loongarch_vsrli v8i16:$vj, uimm4:$imm), (VSRLI_H v8i16:$vj,
1551
- uimm4:$imm)>;
1552
- def : Pat<(loongarch_vsrli v4i32:$vj, uimm5:$imm), (VSRLI_W v4i32:$vj,
1553
- uimm5:$imm)>;
1554
- def : Pat<(loongarch_vsrli v2i64:$vj, uimm6:$imm), (VSRLI_D v2i64:$vj,
1555
- uimm6:$imm)>;
1533
+ defm : PatShiftVrSplatUimm<srl, "VSRLI">;
1534
+ defm : PatShiftVrUimm<loongarch_vsrli, "VSRLI">;
1556
1535
1557
1536
// VSRA[I]_{B/H/W/D}
1558
1537
defm : PatVrVr<sra, "VSRA">;
1559
1538
defm : PatShiftVrVr<sra, "VSRA">;
1560
- defm : PatShiftVrUimm <sra, "VSRAI">;
1539
+ defm : PatShiftVrSplatUimm <sra, "VSRAI">;
1561
1540
1562
1541
// VCLZ_{B/H/W/D}
1563
1542
defm : PatVr<ctlz, "VCLZ">;
0 commit comments