[llvm] 875b551 - [SLP][REVEC] Make computeMinimumValueSizes and collectValuesToDemote support vector instructions. (#103005)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 13 04:35:28 PDT 2024
Author: Han-Kuan Chen
Date: 2024-08-13T19:35:25+08:00
New Revision: 875b551de73e1b38cd40b2d39d9144c6fd0b27ec
URL: https://github.com/llvm/llvm-project/commit/875b551de73e1b38cd40b2d39d9144c6fd0b27ec
DIFF: https://github.com/llvm/llvm-project/commit/875b551de73e1b38cd40b2d39d9144c6fd0b27ec.diff
LOG: [SLP][REVEC] Make computeMinimumValueSizes and collectValuesToDemote support vector instructions. (#103005)
Added:
Modified:
llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
llvm/test/Transforms/SLPVectorizer/revec.ll
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
index d1946313addb5..39cfd08976b48 100644
--- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -15564,7 +15564,8 @@ bool BoUpSLP::collectValuesToDemote(
if (all_of(E.Scalars, IsaPred<Constant>))
return true;
- unsigned OrigBitWidth = DL->getTypeSizeInBits(E.Scalars.front()->getType());
+ unsigned OrigBitWidth =
+ DL->getTypeSizeInBits(E.Scalars.front()->getType()->getScalarType());
if (OrigBitWidth == BitWidth) {
MaxDepthLevel = 1;
return true;
@@ -15995,7 +15996,8 @@ void BoUpSLP::computeMinimumValueSizes() {
}
unsigned VF = E.getVectorFactor();
- auto *TreeRootIT = dyn_cast<IntegerType>(E.Scalars.front()->getType());
+ auto *TreeRootIT =
+ dyn_cast<IntegerType>(E.Scalars.front()->getType()->getScalarType());
if (!TreeRootIT || !Opcode)
return 0u;
@@ -16145,7 +16147,8 @@ void BoUpSLP::computeMinimumValueSizes() {
for (unsigned Idx : RootDemotes) {
if (all_of(VectorizableTree[Idx]->Scalars, [&](Value *V) {
- uint32_t OrigBitWidth = DL->getTypeSizeInBits(V->getType());
+ uint32_t OrigBitWidth =
+ DL->getTypeSizeInBits(V->getType()->getScalarType());
if (OrigBitWidth > MaxBitWidth) {
APInt Mask = APInt::getBitsSetFrom(OrigBitWidth, MaxBitWidth);
return MaskedValueIsZero(V, Mask, SimplifyQuery(*DL));
diff --git a/llvm/test/Transforms/SLPVectorizer/revec.ll b/llvm/test/Transforms/SLPVectorizer/revec.ll
index 4a72a5ff8395d..9c8a98ba47b62 100644
--- a/llvm/test/Transforms/SLPVectorizer/revec.ll
+++ b/llvm/test/Transforms/SLPVectorizer/revec.ll
@@ -222,3 +222,19 @@ entry:
%cmp = icmp ugt <4 x i32> %vbsl, <i32 2, i32 3, i32 4, i32 5>
ret <4 x i1> %cmp
}
+
+define void @test7() {
+; CHECK-LABEL: @test7(
+; CHECK-NEXT: [[TMP1:%.*]] = call <16 x i64> @llvm.vector.insert.v16i64.v8i64(<16 x i64> poison, <8 x i64> zeroinitializer, i64 0)
+; CHECK-NEXT: [[TMP2:%.*]] = call <16 x i64> @llvm.vector.insert.v16i64.v8i64(<16 x i64> [[TMP1]], <8 x i64> zeroinitializer, i64 8)
+; CHECK-NEXT: [[TMP3:%.*]] = trunc <16 x i64> [[TMP2]] to <16 x i16>
+; CHECK-NEXT: store <16 x i16> [[TMP3]], ptr null, align 2
+; CHECK-NEXT: ret void
+;
+ %1 = getelementptr i8, ptr null, i64 16
+ %2 = trunc <8 x i64> zeroinitializer to <8 x i16>
+ store <8 x i16> %2, ptr %1, align 2
+ %3 = trunc <8 x i64> zeroinitializer to <8 x i16>
+ store <8 x i16> %3, ptr null, align 2
+ ret void
+}
More information about the llvm-commits
mailing list