[llvm] 47d71b6 - [BasicTTI] Only split vectors with even element counts in getCastInstrCost (#166528)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 6 04:45:48 PST 2025
Author: Shakil Ahmed
Date: 2025-11-06T12:45:42Z
New Revision: 47d71b69b49326f0305b9250184974b6b7397d6f
URL: https://github.com/llvm/llvm-project/commit/47d71b69b49326f0305b9250184974b6b7397d6f
DIFF: https://github.com/llvm/llvm-project/commit/47d71b69b49326f0305b9250184974b6b7397d6f.diff
LOG: [BasicTTI] Only split vectors with even element counts in getCastInstrCost (#166528)
Fixes #166320
Added:
llvm/test/Transforms/VectorCombine/AArch64/sve-interleave-splat.ll
Modified:
llvm/include/llvm/CodeGen/BasicTTIImpl.h
Removed:
################################################################################
diff --git a/llvm/include/llvm/CodeGen/BasicTTIImpl.h b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
index 221d8f1e2f673..f58525754d7a5 100644
--- a/llvm/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/llvm/include/llvm/CodeGen/BasicTTIImpl.h
@@ -1331,8 +1331,8 @@ class BasicTTIImplBase : public TargetTransformInfoImplCRTPBase<T> {
bool SplitDst =
TLI->getTypeAction(Dst->getContext(), TLI->getValueType(DL, Dst)) ==
TargetLowering::TypeSplitVector;
- if ((SplitSrc || SplitDst) && SrcVTy->getElementCount().isVector() &&
- DstVTy->getElementCount().isVector()) {
+ if ((SplitSrc || SplitDst) && SrcVTy->getElementCount().isKnownEven() &&
+ DstVTy->getElementCount().isKnownEven()) {
Type *SplitDstTy = VectorType::getHalfElementsVectorType(DstVTy);
Type *SplitSrcTy = VectorType::getHalfElementsVectorType(SrcVTy);
const T *TTI = thisT();
diff --git a/llvm/test/Transforms/VectorCombine/AArch64/sve-interleave-splat.ll b/llvm/test/Transforms/VectorCombine/AArch64/sve-interleave-splat.ll
new file mode 100644
index 0000000000000..921bcf086f2bf
--- /dev/null
+++ b/llvm/test/Transforms/VectorCombine/AArch64/sve-interleave-splat.ll
@@ -0,0 +1,11 @@
+; RUN: opt -passes=vector-combine %s -S -o - | FileCheck %s
+
+target triple = "aarch64-unknown-linux-gnu"
+
+define <vscale x 4 x i16> @interleave2_same_const_splat_nxv4i16() {
+;CHECK-LABEL: @interleave2_same_const_splat_nxv4i16(
+;CHECK: call <vscale x 4 x i16> @llvm.vector.interleave2
+;CHECK: ret <vscale x 4 x i16> %retval
+ %retval = call <vscale x 4 x i16> @llvm.vector.interleave2.nxv4i16(<vscale x 2 x i16> splat(i16 3), <vscale x 2 x i16> splat(i16 3))
+ ret <vscale x 4 x i16> %retval
+}
More information about the llvm-commits
mailing list