From a411bc11d6086a67b625b54d56ae62b61ba95166 Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Wed, 22 Jun 2022 22:31:01 -0700 Subject: [PATCH] Revert "[SLP]Fix a crash when insert subvector is out of range." This reverts commit f1ee2738b3d70fea803ac1f3401c2fc9f61e514a. Revert due to the revert of a dependent commit `[SLP]Improve shuffles cost estimation where possible.` --- .../Transforms/Vectorize/SLPVectorizer.cpp | 12 +---------- .../AArch64/buildvector-vectorize.ll | 21 ------------------- 2 files changed, 1 insertion(+), 32 deletions(-) delete mode 100644 llvm/test/Transforms/SLPVectorizer/AArch64/buildvector-vectorize.ll diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 631dbb35f450..03b164cca0c4 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -6168,16 +6168,6 @@ InstructionCost BoUpSLP::getEntryCost(const TreeEntry *E, PowerOf2Ceil(OffsetEnd - OffsetBeg + 1), ((OffsetEnd - OffsetBeg + VecScalarsSz) / VecScalarsSz) * VecScalarsSz); - bool IsWholeSubvector = - OffsetBeg == Offset && ((OffsetEnd + 1) % VecScalarsSz == 0); - // Check if we can safely insert a subvector. If it is not possible, just - // generate a whole-sized vector and shuffle the source vector and the new - // subvector. - if (OffsetBeg + InsertVecSz > VecSz) { - // Align OffsetBeg to generate correct mask. - OffsetBeg = alignDown(OffsetBeg, VecSz, Offset); - InsertVecSz = VecSz; - } APInt DemandedElts = APInt::getZero(NumElts); // TODO: Add support for Instruction::InsertValue. @@ -6221,7 +6211,7 @@ InstructionCost BoUpSLP::getEntryCost(const TreeEntry *E, // TODO: Implement the analysis of the FirstInsert->getOperand(0) // subvector of ActualVecTy. if (!isUndefVector(FirstInsert->getOperand(0)) && NumScalars != NumElts && - !IsWholeSubvector) { + (Offset != OffsetBeg || (OffsetEnd + 1) % VecScalarsSz != 0)) { if (InsertVecSz != VecSz) { auto *ActualVecTy = FixedVectorType::get(SrcVecTy->getElementType(), VecSz); diff --git a/llvm/test/Transforms/SLPVectorizer/AArch64/buildvector-vectorize.ll b/llvm/test/Transforms/SLPVectorizer/AArch64/buildvector-vectorize.ll deleted file mode 100644 index 30658b606665..000000000000 --- a/llvm/test/Transforms/SLPVectorizer/AArch64/buildvector-vectorize.ll +++ /dev/null @@ -1,21 +0,0 @@ -; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -slp-vectorizer -S -mtriple=aarch64 < %s | FileCheck %s - -define void @test(ptr %p) { -; CHECK-LABEL: @test( -; CHECK-NEXT: entry: -; CHECK-NEXT: [[INC:%.*]] = getelementptr inbounds i16, ptr [[P:%.*]], i64 1 -; CHECK-NEXT: [[TMP0:%.*]] = load i16, ptr [[INC]], align 4 -; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr [[P]], align 2 -; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x i16> zeroinitializer, i16 [[TMP0]], i32 5 -; CHECK-NEXT: [[TMP3:%.*]] = insertelement <8 x i16> [[TMP2]], i16 [[TMP1]], i32 7 -; CHECK-NEXT: ret void -; -entry: - %inc = getelementptr inbounds i16, ptr %p, i64 1 - %0 = load i16, ptr %inc, align 4 - %1 = load i16, ptr %p, align 2 - %2 = insertelement <8 x i16> zeroinitializer, i16 %0, i32 5 - %3 = insertelement <8 x i16> %2, i16 %1, i32 7 - ret void -}