<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/108620>108620</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Assertion `(I->use_empty() || all_of(I->uses(), [&](Use &U) { return isDeleted( cast<Instruction>(U.getUser())); })) && "trying to erase instruction with users."' failed.
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          TatyanaDoubts
      </td>
    </tr>
</table>

<pre>
    To reproduce run the following test with -passes=slp-vectorizer
```
; ModuleID = './reduced.ll'
source_filename = "./reduced.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-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @wombat(i32 %arg) gc "statepoint-example" {
bb:
  br label %bb1

bb1: ; preds = %bb1, %bb
  %phi = phi i32 [ 0, %bb ], [ %add27, %bb1 ]
  %phi2 = phi i32 [ 0, %bb ], [ %add24, %bb1 ]
 %phi3 = phi i32 [ 0, %bb ], [ %xor26, %bb1 ]
  %add = add i32 %phi2, 0
  %add4 = add i32 %phi2, 0
  %xor = xor i32 %add, %add4
  %add5 = add i32 %phi, 0
  %add6 = add i32 %phi2, 0
  %add7 = add i32 %phi2, 0
  %xor8 = xor i32 %add6, %xor
  %xor9 = xor i32 %xor8, %add5
 %xor10 = xor i32 %xor9, %add7
  %add11 = add i32 %phi, 0
  %add12 = add i32 %phi2, 0
  %add13 = add i32 %phi2, 0
  %xor14 = xor i32 %add12, %xor10
  %xor15 = xor i32 %xor14, %add11
  %xor16 = xor i32 %xor15, %add13
  %add17 = add i32 %phi, 0
  %add18 = add i32 %phi2, 0
 %add19 = add i32 %phi2, 0
  %xor20 = xor i32 %add18, %xor16
  %xor21 = xor i32 %xor20, %add17
  %xor22 = xor i32 %xor21, %add19
  %add23 = add i32 %phi2, 0
  %add24 = add i32 %arg, 0
  %xor25 = xor i32 %add23, %xor22
  %xor26 = xor i32 %xor25, %add24
  %add27 = add i32 1, 0
 %icmp = icmp ult i32 %add27, 0
  br label %bb1
}
```
Reproducer: https://godbolt.org/z/77hKre61P

Stack dump:
```
opt: /root/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2663: void llvm::slpvectorizer::BoUpSLP::removeInstructionsAndOperands(llvm::ArrayRef<U*>) [with T = llvm::Instruction]: Assertion `(I->use_empty() || all_of(I->uses(), [&](Use &U) { return isDeleted( cast<Instruction>(U.getUser())); })) && "trying to erase instruction with users."' 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/compiler-explorer/clang-assertions-trunk/bin/opt -o /app/output.s -S -passes=slp-vectorizer <source>
1.      Running pass "function(slp-vectorizer)" on module "<source>"
2.      Running pass "slp-vectorizer" on function "wombat"
 #0 0x00000000050106b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x50106b8)
 #1 0x000000000500ddfc SignalHandler(int) Signals.cpp:0:0
 #2 0x0000737fffa42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
 #3 0x0000737fffa969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
 #4 0x0000737fffa42476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
 #5 0x0000737fffa287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
 #6 0x0000737fffa2871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
 #7 0x0000737fffa39e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
 #8 0x00000000040b91cf void llvm::slpvectorizer::BoUpSLP::removeInstructionsAndOperands<llvm::Instruction>(llvm::ArrayRef<llvm::Instruction*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x40b91cf)
 #9 0x000000000410b80a 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*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x410b80a)
#10 0x0000000004115bed (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#11 0x0000000004118321 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4118321)
#12 0x000000000411cb18 llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::TargetTransformInfo*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x411cb18)
#13 0x00000000041212fa llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41212fa)
#14 0x0000000004127719 llvm::SLPVectorizerPass::runImpl(llvm::Function&, llvm::ScalarEvolution*, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo*, llvm::AAResults*, llvm::LoopInfo*, llvm::DominatorTree*, llvm::AssumptionCache*, llvm::DemandedBits*, llvm::OptimizationRemarkEmitter*) (.part.0) SLPVectorizer.cpp:0:0
#15 0x00000000041283cb llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41283cb)
#16 0x0000000002efda4e llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x2efda4e)
#17 0x0000000004e12948 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4e12948)
#18 0x0000000000e06f8e llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xe06f8e)
#19 0x0000000004e1136e llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4e1136e)
#20 0x0000000000e0679e llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0xe0679e)
#21 0x0000000004e10da0 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4e10da0)
#22 0x00000000008fb642 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) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8fb642)
#23 0x00000000008ee4cc optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8ee4cc)
#24 0x0000737fffa29d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#25 0x0000737fffa29e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#26 0x00000000008e5f9e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8e5f9e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWl1v27jS_jXMDWFDor4vcuGPeBts826QpH0vA0qibJ5QpEBSbbK__oCUbIuy0rW7WWDRU7i2JM48M_PMkBxJwUrRLSfkGkRLEK2vcKt3Ql4_Yf2GOV6LNtfqKhfl2_WTgJI0UpRtQaBsOdQ7AivBmPhO-RZqojT8TvUOzhqsFFEgWCvWzL6RQgtJ_yQSeGvgLUDs9Z_uNFjCO1G2jNyuIQjWEKBkDtBGEmOnnDMGUNKJKtHKgjxXlBGOa9JLo7E06qQ1lluiYYk1ZvhNtHovT2Y1CBZk1qDEA8EiQPbLnPruqTmKQ_s1o4cDH6UgWPgonVWp1x9xeyneq8fh7NFepubyrEH7gbT_H6BuDI291ZI27BDZaxo_x-Gs5S9cfOczRnn7Otvy9qDVfZekopzAb4KWEITed1HnWAOU0gBBgCIstwBlcFsYSKWxJo2gXM_IK64bRgBCECTLDirPQdCjQphLyHBOmAHJc39o0pwGC2iS10hSqt5jK4ZW3dEeBqCo2VErYX6tV9ESegdBCKK1PYmW1t-yRMlh0LejDhS6DCucxOqggvOhXoVE8btu4bK0UOa35914auQ9Vyw8R-5VSCtmfvdpLMveugFxMaMJzAnT8ZkuJme6mE74uKfoVUhXOBsLG4BjRNExL69C-t6EdHaUTlyHff88Anx0JgN-cCYFfjjBgY-OJPhjhWgiMj88hub7I4V4SiEaKAQj36fSNxVj-lcx9nLZmVygk6RZKwMu4pGCPxEa8gahJSMFNKXgDxQyN0Z0Vh7tKjEWtMvmaYwn6bNWjjHul-aDwlT60CB9aDSXkZs-f5QQWtSNFbAHLdNDPxLH4-n1O1lP7sMP-61dmoV9p3WjzFaANgBttqLMBdNzYSjZ_AnQJkl2v0sS-_fDTeFR4-IFlm3dHDaRkRHRaLttoI0UQgO0YexbPWuk-A8p9qfmh-YAbZ4k5qoSslYAbb7uuwiANo-f7w-ncl40xhyK48BA203QwgQLECwUawb9h720FF-ax8_33YkktfhGbrnSsi00FVwtePlHQyTmpQIoPSItpMRvD6QCweoLQAsQ3JhNFURL2_I82ZQcpQeIZp8IFnChFJHmHBo2UHo7A8FNq8gzqRv9BlBq4ZIVSFYQM_YsqoGQ6sb73Qig2G5N6RdFIEDxl051CSXRreSQqjVhRJMSoBQWWGkQrIYOGdfTL_Mt0V8UkXto-wmW0BSIPTHQwJQvQlq-2RZPQCKxIpAe0bqWr1VEqrnpS1ACK0wZKeddyu8_3yweb6Bq85pqiGHebk0bKaQ2cKM6o3rX5vNC1INacCuEKtUaOjYQ8xJSXrC2JLYTLSRWO5jj4kVLXJD5uzXpzYGX3UuxlbiGWG7bmnCt-ro0FYo2hagbyoickdeGCWlI2hQM8-0M79OoZlq2_AWgTU55pwhnwkDgpjHnrW5aPVdw9vhuQwxBsOqaWpMT65xvnHtoOTd8GzVDf9XyLnMoHXXUJlEICg5r20IbYQdzvxqhKdgxlgXa2zIC-04SHZafwIPeq7f_F3m-F-fpcL69qe7gXlKuLflPJhvOVJL4-7NQWhJcg66lolx3BZf-zRQAtPRee7cMOQe_fddvryyrAj7SLcfsE-Yls_Ogd6O7rPqVxbP_D0CoB0qCpKoqHKLIbHvW8W7Z6pv2QbNuBoq5EvPYumdVHOcCFzOLs6qAjd5JgsvnF8rYZQasvmMgHDsdJjHcKhvnpc6HSexgRy42SpMqgDg3E_wiZKvoIMcnyH5-MaafO5iJixlkJIsvw7QqDmY6rK3QyzO_qD52IwpW01uLXckn96hp-eO-9TEzrQ_WYSNz2PC9PPXwBUQcBp8kcZeNO9x0274T3lfMWmICQ6uBlccaMzYhPSIDrSBqLSVD5TXhitzh5l07LbfPTMpu3ZpSveWVeFfdlMaJ0ZJoTJmLco_p-8E6TgQ3J4AuBUqX3eXmR5g_T2Bn3euPYSG40v3iPgl6WzfsJ9w6XO1NjgyMvfu4Qu_q-FDoZkfx3EL3o5yUxh7mgr_VolWQ45qoxm5_WefgJ1PagmvMHki5n8RmQMu3J2GvuUX_g-kyDn6NNf7cPemapv_JPmM6tNW2RscEdzKfaS6xfDMSA6wMTnXeg_3RsOKPWEkD5A9LYIhwj5UazfpPQh6ZGRJx_-n2_0R5WhGnBXkcW2JFiyUTxcvJ0AW8nkPbaWUfx_6fYNsEvVC-_fppX7YfWJqWY6c00SgJRe6nFyThQQjt8PqvzsNHMmmIcpgMXCaRjyp8AZOrHaZc3fI--PQjOPnAeG04TrzhKN4k8bO_jle23Jb9MMDN4aZlvAsUmGF5802wdrJafmqZOpFYLB6IaplWJyOfhWgmVdaiphxrIbvWYwyoVFs3xuMVLnan42tSY16SckknbP7RaFrTP7FRfyA1li83NdXaZGtfwfMGSz33zlxmo1Ge0qDIz8rTeTlacMzeFFV3mOMtcXfmg9LHr2Q2DKce42GciFQlDsk7XZMJ806UhE1769bgCT8_Fb75_Pt57WlzeE2c-iE-ysLhDmG5_JGPvzBdPRsOXc4tnke8uEo_ogz_MZp_4fR05DvZyUbF7AfxMDvd6-UnsXfJsL4ocWPvbaYC7hQuCrdX-Qdq0QQzjBZ541pMsstqcR_e6kyOfoKE90rp38Nsx5tDrD8qI6_E3hmTdYrOX4WlngWHJufmwkurPA7RwEvZ2uK5pw1hlLt3s49aUr59INVU8b3T8N_hYmdx_qoF7DrQsZQQ7A_7KH5D2QTI3xp-J5zJx3CWE9ZuKT9dn4_yh-chh0f-war7uw7nHgwrtWwpK00q7bPIiVVfNPpZC9GvBF0Uv1Ne_kjqK5G0okTu5XIzcvHvh1VfV1tO8QVu8RESFgUUjb7DlH-YWYvqmB09QEdZmV341N-qOJjjB-cZCT34_GzUnpXGUj_Xx6DOtkJC10o8IiyqMgI7_I_jy4AerO5frWki7f0UKbt3hN3rBhAs4OPtb483v33txFe94f7tJTETAPpBNnqBfFVeB2UWZPiKXPsJilHkB350tbsmaZYnsVciPy8zL07j0E8DD2ehV0WEZOUVvUYeCr3MD_zUj_xonlck9TDx04RgEhUpCD1SY8rmZlrMhdxe2beM176Xxsi7su_Qlf37OIQ4-Q7tKEAIROsreW1fUObtVoHQY1RpdYTRVDNy_b_35veqlez651_t9rx_u0b_DQAA___ucxMS">