<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/78236>78236</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
llvm crash: Assertion `I->use_empty() && "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>
shao-hua-li
</td>
</tr>
</table>
<pre>
llvm crashes on the following code.
Bisected to 65c7cecb13f8d2132a54103903501474083afe8f, which was committed by @alexey-bataev
Compiler explorer: https://godbolt.org/z/5jjnhTYGM
```console
% cat reduced.ll
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @j() {
entry:
%0 = load i64, ptr getelementptr inbounds ([1 x i64], ptr null, i64 1, i64 0), align 8
%1 = trunc i64 %0 to i32
%conv8.1.i = and i32 %1, 0
%xor.1.i = xor i32 %conv8.1.i, 0
%2 = load i64, ptr getelementptr inbounds ([1 x i64], ptr null, i64 2, i64 0), align 8
%3 = trunc i64 %2 to i32
%conv8.2.i = and i32 %3, 0
%xor.2.i = xor i32 %conv8.2.i, 0
%4 = load i64, ptr getelementptr inbounds ([1 x i64], ptr null, i64 3, i64 0), align 8
%5 = trunc i64 %4 to i32
%conv8.3.i = and i32 %5, 0
%xor.3.i = xor i32 %conv8.3.i, 0
%6 = load i64, ptr null, align 8
%7 = trunc i64 %6 to i32
%conv8.4.i = and i32 %7, 0
%xor.4.i = xor i32 %conv8.4.i, 0
br i1 false, label %i.exit, label %for.body12.i.preheader
for.body12.i.preheader: ; preds = %entry
%.pre44.i = trunc i64 0 to i32
%.pre46.i = and i32 %.pre44.i, 0
%.pre47.i = xor i32 %.pre46.i, 0
%.pre48.i = trunc i64 0 to i32
%.pre50.i = and i32 %.pre48.i, 0
%.pre51.i = xor i32 %.pre50.i, 0
%.pre52.i = trunc i64 0 to i32
%.pre54.i = and i32 %.pre52.i, 0
%.pre55.i = xor i32 %.pre54.i, 0
%.pre56.i = trunc i64 0 to i32
%.pre58.i = and i32 %.pre56.i, 0
%.pre59.i = xor i32 %.pre58.i, 0
br label %for.body12.2.i.preheader
for.body12.2.i.preheader: ; preds = %for.body12.i.preheader
%.pre84.i = trunc i64 0 to i32
%.pre86.i = and i32 %.pre84.i, 0
%.pre87.i = xor i32 %.pre86.i, 0
%.pre88.i = trunc i64 0 to i32
%.pre90.i = and i32 %.pre88.i, 0
%.pre91.i = xor i32 %.pre90.i, 0
%.pre92.i = trunc i64 0 to i32
%.pre94.i = and i32 %.pre92.i, 0
%.pre95.i = xor i32 %.pre94.i, 0
%.pre96.i = trunc i64 0 to i32
%.pre98.i = and i32 %.pre96.i, 0
%.pre99.i = xor i32 %.pre98.i, 0
br label %i.exit
i.exit: ; preds = %for.body12.2.i.preheader, %entry
%xor.1.3.pre-phi159.i = phi i32 [ %xor.1.i, %entry ], [ %.pre87.i, %for.body12.2.i.preheader ]
%xor.2.3.pre-phi158.i = phi i32 [ %xor.2.i, %entry ], [ %.pre91.i, %for.body12.2.i.preheader ]
%xor.3.3.pre-phi157.i = phi i32 [ %xor.3.i, %entry ], [ %.pre95.i, %for.body12.2.i.preheader ]
%xor.4.3.pre-phi156.i = phi i32 [ %xor.4.i, %entry ], [ %.pre99.i, %for.body12.2.i.preheader ]
%xor.1.1.pre-phi108121154.i = phi i32 [ %xor.1.i, %entry ], [ %.pre47.i, %for.body12.2.i.preheader ]
%xor.2.1.pre-phi107122153.i = phi i32 [ %xor.2.i, %entry ], [ %.pre51.i, %for.body12.2.i.preheader ]
%xor.3.1.pre-phi106123152.i = phi i32 [ %xor.3.i, %entry ], [ %.pre55.i, %for.body12.2.i.preheader ]
%xor.4.1.pre-phi105124151.i = phi i32 [ %xor.4.i, %entry ], [ %.pre59.i, %for.body12.2.i.preheader ]
%xor.4.2.pre-phi125150.i = phi i32 [ %xor.4.i, %entry ], [ 0, %for.body12.2.i.preheader ]
%xor.3.2.pre-phi126149.i = phi i32 [ %xor.3.i, %entry ], [ 0, %for.body12.2.i.preheader ]
%xor.2.2.pre-phi127148.i = phi i32 [ %xor.2.i, %entry ], [ 0, %for.body12.2.i.preheader ]
%xor.1.2.pre-phi128147.i = phi i32 [ %xor.1.i, %entry ], [ 0, %for.body12.2.i.preheader ]
%or.1.1.i = or i32 %xor.4.i, %xor.1.3.pre-phi159.i
%or.2.1.i = or i32 %or.1.1.i, %xor.2.3.pre-phi158.i
%or.3.1.i = or i32 %or.2.1.i, %xor.3.3.pre-phi157.i
%or.4.1.i = or i32 %or.3.1.i, %xor.4.3.pre-phi156.i
%or.1.2.i = or i32 %or.4.1.i, %xor.1.1.pre-phi108121154.i
%or.2.2.i = or i32 %or.1.2.i, %xor.2.1.pre-phi107122153.i
%or.3.2.i = or i32 %or.2.2.i, %xor.3.1.pre-phi106123152.i
%or.4.2.i = or i32 %or.3.2.i, %xor.4.1.pre-phi105124151.i
%or.326.i = or i32 %or.4.2.i, %xor.4.2.pre-phi125150.i
%or.1.3.i = or i32 %or.326.i, %xor.3.2.pre-phi126149.i
%or.2.3.i = or i32 %or.1.3.i, %xor.2.2.pre-phi127148.i
%or.3.3.i = or i32 %or.2.3.i, %xor.1.2.pre-phi128147.i
store i32 %or.3.3.i, ptr null, align 4
ret void
}
; uselistorder directives
uselistorder ptr null, { 0, 1, 4, 3, 2 }
%
% opt -passes=slp-vectorizer reduced.ll
opt: /tmp/tmpsh4e_uyp/tmp761loz5y/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp:3357: llvm::slpvectorizer::BoUpSLP::~BoUpSLP(): Assertion `I->use_empty() && "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: /zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/opt -disable-output -passes=slp-vectorizer reduced.ll
#0 0x00007f4c73530f74 PrintStackTraceSignalHandler(void*) Signals.cpp:0:0
#1 0x00007f4c7352e734 SignalHandler(int) Signals.cpp:0:0
#2 0x00007f4c7286e090 (/lib/x86_64-linux-gnu/libc.so.6+0x43090)
#3 0x00007f4c7286e00b raise /build/glibc-wuryBv/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
#4 0x00007f4c7284d859 abort /build/glibc-wuryBv/glibc-2.31/stdlib/abort.c:81:7
#5 0x00007f4c7284d729 get_sysdep_segment_value /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:509:8
#6 0x00007f4c7284d729 _nl_load_domain /build/glibc-wuryBv/glibc-2.31/intl/loadmsgcat.c:970:34
#7 0x00007f4c7285efd6 (/lib/x86_64-linux-gnu/libc.so.6+0x33fd6)
#8 0x00007f4c74e282a1 llvm::slpvectorizer::BoUpSLP::~BoUpSLP() (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0x21cf2a1)
#9 0x00007f4c74e8acaf 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
#10 0x00007f4c74e8b6bc llvm::SLPVectorizerPass::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0x22326bc)
#11 0x00007f4c760069e6 llvm::detail::PassModel<llvm::Function, llvm::SLPVectorizerPass, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0x33ad9e6)
#12 0x00007f4c7371c96a llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0xac396a)
#13 0x00007f4c76002c86 llvm::detail::PassModel<llvm::Function, llvm::PassManager<llvm::Function, llvm::AnalysisManager<llvm::Function>>, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Function>>::run(llvm::Function&, llvm::AnalysisManager<llvm::Function>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0x33a9c86)
#14 0x00007f4c7371b4d6 llvm::ModuleToFunctionPassAdaptor::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0xac24d6)
#15 0x00007f4c7600a4a6 llvm::detail::PassModel<llvm::Module, llvm::ModuleToFunctionPassAdaptor, llvm::PreservedAnalyses, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0x33b14a6)
#16 0x00007f4c7371957e llvm::PassManager<llvm::Module, llvm::AnalysisManager<llvm::Module>>::run(llvm::Module&, llvm::AnalysisManager<llvm::Module>&) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/../lib/libLLVM-16git.so+0xac057e)
#17 0x00005617a00e31b8 llvm::runPassPipeline(llvm::StringRef, llvm::Module&, llvm::TargetMachine*, llvm::TargetLibraryInfoImpl*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::ToolOutputFile*, llvm::StringRef, llvm::ArrayRef<llvm::StringRef>, llvm::ArrayRef<llvm::PassPlugin>, llvm::opt_tool::OutputKind, llvm::opt_tool::VerifierKind, bool, bool, bool, bool, bool, bool) (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/opt+0x2c1b8)
#18 0x00005617a00d531a main (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/opt+0x1e31a)
#19 0x00007f4c7284f083 __libc_start_main /build/glibc-wuryBv/glibc-2.31/csu/../csu/libc-start.c:342:3
#20 0x00005617a00d5b7e _start (/zdata/shaoli/compilers/ccbuilder-compilers/clang-65c7cecb13f8d2132a54103903501474083afe8f/bin/opt+0x1eb7e)
[1] 2886338 abort -disable-output -passes=slp-vectorizer reduced.ll
%
```
This IR is reduced from the following C code:
```C
int a, c, d;
long b[1];
char e, f;
unsigned char g;
long h;
static void i();
void j() { i(); }
void i() {
e = 3;
for (; e >= 0; e--) {
a = 0;
for (; a <= 4; a++) {
int *k = &d;
g = b[a];
*k |= f ^ g;
}
h = 0;
for (; a + c + h; h = h + 1)
b[h] = 6;
}
}
int main() {}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsW91u2zgWfhrmhrAhkvq9yIWdxLvFtpig7Q6wVwYl0TZbWhRIKol7sc--ICXZkiwljqc7M9idIlUk8vA7P_x4KB0pVGu-LRi7BcESBPc3tDI7qW71jsrZrqIzwW9SmR9uhXjaw0xRvWMaygKaHYMbKYR85sUWZjJnc-DdA29RH5dcs8ywHBoJwyCLMpaliGziHCOCaeAjjyQeCTzkR74XE7ph8QbgO_i849kOPlMNM7nfc2Mh0gMEvkcFe2GHWUoNZU-wq-tO7ksumILspRRSMQXIAu6MKTUgC4BXAK-2Mk-lMHOptgCvfgC8Cr59K3Zf__W3T10kEHr1TyYLLQVrWnEAM2qgYnmVsXwuRN1uqNoyA3NqqKAHWRkIyD0EGLPZHpAFm5U48gBZEOwO9hL1L-1Z6LvDjLcnm9gOQjieFbE9CdsxoT_7gnAMMO7pN4qXgrW6X-JwHfqzqvheyOdiJnhRvcy2RXUcVR9ztuEFg0-S5za434DFTSCIlnU_K4w62PC5Kwhw4DkNQtIcWlPxHSyNgltmmGB7Vhh7xYtUVkWuoYULlgi-ONngvhUvKiHsOQ99iNoTD-DEnlPBtwWMG5VWJ3I6jaqKzEk6M4yEnOCOVCaLp3iO5txJ0yK3_W64RfVOLrxIdRR7kaoVO47vitsO_LNdxm-7TM5dxlMu43OXydAH6zOe8hmf--z_bJ_J2z4H5z77Uz6Tc5-DMZ_JlM_k3Odw1OfWiXN7o3N7wyl7_XN7ozF7_Sl7_YG9qYIcwQ0Vmtl2QVMmrDSfsxduek0bqeY2eSM85_NSsR2jOVPdNDAhQRYQkCUsFbOT7BJLUGeEk9FW3G-tPsViZH06yfA8Di3CMByuPTqPR4szKh9fakngTVgSjyMHIxmjxRmVxxdbMsKNFmEUOZiwZCKGQXixJfGEJRPRDpIJS4YxTNUoGy_h49uMfI3eR1PjiykaT1A0nghvPEHReCJo8cUUTSYoGk9QNJmgaDJB0eRiiiYTFE0mKJpMUDSZiGFyMUWTCYomE9FOJiiavEbRJod2CNm0vEG_PgHx3Vi-rG8-iJWblTuOjmuo3PHawGDZuUnposBma20kWvI1IlN2uFHDG4GO_nhaP35Tf4Leo_-4J3fUR9Pqydvqg2vc97v6w2n9_tv6kyvcR3N0VO_FCCN03AGu4oB_JQc6VkQIYxSQ38KE4DomdIwIESbouG1exYfgSj50rAgQ9tFxs7-KFcE1rPDn-GgEDtDx9uR9Fnjv9550FYfIfyUfvTIB71B8pFRHb4T86_LQFQ6jruIY-a9koFcW3zsVN-u-1nTaivrTObY39DHwCEYL3QEZJvg-CBkHwQOQYZrug_jjIGQAMsy1w5DgMRB_ADKeMYeRGYVCHfJMp71hfEah8ABqPHkNozQKRQZQ4xloYBUOx2M1hDrLI8OYk1GTcDjw7iwtDAM-ioM6WWJimQ-jPYqDBzgjq7bF0UYq1otuM_T88d1vxyhmXNWrucmL7nv1P7KElWaCW2S7lnOuWGb4E9O1QK-zqwVETWZwNSdXQ3CFDwxPKnBwqifK0sBZSbVmGpB7LcrZE8uMVPwHU2eFRlnWd6B4ZfZlfdQ7n62rQ3MVhUjIH8EB4JUQT3v7i6cAr74qWuiNVHsN8OrXVgHAqy8fH4-Xap6VJSALQoLIqnEIZAHIQovyZFXdtJT_LL98fKwv_t1eueKhHbvQminDZQFB6H2YAfJQabZm-9Ic2gojDgEOIcDYqAMvtvZunymqGeSFNqrK3OhnbnZ2JpSeA4wBjuCGcsHypsb8-PFh8eUB6irdcwMpTKstVKyUyli4QemXm12VzjO570RHPO1npZLfWGYAXnGtK2ZDVD9cFJmocuYq3K7gDVOafTeKZm2J-4uh2XeYV_vyWCH15sBLHpXcKrqHVG2rPSuMbmbtR04NBXild1QKDvAqayrWVmeWpRUXOVOzXqugxXZ2eeV8lfIC4JWjVc41TQWbycqU1TtoBgEmHvRePM_zoo2fRSQg3iby4aPihXFOf7VR-MK3BRV_p0Uu7NNO7JYTXtjZrbt0wyjP_T9ioz42ZhHx4RCMF-ZNINwFwnHIvMRztciW900RvFP8th3ZXMt5CPDSe_GJl7h65BGTnGF6KVSUa2Zn0E2RJZOFmT1X6rB8Ol7iOUF2dp3JAK_mc3t10Dkr7VRWBX-pG56cHUVlLx30PANkESBAFuhkid-3xM_jIIE0teS-1BKT13Fwo5yS2CqJTkqCoZIIJ3DLzLq2e63Z1jJ4_URFdXEEeGGs_0LSfK-3Ga1VB55NDfFJdzime12ItR24zuWe8uK3qUzq9y7-SWfU1xmwTR6-jzKEbPKwR5m4i-kzHGOKrs6ejTG_X6pwLK19Fzz9-PHXTzMUbrmZa-n8xSjbYIp6Hid9j2Oa0U3H496u8ki1rptVVXzYlwLg-CS6qgqX6d12cNfFyKig6uFJiqruX_T7v7qXXseN7UOxkRMyH3mqqDqMSiwWn5muhNFnPR-lLEeH3Ms9L6iR6qti7BxQ62pfWovvaLY7779ne1rkLF_yEZ2_lIbv-Q9qh39me6q-P7hXn6rJqgDH85IqM_dcahzZuzsJ0iZabzBPaZhmF83TZXO0KKg4aK4_0YJuLbfvRgaRBzfuT0hsTHCYZkdi24D1tqbQ88KEhR2Hc2YoF_W5jdcnmTMx7nafzGeB7nU_KqaZemJ5HVCmrwuz_fk_mj9CaJ6wsDd_vTsCEqEsCWk30HbOXnP2r7i_HXeakSSkvbCTwbLBWfwzls1_bbr-Wn0_Y_UlWdxfff5g9aV-3qXBJ5lXgn2VrXN2ehc5LY1U46GrB7wrcM2QP23YaIb9vB-1YLB4qE_ft3jaMN1dGOufxf5TrKe4_z84gYSkyKf9GQwHvE-CiF2Qxsbm7a94ny0YL4hYL9ztM1wQooh6HiMojTveqsqx_ZGXTPCC9QL0xShebD-zzdhqOYtb_fzwiWY7h_PW00X9cDOUklL84gowKy5GQH5T94Q7C6XowbZ2J_okO9wAR8VdCEW15cWZvCzN2kjZ5KTavH_wIn9N6lem-IYz1cqltufi378_LWVp6oeEDKVxj31xn315QBCFTanij7ERMYL692PJoLKy8WIC12vB02ytDVVm_Z7aSqardqHWp67T4bgqC_Hdl6xH9dgbhiiNGKwV_4FBSrtpJFgiENxDHMchIXFTVqv_XV03PRX228-Hu-8Uvu64hh8-Q67bgXCj5H7wAfWd-4T6WE4e4N01H6MUBlK7OjJ7yAFpPtYVstjCtPHt2JrtqIJum9kc26rCfe2dQ9e57SPsjpfaUMOz-utg3lb3mz7X2PleuCNwetfRHXn6qBjWXymTIxaEG6kcNcjSdT7Yfs9dzWb9sRBCCtvuU1sHwHbfWQnfXQG8dD8DEAhtGAFefG8-5AnzHiCEW9dh40m78aw764GR07OBIHjoRNH1tyGAuzetxUuYuaONfCO_cw2dspv7Z43ZWeJakfAEeXq51J5Y5-wi78T-KNPS6Sa_JXlCEnrDblHkBSTxSZjc7G6THJGY4Dj0CcGEejRksZ-GAcuYl6SE3PBb7GHfQyj0YpLgZE6DnGUoTLMkinI_TIHvsT3lYm43hLlU2xv3cuU2ijEJb9yHVtr9qQHGBXuGrhNgDIL7G-X-xmCWVlsNfE9wbfQJxXAjWOePEH6Xl003lRK3179Ncj7_JwAA__-RiQns">