[llvm] [AArch64] Use SVE for load-extend-broadcast on V3AE (PR #221689)

Sander de Smalen via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 7 03:24:48 PDT 2026


================
@@ -30233,6 +30142,18 @@ static SDValue performDUPCombine(SDNode *N,
     //   v4i32 = SCALAR_TO_VECTOR (i32 (zextloadi8 addr)) ; Matches to ldr b0
     //   v4i32 = DUPLANE32 (v4i32), 0
     if (auto *LD = dyn_cast<LoadSDNode>(Op)) {
+      if (SubTarget->preferSVEVectors() &&
+          SubTarget->isSVEorStreamingSVEAvailable() && Op->hasOneUse() &&
+          VT.getScalarType().isInteger()) {
+        EVT ScalaleVT = getContainerForFixedLengthVector(DCI.DAG, VT);
+        SDValue SplatNode =
+            DCI.DAG.getNode(ISD::SPLAT_VECTOR, DL, ScalaleVT, Op);
+        // Using SVE on 64bit Vectors with the same scalar type is not
+        // profitable
+        if (!(VT.is64BitVector() && SplatNode.getValueType().getScalarType() ==
----------------
sdesmalen-arm wrote:

Should the `VT.is64BitVector()` part of the condition be removed? I would expect an unpredicated `ld1r` to be no worse than a predicated `ld1r`.

https://github.com/llvm/llvm-project/pull/221689


More information about the llvm-commits mailing list