<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/113516>113516</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[SLPVectorizer] 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>
llvm:SLPVectorizer,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dtcxzyw
</td>
</tr>
</table>
<pre>
Reduced reproducer: https://godbolt.org/z/azEc6zjod
```
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-unknown-linux-gnu"
define i1 @foo() {
entry:
%tobool.not.not509.i.1311.i.i = icmp ne i32 0, 0
%cmp80.1319.i.i189 = icmp sgt i32 0, 0
%tobool.not.not509.i.1.1.i.i = icmp ne i32 0, 0
%cmp80.1.1.i.i190 = icmp sgt i32 0, 0
%tobool.not.not509.i.2329.i.i = icmp ne i32 0, 0
%storemerge.2333.i.i = select i1 %tobool.not.not509.i.2329.i.i, i32 0, i32 0
%cmp80.2337.i.i192 = icmp sgt i32 0, 0
%tobool.not.not509.i.1.2.i.i = icmp ne i32 %storemerge.2333.i.i, 0
%cmp80.1.2.i.i193 = icmp sgt i32 0, 0
%cmp80.1.2.i.i = select i1 %tobool.not.not509.i.1.2.i.i, i1 %cmp80.1.2.i.i193, i1 false
%0 = select i1 %cmp80.1.2.i.i, i1 %tobool.not.not509.i.2329.i.i, i1 false
%1 = select i1 %0, i1 %cmp80.2337.i.i192, i1 false
%2 = select i1 %1, i1 false, i1 false
%3 = select i1 %2, i1 %tobool.not.not509.i.1.1.i.i, i1 false
%4 = select i1 %3, i1 %cmp80.1.1.i.i190, i1 false
%5 = select i1 %4, i1 %tobool.not.not509.i.1311.i.i, i1 false
%6 = select i1 %5, i1 %cmp80.1319.i.i189, i1 false
ret i1 %6
}
```
```
opt: /root/llvm-project/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:2748: 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 "foo"
#0 0x00000000050d8608 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x50d8608)
#1 0x00000000050d5fbc SignalHandler(int) Signals.cpp:0:0
#2 0x000071afd7642520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#3 0x000071afd76969fc pthread_kill (/lib/x86_64-linux-gnu/libc.so.6+0x969fc)
#4 0x000071afd7642476 gsignal (/lib/x86_64-linux-gnu/libc.so.6+0x42476)
#5 0x000071afd76287f3 abort (/lib/x86_64-linux-gnu/libc.so.6+0x287f3)
#6 0x000071afd762871b (/lib/x86_64-linux-gnu/libc.so.6+0x2871b)
#7 0x000071afd7639e96 (/lib/x86_64-linux-gnu/libc.so.6+0x39e96)
#8 0x000000000414e3af void llvm::slpvectorizer::BoUpSLP::removeInstructionsAndOperands<llvm::Instruction>(llvm::ArrayRef<llvm::Instruction*>) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x414e3af)
#9 0x00000000041aa335 llvm::slpvectorizer::BoUpSLP::vectorizeTree(llvm::SmallDenseSet<llvm::Value*, 4u, llvm::DenseMapInfo<llvm::Value*, void>> const&, llvm::Instruction*) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41aa335)
#10 0x00000000041bcd90 (anonymous namespace)::HorizontalReduction::tryToReduce(llvm::slpvectorizer::BoUpSLP&, llvm::DataLayout const&, llvm::TargetTransformInfo*, llvm::TargetLibraryInfo const&) SLPVectorizer.cpp:0:0
#11 0x00000000041bfb71 llvm::SLPVectorizerPass::vectorizeHorReduction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&, llvm::SmallVectorImpl<llvm::WeakTrackingVH>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41bfb71)
#12 0x00000000041c431b llvm::SLPVectorizerPass::vectorizeRootInstruction(llvm::PHINode*, llvm::Instruction*, llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (.constprop.0) SLPVectorizer.cpp:0:0
#13 0x00000000041c8ae8 llvm::SLPVectorizerPass::vectorizeChainsInBlock(llvm::BasicBlock*, llvm::slpvectorizer::BoUpSLP&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41c8ae8)
#14 0x00000000041cf231 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 0x00000000041cfedb llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x41cfedb)
#16 0x0000000002f64f0e 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+0x2f64f0e)
#17 0x0000000004ed9788 llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4ed9788)
#18 0x0000000000e2773e 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+0xe2773e)
#19 0x0000000004ed81ae llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4ed81ae)
#20 0x0000000000e26e8e 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+0xe26e8e)
#21 0x0000000004ed7be0 llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x4ed7be0)
#22 0x000000000090a07a 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+0x90a07a)
#23 0x00000000008fce7c optMain (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8fce7c)
#24 0x000071afd7629d90 (/lib/x86_64-linux-gnu/libc.so.6+0x29d90)
#25 0x000071afd7629e40 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x29e40)
#26 0x00000000008f493e _start (/opt/compiler-explorer/clang-assertions-trunk/bin/opt+0x8f493e)
Program terminated with signal: SIGSEGV
Compiler returned: 139
```
llvm version: 33363521ca24f912cc25530f6cecbca53acce8a3
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkWltz4ygW_jXkhbJLAl0f8uDY8XRqu3dSSbr3MYUk5DBBoAKUbvev3wLJF2SlO-7J1E7NphxHCM7HOd85HG4hWrONoPQSxFcgXl2QzjxJdVmZ8tv37deLQlbbyztadSWtoKKtkvZRAbyAT8a0GuAFQGuA1htZFZKbuVQbgNbfAVqT79dl8v0PWYFgBYIFSILh44qGqA01sCKGcLKVnYEAryBAiM4agBd01qI0AHiBkfuyxdAv2qckcl8ztn8IUQbwIkTZrM6C4Um4V8lOPIlm97YZQp4qRrGW050a37LkMYlmnXgW8quYcSa6b7ON6PZS_XdFayYoZCEEUVBLCSxuDkF61ddTYdTWkuRKEKDYyEJKPhfS2N84yOdsHuIwnLM5c52zsmmhxcQIBgAt4cAYtNJl02aBbW_FWJjlBxG9MdMykz3O39Dhob--dZgHv9gdwih_m4HaSEUbqjZ0jjDGeyFNOS2NI_rHXVjAPXL_MKYPYZz29qBfpg9NmjNtwCtO7DHCHP9EibHE2_gYGjsWwqleh5qacE2PlAtO4T3JA-BPvXAKHp6CB2MNj7zzCgo6RQm9pqdiAMX4VAr92Jgh7F_RIjrFw6ds7wbOKyDxKUj0E6WGXPEKYHIKGJ9odUgfUyiK7iSTIdWlq8kcPirK1th5AaC1ktIAtOb8pZm1Sv5By13R_mEFQOsHRYSupWo0QOsvtDRSse8UoPX9x9t9Uc3LtgV4gdLIpnD4IlkFHQxeALzQvH3ZN-1fXcnP7f3H276gaCNf6I3QRnWlYVLohah-b6kiotIAZQekhVJke0drgJefAVoAfO2yeHz1lZkn-OA4PbQ-QgTxyiq20JoqW4aWDZTdzAC-7jR9pE1rtvtJYQnSJSScP8r6qJHu660r7CSMEguKss-aQoCSz8N8Yt3SKQGZXlFODa0AymBJtAF4eayQVT37PN9Q81lTtYN2H3wFrStdwUIDlNipzqgtExtoJKSKaArZAQ06-ztNlZ7bmQ-lsCaM02reu_z24_Xi_hrqrmiYgQQW3cauEqQyFm60QmDmqSvmpWyOYsGPEKZ1Z-lYQyIqyETJu4pC80RhqYh-ggUpn40iJR26vzekfIZV17T7KTaYgyC_VXKjSAOJ2nQNFUYPcWkjFK1L2bSMUzWj31oulSVpXXIiNjOyc6OeGdWJZ4DWBRO9IJxJC0Ha1pY703ZmruHsHs5aK6YBXmnezg4BCQFeatmpklqfOOVCq9xdJ4Tl24pZ-utO9J5DmQ_gHIWgFLCRVWeXJgh5mLulCJqCHWM5oF1frl-7WkH7_IgDGHwLdj9xUGVJkB0Ptq3uH24VE8Yx_2Bd4Y0jRb4-Sm0UJY2LryVkwvTRlv1J_gG6Cr4Nallm9nqHI73juijhPdsIwj8QUXE3CAY1-td6SCuB-90DoQEoDUldpUmEYhQMivc5a1gTHq0FbUU513KeOPWciKcc9jHzJK9L2JonRUn1-Mw4P68DJ-91EI2VjtIEbrSz81zlozTxsGMfG2VpjSEp7Og-C9kJesjJCXJYnI0ZFh5m6mPinObJeZhOxMPMjmMrCiOKSf2-sxBeTs8rLo1PTlDT7Q-T1vuMtMFYj43cZ4MQjOMziNhXPijqp437hnC-okLTe2o8E78Q3lFrHFrCqLPfhzon8Im0N6KWrwpZZ1lm8DUspdBmSEuvkvieDDqC9gzaVBX4DBZllbsUQ4QU20Z2GgrSUN26vJr3Cn6wnElhCHf78D46bIVR2wfZ7809Nn_gh7HxK2LIx377Pc3Og9sb7xdrjuqe2HGbj6xQRG1tiyOsHE6t544Sr2UlHLFSF2l4hO8h3BKtR-H0QaoDM8dE3H64-bes6InCY5cf110RzcorLsvnk6ozeHUB3St907Tci87_UOJmzmcmNl8-uFGbvGvYOf68sEM-wWWEw-IMgu-kNB5n_zOOHUtzF16tku08eGOE4REBGaHZGQQsnwgT-kYMOmfvZsr7ONyZ4zk8Gtlb22XST-1VnXDRemzger86HYd4SThR1y-Sd5NO_qXMcdJisbijuuNGn9R8lLKdFFnJhglipOqnmTGg1l3TWo2XpHw6rV_RhoiKVldsos_fW8Ma9p1Y8TvaEPV83TBjrLd2M8e8Jcq8OS7jsZ9o9YaBqTrxNh8tBOFbzfQnIsjGBuFyQuj9E5Azw4vH5NhOVCdRHdAjPStqCONDQiFaf5IV5dPa-jF4ws8vmW8_f39eB9o8XlMvfmiVp9lxXnNc_kjHfzBdAxseXd5yPqAoTfF7hOFfRvM_2D09-Z538lEwZyE59s4ndwjyIHcqWdYXFWmNVNMG9wJnmTuI_AWxaI05thYFo1hMaHZeLO7MW76Ro18g4bVQ-vsw2_PmERuOwigtaPCGwTpF5z-FpYEFjyZvTxDkAQlScqSl6lzw3LKWciZG23WjmNjc0Xoq-F7ZQn4i5ZPD-dkSsF-BjltJyX93Z65rxidA_lT1K-ZMHrk4Tni3YeI0Px_aa1P17_Znu3jpTo38rRPR-qpjvLKudOdOE1lftubRSDlkgt6KfzFR_ajVF6pYzajatStszdl_3y36-tjygs_bjwVZXdK0hLI1nwgT79Vtj-p1OzosRflw_HLGsaMV8TDHh6Q5jQL4-GjFHrUhyjw2B6Pe3AuN_F6SEWFRjins8d-PLwu673V3h2KocvspWvWXQf3RMsALeH_z2_31b1_65suh4-GaitoBAEOcT94U2sCFL1Tp_iwLYowTHKOwJCiq8xCVJYpjHNRJScuiJDEmZUkzgi-qS1zlOCcX9DJMUZ7iPIyDi6fLsqJpjKogwkEZZTnGSRxVWVBkJUY4y-oLdokCFIUBigIcxHEwr7MoCYIYFUWaVUkZgyigDWF8bnWbS7W5cJdRl2GI4zC54KSgXLt_kkFoGHfe7sPdji0BQu6maibF7IVwVtnX8epCXbqbrqLbaBAFnGmjDx0ZZrj7_xsfMF79H14rXnSKX_76veHgrZdL9N8AAAD__7ukEys">