[PATCH] D115750: [SLP]Further improvement of the cost model for scalars used in buildvectors.
Alexey Bataev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 13 13:59:14 PDT 2022
ABataev added a comment.
In D115750#3511967 <https://reviews.llvm.org/D115750#3511967>, @aeubanks wrote:
> Another crash caused by this:
>
> $ cat /tmp/f.ll
> target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
> target triple = "x86_64-unknown-linux-android23"
>
> %0 = type { float, float, float, float }
>
> ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
> declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0
>
> ; Function Attrs: argmemonly nocallback nofree nosync nounwind willreturn
> declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0
>
> ; Function Attrs: argmemonly nofree nounwind willreturn writeonly
> declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #1
>
> define internal void @0() {
> %1 = getelementptr inbounds %0, ptr undef, i64 0, i32 2
> %2 = load float, ptr %1, align 4
> %3 = load float, ptr undef, align 4
> %4 = fsub float %2, %3
> %5 = getelementptr inbounds %0, ptr undef, i64 0, i32 3
> %6 = load float, ptr %5, align 4
> %7 = getelementptr inbounds %0, ptr undef, i64 0, i32 1
> %8 = load float, ptr %7, align 4
> %9 = fsub float %6, %8
> %10 = fcmp olt float %9, %4
> %11 = insertelement <2 x float> undef, float %3, i64 0
> %12 = insertelement <2 x float> zeroinitializer, float 0.000000e+00, i64 0
> store <2 x float> zeroinitializer, ptr null, align 4
> %13 = insertelement <2 x float> %11, float %6, i64 0
> store <2 x float> zeroinitializer, ptr null, align 4
> ret void
> }
>
> attributes #0 = { argmemonly nocallback nofree nosync nounwind willreturn }
> attributes #1 = { argmemonly nofree nounwind willreturn writeonly }
> $ bin/opt -passes=slp-vectorizer -disable-output /tmp/f.ll
> opt: ../../llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:6657: T *performExtractsShuffleAction(MutableArrayRef<std::pair<T *, SmallVector<int>>>, llvm::Value *, function_ref<unsigned int (T *)>
> , function_ref<std::pair<T *, bool> (T *, ArrayRef<int>)>, function_ref<T *(ArrayRef<int>, ArrayRef<T *>)>) [T = const llvm::slpvectorizer::BoUpSLP::TreeEntry]: Assertion `Mask[I] == UndefMaskEle
> m && "Multiple uses of scalars."' failed.
Fixed 85f6b15ee50f <https://reviews.llvm.org/rG85f6b15ee50feb316047f52d4bd6ddc639e3c5c1>
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D115750/new/
https://reviews.llvm.org/D115750
More information about the llvm-commits
mailing list