[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