[PATCH] D134703: [RISCV][ISel] Refactor the formation of VW operations

Quentin Colombet via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 3 11:44:46 PDT 2022


qcolombet added inline comments.


================
Comment at: llvm/lib/Target/RISCV/RISCVISelLowering.cpp:8327
+      // Some splats don't come with a VL.
+      if (OrigOperand.getNumOperands() > 2)
+        VL = OrigOperand.getOperand(2);
----------------
qcolombet wrote:
> craig.topper wrote:
> > I'm little confused by this check. The number of operands should be a property of the RISCVISD opcode. All RISCVISD::VMV_V_X_VL are supposed to have the same number of operands.
> I was surprised too but I've seen them in some tests.
> I assumed this was expected and didn't dig more.
> For instance, I see that we create some without `VL`s at line 1935 before this patch:
> ```
>   SDValue SplatZero = DAG.getNode(
>       RISCVISD::VMV_V_X_VL, DL, DstContainerVT, DAG.getUNDEF(DstContainerVT),
>       DAG.getConstant(0, DL, Subtarget.getXLenVT()));
> ```
> 
> You can find other instances here and there in that file. E.g., another one:
> ```
> // Create 2^eltbits - 1 copies of V2 by multiplying by the largest integer.
> SDValue Multiplier = DAG.getNode(RISCVISD::VMV_V_X_VL, DL, IntHalfVT,
>                                     DAG.getUNDEF(IntHalfVT),
>                                     DAG.getAllOnesConstant(DL, XLenVT));
> ```
@craig.topper ^^^
Tagging you to make sure you saw that I needed some feedback on that front.

Put differently, is it expected to have `VMV_V_X_VL` with no `VL` or should the snippet I showed need fixing?
(Unless I missed something and the `VL` are indeed added at some point.)


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D134703



More information about the llvm-commits mailing list