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