[llvm] [AArch64] Use dupq (SVE2.1) for segmented lane splats (PR #144482)
Paul Walker via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 17 08:33:00 PDT 2025
================
@@ -30013,6 +30037,19 @@ SDValue AArch64TargetLowering::LowerFixedLengthVECTOR_SHUFFLEToSVE(
return convertFromScalableVector(
DAG, VT, DAG.getNode(Opc, DL, ContainerVT, Op1, Op1));
}
+
+ if (Subtarget->hasSVE2p1()) {
+ if (std::optional<unsigned> Lane = isDUPQMask(ShuffleMask, VT)) {
+ SDValue IID =
+ DAG.getConstant(Intrinsic::aarch64_sve_dup_laneq, DL, MVT::i64);
+ return convertFromScalableVector(
+ DAG, VT,
+ DAG.getNode(ISD::INTRINSIC_WO_CHAIN, DL, {ContainerVT, MVT::i64},
+ {IID, Op1,
+ DAG.getConstant(*Lane, DL, MVT::i64,
+ /*isTarget=*/true)}));
----------------
paulwalker-arm wrote:
`getNode()`'s third parameter is the result type? Does `aarch64_sve_dup_laneq` return two results?
https://github.com/llvm/llvm-project/pull/144482
More information about the llvm-commits
mailing list