[llvm] [AArch64][CostModel] Lower cost of dupq (SVE2.1) (PR #144918)
David Green via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 20 07:10:37 PDT 2025
================
@@ -5583,6 +5583,26 @@ InstructionCost AArch64TTIImpl::getShuffleCost(
Kind = TTI::SK_PermuteSingleSrc;
}
+ // Segmented shuffle matching.
+ if (ST->hasSVE2p1() && CostKind == TTI::TCK_RecipThroughput &&
+ Kind == TTI::SK_PermuteSingleSrc && isa<FixedVectorType>(Tp) &&
+ Tp->getPrimitiveSizeInBits().isKnownMultipleOf(128)) {
+
+ FixedVectorType *VTy = cast<FixedVectorType>(Tp);
+ unsigned Segments = VTy->getPrimitiveSizeInBits() / 128;
+ unsigned SegmentElts = VTy->getNumElements() / Segments;
+
+ // dupq zd.t, zn.t[idx]
+ unsigned Lane = (unsigned)Mask[0];
+ if (SegmentElts * Segments == Mask.size() && Lane < SegmentElts) {
----------------
davemgreen wrote:
Can this re-use the isDUPQMask method added recently?
https://github.com/llvm/llvm-project/pull/144918
More information about the llvm-commits
mailing list