<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">