[llvm] [SLP]Support vectorization of previously vectorized scalars in split nodes (PR #134286)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 15 12:41:14 PDT 2025
Sterling-Augustine wrote:
This pr makes the following test case crash. Stack trace below.
```
$ cat reduced.ll
define i64 @Foo(ptr align 8 dereferenceable(344) %0, i64 %1) {
%3 = getelementptr i8, ptr %0, i64 104
%4 = getelementptr i8, ptr %0, i64 112
%5 = getelementptr i8, ptr %0, i64 24
%6 = load i64, ptr %3, align 8
%7 = load i64, ptr %4, align 8
%8 = load i64, ptr %5, align 8
%9 = load i64, ptr %0, align 8
br label %10
10: ; preds = %18, %2
%11 = phi i64 [ %9, %2 ], [ 0, %18 ]
%12 = phi i64 [ %8, %2 ], [ %12, %18 ]
%13 = phi i64 [ %7, %2 ], [ 0, %18 ]
%14 = phi i64 [ %6, %2 ], [ 0, %18 ]
switch i32 0, label %15 [
i32 0, label %18
]
15: ; preds = %10
%16 = tail call i64 @llvm.umin.i64(i64 0, i64 0)
%17 = tail call i64 @llvm.umax.i64(i64 0, i64 0)
br label %18
18: ; preds = %15, %10
%19 = phi i64 [ %17, %15 ], [ 0, %10 ]
%20 = phi i64 [ %16, %15 ], [ 0, %10 ]
%21 = phi i64 [ %11, %15 ], [ 0, %10 ]
%22 = phi i64 [ %12, %15 ], [ 0, %10 ]
%23 = phi i64 [ %13, %15 ], [ %1, %10 ]
%24 = phi i64 [ %14, %15 ], [ 0, %10 ]
br i1 false, label %.loopexit206, label %10
.loopexit206: ; preds = %18
switch i32 0, label %26 [
i32 0, label %.cont174
i32 1, label %25
]
25: ; preds = %.loopexit206
br label %.cont174
26: ; preds = %.loopexit206
%27 = tail call i64 @llvm.umin.i64(i64 0, i64 0)
%28 = tail call i64 @llvm.umax.i64(i64 0, i64 0)
br label %.cont174
.cont174: ; preds = %26, %25, %.loopexit206
%.sroa.139.1 = phi i64 [ %28, %26 ], [ %19, %25 ], [ %19, %.loopexit206 ]
%.sroa.133.1 = phi i64 [ %27, %26 ], [ 0, %25 ], [ %20, %.loopexit206 ]
%.sroa.81.1 = phi i64 [ %23, %26 ], [ 0, %25 ], [ %23, %.loopexit206 ]
%.sroa.75.1 = phi i64 [ %24, %26 ], [ 0, %25 ], [ %24, %.loopexit206 ]
%.sroa.21.1 = phi i64 [ %21, %26 ], [ 0, %25 ], [ %21, %.loopexit206 ]
%.sroa.15.1 = phi i64 [ %22, %26 ], [ 0, %25 ], [ %22, %.loopexit206 ]
%29 = phi i64 [ %28, %26 ], [ 0, %25 ], [ %19, %.loopexit206 ]
%30 = phi i64 [ %27, %26 ], [ 0, %25 ], [ %20, %.loopexit206 ]
ret i64 0
}
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umax.i64(i64, i64) #0
; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.umin.i64(i64, i64) #0
; uselistorder directives
uselistorder ptr @llvm.umax.i64, { 1, 0 }
uselistorder ptr @llvm.umin.i64, { 1, 0 }
attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
augustine:~/repro $ cat reduced.ll | ~/llvm/build/bin/opt -p slp-vectorizer -o /tmp/junk -mtriple=x86_64-unknown-linux-gnu -mattr=+aes -mattr=+cx16 -mattr=+sse4.2 -mattr=+pclmul -mattr=+prfchw -mattr=+avx
opt: /usr/local/google/home/saugustine/llvm/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:3861: ArrayRef<Value *> llvm::slpvectorizer::BoUpSLP::TreeEntry::getOperand(unsigned int) const: Assertion `OpIdx < Operands.size() && "Off bounds"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /usr/local/google/home/saugustine/llvm/build/bin/opt -p slp-vectorizer -o /tmp/junk -mtriple=x86_64-unknown-linux-gnu -mattr=+aes -mattr=+cx16 -mattr=+sse4.2 -mattr=+pclmul -mattr=+prfchw -mattr=+avx
1. Running pass "function(slp-vectorizer)" on module "<stdin>"
2. Running pass "slp-vectorizer" on function "Foo"
#0 0x000056001761dda8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x4a21da8)
#1 0x000056001761b85e llvm::sys::RunSignalHandlers() (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x4a1f85e)
#2 0x000056001761e431 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x00007fac29849e20 (/lib/x86_64-linux-gnu/libc.so.6+0x3fe20)
#4 0x00007fac2989de5c __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007fac29849d82 raise ./signal/../sysdeps/posix/raise.c:27:6
#6 0x00007fac298324f0 abort ./stdlib/abort.c:81:7
#7 0x00007fac29832418 _nl_load_domain ./intl/loadmsgcat.c:1177:9
#8 0x00007fac29842692 (/lib/x86_64-linux-gnu/libc.so.6+0x38692)
#9 0x00005600167de601 llvm::slpvectorizer::BoUpSLP::getOperandEntry(llvm::slpvectorizer::BoUpSLP::TreeEntry const*, unsigned int) const (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3be2601)
#10 0x00005600168761ea bool __gnu_cxx::__ops::_Iter_negate<llvm::slpvectorizer::BoUpSLP::reorderBottomToTop(bool)::$_8>::operator()<llvm::slpvectorizer::BoUpSLP::TreeEntry**>(llvm::slpvectorizer::BoUpSLP::TreeEntry**) SLPVectorizer.cpp:0:0
#11 0x00005600167b8572 llvm::slpvectorizer::BoUpSLP::reorderBottomToTop(bool) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3bbc572)
#12 0x0000560016823fb9 llvm::SLPVectorizerPass::tryToVectorizeList(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, bool) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3c27fb9)
#13 0x0000560016829dfb bool tryToVectorizeSequence<llvm::Value>(llvm::SmallVectorImpl<llvm::Value*>&, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::Value*, llvm::Value*)>, llvm::function_ref<bool (llvm::ArrayRef<llvm::Value*>, bool)>, bool, llvm::slpvectorizer::BoUpSLP&) SLPVectorizer.cpp:0:0
#14 0x000056001681cb83 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3c20b83)
#15 0x000056001681a5fd llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3c1e5fd)
#16 0x0000560016819ba6 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x3c1dba6)
#17 0x000056001574145d llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x2b4545d)
#18 0x000056001745ebca llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x4862bca)
#19 0x0000560013c8835d llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x108c35d)
#20 0x0000560017462ab7 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x4866ab7)
#21 0x0000560013c88b1d llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x108cb1d)
#22 0x000056001745dc7a llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0x4861c7a)
#23 0x00005600137e3737 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::PassPlugin>, llvm::ArrayRef<std::function<void (llvm::PassBuilder&)>>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool, bool) (/usr/local/google/home/saugustine/llvm/build/bin/opt+0xbe7737)
#24 0x00005600137d7a9e optMain (/usr/local/google/home/saugustine/llvm/build/bin/opt+0xbdba9e)
#25 0x00007fac29833d68 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#26 0x00007fac29833e25 call_init ./csu/../csu/libc-start.c:128:20
#27 0x00007fac29833e25 __libc_start_main ./csu/../csu/libc-start.c:347:5
#28 0x00005600137d1221 _start (/usr/local/google/home/saugustine/llvm/build/bin/opt+0xbd5221)
```
https://github.com/llvm/llvm-project/pull/134286
More information about the llvm-commits
mailing list