[llvm] [SLP]Initial support for (masked)loads + compress and (masked)interleaved (PR #132099)
KAWASHIMA Takahiro via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 17 06:36:24 PDT 2025
kawashima-fj 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),
```console
$ 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 (0bec0f5c059af5f920fe22ecda469b666b5971b0) and the latest `main` branch (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.
https://github.com/llvm/llvm-project/pull/132099
More information about the llvm-commits
mailing list