[PATCH] D117561: [RISCV][VP] Lower VP_MERGE to RVV instructions

Fraser Cormack via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 21 07:09:17 PST 2022


frasercrmck marked 6 inline comments as done.
frasercrmck added inline comments.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.h:253
 
+  // Vector select with a tied operand and additional VL operand. This
+  // operation is unmasked.
----------------
craig.topper wrote:
> Say which operand is tied
Done.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.h:255
+  // operation is unmasked.
+  VMERGE_VL,
   // Vector select with an additional VL operand. This operation is unmasked.
----------------
craig.topper wrote:
> frasercrmck wrote:
> > craig.topper wrote:
> > > This is an unfortunate name collision with the RVV instruction. While also having weird constraints. Maybe VPMERGE_VL or VP_MERGE_VL would be slightly better?
> > Yeah totally. I also considered making `VSELECT_VL` take a merge operand which means we can share a node for vp.merge, vp.select and vselect. I don't know if that's too intrusive into areas where a merge operand doesn't make sense, though. We'd probably need a policy operand, too... What do you think? 
> I think its ok to keep them separate for now.
`VP_MERGE_VL` it is.


================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td:1085
 
+class VPseudoTiedBinaryCarryIn<VReg RetClass,
+                               VReg Op1Class,
----------------
craig.topper wrote:
> frasercrmck wrote:
> > craig.topper wrote:
> > > craig.topper wrote:
> > > > Does it really need to tied or can we have a _TU instruction and pass the false value to two operands in the pattern match?
> > > Let me rephrase that. We obviously need an operand that is tied. But it doesn't need to be the same as $rs2. We can assign $rs2 and the merge operand to the same src in the pattern.
> > > 
> > > But I guess we don't have the concept of _TU instructions until https://reviews.llvm.org/D117647
> > Yeah that would work too. Are we really dependent on that patch or can we have a `HasMergeOp = 1` in conjunction `HasVecPolicyOp = 1` where we pass along `TAIL_UNDISTURBED`? Or is it then that we don't really have a suffix to convey that: `_TIED` isn't quite right and `_MASK` isn't either since `vmerge` isn't "masked", in that sense?
> I think you can use `_TU` and take the change PseudoToVInst from D117647
> 
> Add the extra tied source operand and use `HasMergeOp = 1` and `HasVecPolicyOp = 0`. We don't need a policy op since the tied source being undef can distinquish tail undisturbed vs agnostic.
Perfect yeah, thanks! Only thing is I'm not really sure what to call `VPseudoTiedBinaryCarryIn`. Maybe it's fine as it is.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D117561



More information about the llvm-commits mailing list