[PATCH] D123274: [RISCV][NFC] Refactor VL patterns for vnsrl and vnsra
WangLian via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 14 01:44:29 PDT 2022
Jimerlife updated this revision to Diff 422770.
Jimerlife added a comment.
address comments
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D123274/new/
https://reviews.llvm.org/D123274
Files:
llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
Index: llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
===================================================================
--- llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
+++ llvm/lib/Target/RISCV/RISCVInstrInfoVVLPatterns.td
@@ -861,7 +861,7 @@
foreach vtiTowti = AllWidenableIntVectors in {
defvar vti = vtiTowti.Vti;
defvar wti = vtiTowti.Wti;
- def : Pat<(wti.Vector
+ def : Pat<(wti.Vector
(riscv_add_vl wti.RegClass:$rd,
(op1 vti.RegClass:$rs1,
(vti.Vector vti.RegClass:$rs2),
@@ -882,6 +882,23 @@
}
}
+multiclass VPatNarrowShiftSplat_WX_WI<SDNode op, string instruction_name> {
+ foreach vtiTowti = AllWidenableIntVectors in {
+ defvar vti = vtiTowti.Vti;
+ defvar wti = vtiTowti.Wti;
+ def : Pat<(vti.Vector (riscv_trunc_vector_vl
+ (wti.Vector (op wti.RegClass:$rs1, (SplatPat XLenVT:$rs2),
+ true_mask, VLOpFrag)), true_mask, VLOpFrag)),
+ (!cast<Instruction>(instruction_name#"_WX_"#vti.LMul.MX)
+ wti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW)>;
+ def : Pat<(vti.Vector (riscv_trunc_vector_vl
+ (wti.Vector (op wti.RegClass:$rs1, (SplatPat_uimm5 uimm5:$rs2),
+ true_mask, VLOpFrag)), true_mask, VLOpFrag)),
+ (!cast<Instruction>(instruction_name#"_WI_"#vti.LMul.MX)
+ wti.RegClass:$rs1, uimm5:$rs2, GPR:$vl, vti.Log2SEW)>;
+ }
+}
+
//===----------------------------------------------------------------------===//
// Patterns.
//===----------------------------------------------------------------------===//
@@ -952,6 +969,13 @@
defm : VPatBinarySDNode_V_WV_WX_WI<srl, "PseudoVNSRL">;
defm : VPatBinarySDNode_V_WV_WX_WI<sra, "PseudoVNSRA">;
+defm : VPatNarrowShiftSplat_WX_WI<riscv_sra_vl, "PseudoVNSRA">;
+defm : VPatNarrowShiftSplat_WX_WI<riscv_srl_vl, "PseudoVNSRL">;
+defm : VPatNarrowShiftSplatExt_WX<riscv_sra_vl, riscv_sext_vl_oneuse, "PseudoVNSRA">;
+defm : VPatNarrowShiftSplatExt_WX<riscv_sra_vl, riscv_zext_vl_oneuse, "PseudoVNSRA">;
+defm : VPatNarrowShiftSplatExt_WX<riscv_srl_vl, riscv_sext_vl_oneuse, "PseudoVNSRL">;
+defm : VPatNarrowShiftSplatExt_WX<riscv_srl_vl, riscv_zext_vl_oneuse, "PseudoVNSRL">;
+
foreach vtiTowti = AllWidenableIntVectors in {
defvar vti = vtiTowti.Vti;
defvar wti = vtiTowti.Wti;
@@ -966,39 +990,6 @@
(!cast<Instruction>("PseudoVNSRL_WX_"#vti.LMul.MX#"_MASK")
(vti.Vector (IMPLICIT_DEF)), wti.RegClass:$rs1, X0,
(vti.Mask V0), GPR:$vl, vti.Log2SEW, TAIL_AGNOSTIC)>;
-
- def : Pat<(vti.Vector
- (riscv_trunc_vector_vl
- (wti.Vector
- (riscv_sra_vl wti.RegClass:$rs1, (SplatPat XLenVT:$rs2),
- true_mask, VLOpFrag)), true_mask, VLOpFrag)),
- (!cast<Instruction>("PseudoVNSRA_WX_"#vti.LMul.MX)
- wti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW)>;
- defm : VPatNarrowShiftSplatExt_WX<riscv_sra_vl, riscv_sext_vl_oneuse, "PseudoVNSRA">;
- defm : VPatNarrowShiftSplatExt_WX<riscv_sra_vl, riscv_zext_vl_oneuse, "PseudoVNSRA">;
- def : Pat<(vti.Vector
- (riscv_trunc_vector_vl
- (wti.Vector
- (riscv_sra_vl wti.RegClass:$rs1, (SplatPat_uimm5 uimm5:$rs2),
- true_mask, VLOpFrag)), true_mask, VLOpFrag)),
- (!cast<Instruction>("PseudoVNSRA_WI_"#vti.LMul.MX)
- wti.RegClass:$rs1, uimm5:$rs2, GPR:$vl, vti.Log2SEW)>;
- def : Pat<(vti.Vector
- (riscv_trunc_vector_vl
- (wti.Vector
- (riscv_srl_vl wti.RegClass:$rs1, (SplatPat XLenVT:$rs2),
- true_mask, VLOpFrag)), true_mask, VLOpFrag)),
- (!cast<Instruction>("PseudoVNSRL_WX_"#vti.LMul.MX)
- wti.RegClass:$rs1, GPR:$rs2, GPR:$vl, vti.Log2SEW)>;
- defm : VPatNarrowShiftSplatExt_WX<riscv_srl_vl, riscv_sext_vl_oneuse, "PseudoVNSRL">;
- defm : VPatNarrowShiftSplatExt_WX<riscv_srl_vl, riscv_zext_vl_oneuse, "PseudoVNSRL">;
- def : Pat<(vti.Vector
- (riscv_trunc_vector_vl
- (wti.Vector
- (riscv_srl_vl wti.RegClass:$rs1, (SplatPat_uimm5 uimm5:$rs2),
- true_mask, VLOpFrag)), true_mask, VLOpFrag)),
- (!cast<Instruction>("PseudoVNSRL_WI_"#vti.LMul.MX)
- wti.RegClass:$rs1, uimm5:$rs2, GPR:$vl, vti.Log2SEW)>;
}
// 12.8. Vector Integer Comparison Instructions
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123274.422770.patch
Type: text/x-patch
Size: 4574 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220414/cb65dce2/attachment.bin>
More information about the llvm-commits
mailing list