<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/89438>89438</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorize] Assertion `MinBWs.contains(TE->UserTreeIndices.front().UserTE) && "Expected user in MinBWs."' failed.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
llvm:SLPVectorizer,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
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
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW1tz47aS_jXwC0oqEgBvD36QL9p1xa64xs5ka19UIAFJWEMEFwAde379KYCyRBK0x56cnDjnJDXR8NLdQH9fN9BNcqgxYlNzfgqSM5BcnNDWbpU-ZbZ6-vb820mp2PPplYWl5vTBQNVqeH4Ff9vyGpatkEzUG2ga8cABXsCttY0BeAHQEqDlRthtW84rtQNoubcH0FLKx91MNXZW8rra7qh-AGgpjGm5AWiZ4HQOogsQLbrfL5y1FWfQcmNhRc3UOIqVStq50huAlt8AWpKc3BfFT7fbvaU02v_pTvEZLEUN0FI1Fs4aagw3AF8Y2cweeWWVFt-4hrM7P-hcyk7NUr3hFjJqqaTPqrUQ4AsIEOKzHcALPmtQFgG8wMj_uNN4eOqOUuJ_ZuJwEKMc4EWM8tk6j_ZHtb-UvqinZHbnxBAaTMVq0Uj-Mo2nPF2lZNZUMynq9mm2qduDQvfL-FrUHIqUQECi1f-iaE2NXelHjMTqkXLDdqvHx9s4brSquDFKr2wqalOv7A6gvLEaApQ0ABUQZGedTeguxX4OG2655DteWycpcoDO4VHn3I8b454aer8a6anh96slPTXyfjXUU0u82jf-ZKHIYQStggL3BVIvQGvmrnsNZyfqScxrZfO0kxPVroH8_19k07Fs5qUMl7yyUMQ9dT87jGB0PDiq5V7tSemjiDPWkyi-50ccjR0pJh3J4ilH4mgsHMevuJLFb7oSo0lf4rgvgwcyU3ONyVgkxoFMEsiQQCYNZAKC4yyQCYiN80Ame3FtQEMRyOVjWygKZAL_UTyWQQFFCAUycSDTQW11W1cHKeTDJ9-LGas0d1HlxXsZ5cGkUmxq2GcPBdSEsw-YQQEzKGAGBcyggBkUMIMCZlAWyASsoHzPXt5fmgJiUOAaDojBATE4IAYHxOAgBzAKZEhIHsYD8gbsYdJjL55mDyeT-dlfanHADA6YwQEzOGAGB8zggBkcMIODfCEBLbiYYI8EzJCAGRIwQwJmSMAMCZghQQ6QYHkiScgeIa-zR5Iee2iaPfIOakhADQmoIQE1JKCGBNSQgJokoIZMUZME1CQBNUlATRJQkwTUJAE1SUBNElCTTFCTvEFN0qcGh9Robn3p8VKiZhfTpevwVDXWlcMALbdqxwdV9q9KP9w1tHJXb7X6P15ZV15XatcIybV5KcSb7t7-1P0lSoCW95rWZq30zgl-fSmKAVreXd8eTvW8ahpXqOKYuDIVehN4AfDiK5UtB6h_ycjmWF13l87UL83d9W13crh5rzkHKK9UbSy8fLKaemv36oKX7eZaVeaGNqBbx4_m73ZUym5qV7tGAnxuLOtuNVRogM_D2Q0tHK7iSwjwZTDCVW2sbisrVO11C-fywhiu3SUI0uhG1Ge_mnmlaktFbQDK7y9nAF_-Yrh2Xl3VTFTczNda1Ra4HaSY-3uXvqZ2A6aulL98anhlOYOt4RqKGu4Nu3oeZXBNheRs3ybdXl8u7i6hacudsJDCst1AzRulrYvGNzqyF76HUXBoxLpCsK5kyzi0Ww4rTc0WlrR6sJpWfD_8naXVA2TtzgVCdymaQ__frVYbTXeQ6k3rCm43j_c0Xrpr-eZSwtndPj8AwhGMnqIoirKIoWiN4qxEUT-8nk13cKtFbf207rWP__wopOlvK2Ws5nS3p1c4Ihz2-Q9m0fX115sXGH1HDNCyc3I-P6STFKWTu2sbR8zcqHlczKONsACdRU-dLy6gDs7GI2dJidZTzn5p6zuxqan8b1qzbkb5J_DHTXfgDxr7U-UJHMwcoHzPRXfZ7BeXyP9_MIT7hnhFumLYe9tNbd8G93pgd6Nyc0z97EhXCfcmR4Y2i7RYV3C1auxWc8pWD0LKldg1XdtIfbI7KOrGSoCWfbF5BfCCuM4-S4_2k_fYry3XNZVvWs78Y4EeGumU5b7am-byYmQuG4NLshRujOfDW-oOX2LBPBvGGxc0jTLiCaClpsJwbxtlAC96GORD0yjP1hjS0i1T3pRlHX3-Uje72Hl8tFAEFuISrmq5koqyFVM7KjpeRO3ddZd3ZlPRzlwcZ25Ke9pdikVDg7jgRfqxUPIqh1ByNgd5W5Q5zXH6O_bAo-YNbbrN7R0bWW8rHEiPN7BziFq_0fWVL3htuNtgXxunrf0DQ9YtnVOqV_Vavar-qAQLBmXcUiGHVm7f2rUHk8CXgcEhBB-tBD4KYDd6tD-GvnL5YwuUd9Unf_QuEG4Ih9JwvCXEPhMGqYLGqbKuqt-RKp_O33VVDfzFQ38LjtO8Hx79wvqWGjNy8851E-db6ibVWxcWWtPnL3w9HT7jtHgD1C6axsk9PP9UCHsABwiTEcJrHBUfRdh8H10vd-VT_MMIF90lgDJJdyWjAGUA5YeFwHA7sS6MSdmvecPV5fM4501cCGPP1a6hmjsbB5eolKqi08vyK36OF9X9MKrh2hvyuf83ih9FsTuGUw19r-Z2eZWM84qx6rOB9qlWJgfQYGVKhwjSiLAPr0x-7R_C-FcCxfs8ACUbg7Km8fdB0W3ty6c-Dsu23pc945qropLqy0cl217Rdrx_71-kHh52-cJ1WuZalJrq50mJxeILN610GI7uXCvVTKpcqJ2oXQJ31cvYoDHtrnEzPqfVNrx_wXe0ZpydiYkxf26s2Ilvvk_9wndUP1zuhLWuw_5sRaGnfBAT-SgmYpok74qJ98XDoqby2QhzQ2u64cOa-6C0L60_F1IOiAFSg3aYkgrnafpKR-WAulGMy2l_v7MD_hCA7s-_EzO3_lnlmBYPep8VNHimkCUkW-f9h5Seibc8_Bvs668350oHGYA9lAOsB89aGGe4SP4ZGfCHcfQ3t9dfb_4nT88V4__F6zHDnr8BwWiUTGkVZz1PbxRrJb9XL1454haMNr4snsKsU_gQYnuVz5YLDokBVHiUC4R9MBdesDl_J8A_gOBrofxXpOWNMHbQD7ghozAmHMfvWG-mGPnPA3o6_h2EA4wHLeo6ixIck56LuvXBeysaLkU9fLJ-Z7WoN64ZnQj-AKyuG7ih1dbb-V6v0LUqYyml5M-tbVq7FHLCyO-6_Yo7kx23x0S2G1GH-9NR_vCAYX3YPs4flWBwAKOzdeZ4dY1G9xgj3PVUY1dWqf1K1Hnxk6jZW1JfuRZrwfWLXOnufPjvf9Ur0Z8be6HFI9fBS1GGYzKI2XQYszFKIgRVY2-oqP_s2WKaRGgw29G7QVSwIoKrlRRltTKWaruqqJSrw1u4yrThe8L9m8gppfkW4EWy_-75MOr4tWHBSQS9jqiFHQ_UHTrrM2-9e_Hnv69Gx-dZaPwm0RsduDLlxaRxnBVu2gfbh68UUoQiViR4HRUJ7Kw6Tg-fP3RtXVQcm7pFqbTlPqsqpbn_poKzIwejL4H8ryMZPnJtfFYuIE0pYYRGBSnWNKO0LDBBhetDIrJGeRIlLEkZXvdtVBUEJKKSP_HnWUkt5Y_whJ1iVuCCnvDTOItxkqAEFSfbU0aijJGyRIjRLFsXUYQYInFK0jKq2Do7EacoQiQicRHnJCf5vGQFjZOC8CTL45hlgER8R4Wcu7nPld6c-E9OTvOC4PxE0pJL4_8tAkL7FWHQkvpPYM4BQv5zlJmqZ49UCuYuJxcn-nQf9hsDSCSFseY4jhVW-n_m0DcIkos_8xuek1bL0x__SMeD9o8AAAD__2QxgOc">