[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