[PATCH] D144925: [RISCV][NFC] Expand pseudos with sew for instructions that depend on lmul

Michael Maitland via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 27 17:02:23 PST 2023


michaelmaitland added inline comments.


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:1919
+
+        defvar suffix = "_" # m.MX # "_E" # e;
+        def _VM # suffix : VPseudoUnaryAnyMask<m.vrclass, m.vrclass>,
----------------
If we're going to use suffix, should we use it in `WriteVCompressV_MX_E` and `ReadVCompressV_MX_E` too?


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:2041-2061
   foreach m = MxList in {
     defvar mx = m.MX;
-    defvar WriteVGatherV_MX = !cast<SchedWrite>("WriteVGatherV_" # mx);
-    defvar ReadVGatherV_MX = !cast<SchedRead>("ReadVGatherV_" # mx);
 
     foreach sew = EEWList in {
       defvar octuple_lmul = m.octuple;
       // emul = lmul * eew / sew
       defvar octuple_emul = !srl(!mul(octuple_lmul, eew), log2<sew>.val);
----------------
`WriteVGatherV_MX_E` and `ReadVGatherV_MX_E` dont depend on `sew` from `EEWList`. Can we pull out the loop over `sews` from `SchedSEWSet<mx>.val` to simplify?


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:2337
+        defvar ReadVFSqrtV_MX = !cast<SchedRead>("ReadVFSqrtV_" # mx # "_E" # e);
+        defvar suffix = mx # "_E" # e;
+
----------------
Use `suffix` in `WriteVFSqrtV_MX` and `ReadVFSqrtV_MX`. Also need to add `_E` to  `WriteVFSqrtV_MX` and `ReadVFSqrtV_MX`


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:2350
 
+// TODO: Should I make this SEW aware?
 multiclass VPseudoVRCP_V {
----------------
Where did you land on making this SEW aware?


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:2468
     defvar mx = m.MX;
-    defvar WriteVGatherV_MX = !cast<SchedWrite>("WriteVGatherV_" # mx);
+    defvar sews = SchedSEWSet<mx>.val;
     defvar WriteVGatherX_MX = !cast<SchedWrite>("WriteVGatherX_" # mx);
----------------
nit: define `sews` closer to where you use it?


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:2472
     defvar ReadVGatherX_MX = !cast<SchedRead>("ReadVGatherX_" # mx);
+    defvar ReadVGatherI_MX = !cast<SchedRead>("ReadVGatherI_" # mx);
 
----------------
Why did we change `ReadVGatherV` to `ReadVGatherI`?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D144925/new/

https://reviews.llvm.org/D144925



More information about the llvm-commits mailing list