[llvm] [RISCV] Optimize undef Even vector in getWideningInterleave. (PR #88221)
Luke Lau via llvm-commits
llvm-commits at lists.llvm.org
Wed Apr 10 00:29:24 PDT 2024
================
@@ -4638,8 +4638,19 @@ static SDValue getWideningInterleave(SDValue EvenV, SDValue OddV,
Subtarget.getXLenVT()));
Interleaved = DAG.getNode(RISCVISD::VWSLL_VL, DL, WideContainerVT, OddV,
OffsetVec, Passthru, Mask, VL);
- Interleaved = DAG.getNode(RISCVISD::VWADDU_W_VL, DL, WideContainerVT,
- Interleaved, EvenV, Passthru, Mask, VL);
+ if (!EvenV.isUndef())
+ Interleaved = DAG.getNode(RISCVISD::VWADDU_W_VL, DL, WideContainerVT,
+ Interleaved, EvenV, Passthru, Mask, VL);
+ } else if (EvenV.isUndef()) {
+ Interleaved =
+ DAG.getNode(RISCVISD::VZEXT_VL, DL, WideContainerVT, OddV, Mask, VL);
+
+ SDValue OffsetVec =
+ DAG.getSplatVector(WideContainerVT, DL,
+ DAG.getConstant(VecVT.getScalarSizeInBits(), DL,
+ Subtarget.getXLenVT()));
----------------
lukel97 wrote:
Does this work?
```suggestion
SDValue OffsetVec = DAG.getConstant(VecVT.getScalarSizeInBits(), DL, WideContainerVT);
```
https://github.com/llvm/llvm-project/pull/88221
More information about the llvm-commits
mailing list