Issue 89438
Summary [SLPVectorize] Assertion `MinBWs.contains(TE->UserTreeIndices.front().UserTE) && "Expected user in MinBWs."' failed.
Labels llvm:SLPVectorizer, crash-on-valid
Assignees
Reporter dtcxzyw
    It breaks our CI when building spike: https://github.com/dtcxzyw/llvm-opt-benchmark/issues/536.

Reduced test case: https://godbolt.org/z/484T99KPh
```
; bin/opt -passes=slp-vectorizer -S test.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

define i64 @_Z20fast_rv32i_vaesdm_vvP11processor_t6insn_tm(ptr %p) {
  %1 = getelementptr i8, ptr %p, i64 13
  %2 = getelementptr i8, ptr %p, i64 14
  %3 = getelementptr i8, ptr %p, i64 15
  %4 = getelementptr i8, ptr %p, i64 12
  %5 = zext i8 0 to i32
  %6 = and i32 %5, 0
  %.not866 = icmp eq i32 %6, 0
  %7 = select i1 %.not866, i32 0, i32 0
  %8 = xor i32 0, %7
  %9 = zext i8 0 to i32
  %10 = and i32 %9, 0
  %.not871 = icmp eq i32 %10, 0
  %11 = select i1 %.not871, i32 0, i32 0
  %12 = xor i32 0, %11
  %13 = xor i32 %9, 0
  %14 = xor i32 %13, 0
  %15 = xor i32 %14, 0
  %16 = xor i32 %15, 0
  %17 = xor i32 %16, 0
  %18 = xor i32 %17, %12
  %19 = xor i32 %18, 0
  %20 = xor i32 %19, 0
  %21 = xor i32 %20, 0
  %22 = xor i32 %21, 0
  %23 = trunc i32 %22 to i8
 store i8 %23, ptr %4, align 1
  %24 = xor i32 %9, 0
  %25 = xor i32 %24, 0
  %26 = xor i32 %25, 0
  %27 = xor i32 %26, 0
  %28 = xor i32 %27, 0
  %29 = xor i32 %28, %8
  %30 = xor i32 %29, 0
  %31 = xor i32 %30, 0
  %32 = xor i32 %31, 0
  %33 = xor i32 %32, 0
  %34 = trunc i32 %33 to i8
  store i8 %34, ptr %1, align 1
  %35 = xor i32 0, %5
  %36 = xor i32 %35, 0
  %37 = xor i32 %36, 0
  %38 = xor i32 %37, 0
  %39 = xor i32 %38, 0
  %40 = xor i32 %39, %8
  %41 = xor i32 %40, 0
  %42 = xor i32 %41, 0
  %43 = xor i32 %42, 0
  %44 = xor i32 %43, 0
  %45 = trunc i32 %44 to i8
  store i8 %45, ptr %2, align 1
  %46 = xor i32 %35, 0
  %47 = xor i32 %46, 0
  %48 = xor i32 %47, 0
  %49 = xor i32 %48, 0
  %50 = xor i32 %49, %8
  %51 = xor i32 %50, 0
  %52 = xor i32 %51, 0
  %53 = xor i32 %52, 0
  %54 = xor i32 %53, 0
  %55 = trunc i32 %54 to i8
  store i8 %55, ptr %3, align 1
 ret i64 0
}
```
```
opt: /home/dtcxzyw/WorkSpace/Projects/compilers/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:13142: llvm::Value* llvm::slpvectorizer::BoUpSLP::vectorizeTree(const ExtraValueToDebugLocsMap&, llvm::SmallVectorImpl<std::pair<llvm::Value*, llvm::Value*> >&, llvm::Instruction*): Assertion `MinBWs.contains(TE->UserTreeIndices.front().UserTE) && "Expected user in MinBWs."' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: bin/opt -passes=slp-vectorizer reduced.ll -S
 #0 0x000070d20f217b20 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.19.0git+0x217b20)
 #1 0x000070d20f214b2f llvm::sys::RunSignalHandlers() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMSupport.so.19.0git+0x214b2f)
 #2 0x000070d20f214c85 SignalHandler(int) Signals.cpp:0:0
 #3 0x000070d20ec42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #4 0x000070d20ec969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
 #5 0x000070d20ec969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
 #6 0x000070d20ec969fc pthread_kill ./nptl/pthread_kill.c:89:10
 #7 0x000070d20ec42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
 #8 0x000070d20ec287f3 abort ./stdlib/abort.c:81:7
 #9 0x000070d20ec2871b _nl_load_domain ./intl/loadmsgcat.c:1177:9
#10 0x000070d20ec39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#11 0x000070d209b8a836 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::MapVector<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>, llvm::DenseMap<llvm::Value*, unsigned int, llvm::DenseMapInfo<llvm::Value*, void>, llvm::detail::DenseMapPair<llvm::Value*, unsigned int>>, llvm::SmallVector<std::pair<llvm::Value*, llvm::SmallVector<llvm::Instruction*, 2u>>, 0u>> const&, llvm::SmallVectorImpl<std::pair<llvm::Value*, llvm::Value*>>&, llvm::Instruction*) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x18a836)
#12 0x000070d209b8afcc llvm::slpvectorizer::BoUpSLP::vectorizeTree() (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x18afcc)
#13 0x000070d209b9e368 llvm::SLPVectorizerPass::vectorizeStoreChain(llvm::ArrayRef<llvm::Value*>, llvm::slpvectorizer::BoUpSLP&, unsigned int, unsigned int) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x19e368)
#14 0x000070d209b9f309 llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&)::'lambda'(std::set<std::pair<unsigned int, int>, llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&)::StoreDistCompare, std::allocator<std::pair<unsigned int, int>>> const&)::operator()(std::set<std::pair<unsigned int, int>, llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&)::StoreDistCompare, std::allocator<std::pair<unsigned int, int>>> const&) const SLPVectorizer.cpp:0:0
#15 0x000070d209b9fddc llvm::SLPVectorizerPass::vectorizeStores(llvm::ArrayRef<llvm::StoreInst*>, llvm::slpvectorizer::BoUpSLP&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x19fddc)
#16 0x000070d209ba04d9 llvm::SLPVectorizerPass::vectorizeStoreChains(llvm::slpvectorizer::BoUpSLP&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x1a04d9)
#17 0x000070d209ba0fa1 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x1a0fa1)
#18 0x000070d209ba1a55 llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMVectorize.so.19.0git+0x1a1a55)
#19 0x000070d20a4c3866 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMPasses.so.19.0git+0xc3866)
#20 0x000070d207547f80 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x347f80)
#21 0x000070d20ded3956 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.19.0git+0xd3956)
#22 0x000070d207546c17 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x346c17)
#23 0x000070d20ded4d56 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMX86CodeGen.so.19.0git+0xd4d56)
#24 0x000070d207544e31 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/../lib/libLLVMCore.so.19.0git+0x344e31)
#25 0x000070d20f705314 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) (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.19.0git+0x2d314)
#26 0x000070d20f712502 optMain (/home/dtcxzyw/WorkSpace/Projects/compilers/LLVM/llvm-build/bin/../lib/libLLVMOptDriver.so.19.0git+0x3a502)
#27 0x000070d20ec29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#28 0x000070d20ec29e40 call_init ./csu/../csu/libc-start.c:128:20
#29 0x000070d20ec29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#30 0x00006220d953f095 _start (bin/opt+0x1095)
Aborted (core dumped)
```

llvm version: a6a4d4a0949fa7aab93429754704f28505d56d3f

cc @alexey-bataev 
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to