[llvm] [SLP]Initial support for (masked)loads + compress and (masked)interleaved (PR #132099)

Alexey Bataev via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 17 08:44:16 PDT 2025


alexey-bataev wrote:

> Hi,
> 
> Thank you for your hard work but I have to tell you that there is another assertion failure.
> 
> Using [test.ll.txt](https://github.com/user-attachments/files/19795021/test.ll.txt),
> 
> ```
> $ opt -S -passes=slp-vectorizer test.ll
> opt: /work/home/tkawa/src/llvm-main/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:17983: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeTree(TreeEntry*): Assertion `IsVectorized && "Expected to be vectorized"' failed.
> PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
> Stack dump:
> 0.      Program arguments: opt -S -passes=slp-vectorizer test.ll
> 1.      Running pass "function(slp-vectorizer)" on module "test.ll"
> 2.      Running pass "slp-vectorizer" on function "_QQmain"
>  #0 0x0000ffff9d5fcee8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (llvm-dev/lib/libLLVMSupport.so.21.0git+0x25cee8)
>  #1 0x0000ffff9d5fa5d0 llvm::sys::RunSignalHandlers() (llvm-dev/lib/libLLVMSupport.so.21.0git+0x25a5d0)
>  #2 0x0000ffff9d5fa738 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
>  #3 0x0000ffff9d71b7f0 (linux-vdso.so.1+0x7f0)
>  #4 0x0000ffff9d267608 (/lib/aarch64-linux-gnu/libc.so.6+0x87608)
>  #5 0x0000ffff9d21cb3c raise (/lib/aarch64-linux-gnu/libc.so.6+0x3cb3c)
>  #6 0x0000ffff9d207e00 abort (/lib/aarch64-linux-gnu/libc.so.6+0x27e00)
>  #7 0x0000ffff9d215cc0 (/lib/aarch64-linux-gnu/libc.so.6+0x35cc0)
>  #8 0x0000ffff9d215d30 __assert_perror_fail (/lib/aarch64-linux-gnu/libc.so.6+0x35d30)
>  #9 0x0000ffff99e50dd4 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::slpvectorizer::BoUpSLP::TreeEntry*) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x2e0dd4)
> #10 0x0000ffff99e71b80 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::SmallDenseSet<llvm::Value*, 4u, llvm::DenseMapInfo<llvm::Value*, void>> const&, llvm::Instruction*, llvm::ArrayRef<std::tuple<llvm::Value*, unsigned int, bool>>) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x301b80)
> #11 0x0000ffff99e73db8 llvm::slpvectorizer::BoUpSLP::vectorizeTree() (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x303db8)
> #12 0x0000ffff99e838d0 llvm::SLPVectorizerPass::vectorizeStoreChain(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int, unsigned int&) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x3138d0)
> #13 0x0000ffff99e860b8 llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&)::'lambda'(std::map<int, unsigned int, std::less<int>, std::allocator<std::pair<int const, unsigned int>>> const&)::operator()(std::map<int, unsigned int, std::less<int>, std::allocator<std::pair<int const, unsigned int>>> const&) const SLPVectorizer.cpp:0:0
> #14 0x0000ffff99e86610 llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&, llvm::DenseSet<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, llvm::DenseMapInfo<std::tuple<llvm::Value*, llvm::Value*, llvm::Value*, llvm::Value*, unsigned int>, void>>&) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x316610)
> #15 0x0000ffff99e87804 llvm::SLPVectorizerPass::vectorizeStoreChains(llvm::slpvectorizer::BoUpSLP&) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x317804)
> #16 0x0000ffff99e88984 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x318984)
> #17 0x0000ffff99e894e0 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (llvm-dev/lib/libLLVMVectorize.so.21.0git+0x3194e0)
> #18 0x0000ffff9b835720 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) PassBuilder.cpp:0:0
> #19 0x0000ffff98f13850 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (llvm-dev/lib/libLLVMCore.so.21.0git+0x4f3850)
> #20 0x0000ffff9cb6e7f0 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) X86CodeGenPassBuilder.cpp:0:0
> #21 0x0000ffff98f12340 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (llvm-dev/lib/libLLVMCore.so.21.0git+0x4f2340)
> #22 0x0000ffff9cb6f590 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) X86CodeGenPassBuilder.cpp:0:0
> #23 0x0000ffff98f128ec llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (llvm-dev/lib/libLLVMCore.so.21.0git+0x4f28ec)
> #24 0x0000ffff9d6a563c 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) (llvm-dev/lib/libLLVMOptDriver.so.21.0git+0x3563c)
> #25 0x0000ffff9d6b17e4 optMain (llvm-dev/lib/libLLVMOptDriver.so.21.0git+0x417e4)
> #26 0x0000ffff9d2084c4 (/lib/aarch64-linux-gnu/libc.so.6+0x284c4)
> #27 0x0000ffff9d208598 __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x28598)
> #28 0x0000aaaab63808b0 _start (llvm-dev/bin/opt+0x108b0)
> ```
> 
> This IR was produced by
> 
> ```shell
> flang -S -O2 test.f90 -mllvm -print-before=slp-vectorizer -mllvm -print-module-scope
> ```
> 
> and the `test.f90` is
> 
> ```fortran
> program main
>   character(len=2),dimension(2) :: x1,x2
>   x1 = '12'
>   x2 = '34'
>   print *, [ character(len=1) :: [ character(len=2) :: (x1, x2, kk = 1, 2) ] ]
> end program
> ```
> 
> I confirmed this is a regrssion of this PR ([0bec0f5](https://github.com/llvm/llvm-project/commit/0bec0f5c059af5f920fe22ecda469b666b5971b0)) and the latest `main` branch ([23e3cbb](https://github.com/llvm/llvm-project/commit/23e3cbb2e82b62586266116c8ab77ce68e412cf8)) still has this problem.
> 
> If you prefer a new GitHub issue, I'll create it. If you need more information, let me know.
> 
> Thanks.

Fixed in 1fcf78d15318e3fbe384c635a0ae651be89d0686

https://github.com/llvm/llvm-project/pull/132099


More information about the llvm-commits mailing list