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

    <tr>
        <th>Summary</th>
        <td>
            [SLP Vectorizer] Assertion `I->use_empty() && "trying to erase instruction with users."'
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SLPVectorizer
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
            alexey-bataev
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          serguei-katkov
      </td>
    </tr>
</table>

<pre>
    LLVM HEAD crashes on SLP vectorizer for the following bugpointed reproducer:
`target triple = "x86_64-unknown-linux-gnu"

define void @test() "target-features"="+avx" {
bb:
  br label %bb436

bb436:                                            ; preds = %bb436, %bb
  %inst441 = phi i32 [ poison, %bb ], [ %inst578, %bb436 ]
 %inst443 = add nsw i64 poison, -1
  %inst444 = mul i32 poison, -14
 %inst446 = sub i32 %inst444, poison
  %inst447 = getelementptr inbounds i64, ptr addrspace(1) poison, i64 poison
  %inst449 = sext i32 %inst446 to i64
  %inst450 = sub i64 poison, %inst449
  store i64 %inst450, ptr addrspace(1) %inst447, align 8
  %inst454 = or i32 %inst446, 3
 %inst457 = add i32 0, %inst446
  %inst458 = add i32 %inst457, %inst454
 %inst463 = add nsw i64 %inst443, -1
  %inst466 = sub i32 poison, poison
  %inst467 = getelementptr inbounds i64, ptr addrspace(1) poison, i64 %inst443
  %inst469 = sext i32 %inst466 to i64
  %inst470 = sub i64 poison, %inst469
  store i64 %inst470, ptr addrspace(1) %inst467, align 8
  %inst474 = or i32 %inst466, 3
  %inst476 = add i32 %inst458, 9
 %inst477 = add i32 %inst476, %inst466
  %inst478 = add i32 %inst477, %inst474
  %inst483 = add nsw i64 %inst463, -1
  %inst486 = sub i32 poison, poison
  %inst487 = getelementptr inbounds i64, ptr addrspace(1) poison, i64 %inst463
  %inst489 = sext i32 %inst486 to i64
  %inst490 = sub i64 poison, %inst489
  store i64 %inst490, ptr addrspace(1) %inst487, align 8
  %inst494 = or i32 %inst486, 3
  %inst496 = add i32 %inst478, 9
  %inst497 = add i32 %inst496, %inst486
  %inst498 = add i32 %inst497, %inst494
  %inst506 = sub i32 poison, poison
  %inst507 = getelementptr inbounds i64, ptr addrspace(1) poison, i64 %inst483
 %inst509 = sext i32 %inst506 to i64
  %inst510 = sub i64 poison, %inst509
  store i64 %inst510, ptr addrspace(1) %inst507, align 8
 %inst514 = or i32 %inst506, 3
  %inst516 = add i32 %inst498, 9
 %inst517 = add i32 %inst516, %inst506
  %inst518 = add i32 %inst517, %inst514
  %inst536 = add i32 %inst518, 9
  %inst537 = add i32 %inst536, 0
  %inst538 = add i32 %inst537, 0
  %inst556 = add i32 %inst538, 9
  %inst557 = add i32 %inst556, 0
  %inst558 = add i32 %inst557, 0
  %inst576 = add i32 %inst558, 9
  %inst577 = add i32 %inst576, 0
  %inst578 = add i32 %inst577, 0
  br label %bb436
}
`
`opt -S -passes=slp-vectorizer  ./repro.ll`

The bug is introduced with the patch:
`commit e03d254bbd548d56fba43f805acb5fa31694d602
Author: Alexey Bataev <a.bataev@outlook.com>
Date:   Fri Jun 17 10:15:23 2022 -0700

 [SLP]Do not reduce repeated values, use scalar red ops instead.

 Metric: size..text

 size..text                 results     results0    diff
 SingleSource/Regression/C/gcc-c-torture/execute/GCC-C-execute-980605-1.test 445.00      461.00  3.6%
 SingleSource/Benchmarks/Adobe-C++/loop_unroll.test 428477.00   428445.00 -0.0%
 External/SPEC/CFP2006/447.dealII/447.dealII.test 618849.00   618785.00 -0.0%

    For all tests some extra code was optimized, GCC-C-execute has some more
    inlining after

 Differential Revision: https://reviews.llvm.org/D132261`
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysmN2O4joSx5_G3FhBjhM7yQUXfAy7s-ojtU6vzu3ISSrg7RBHtkMz8_QrOwwQMNMaaVot2kBV-V_lX6pTEcbIXQewQGyFKBUtnOB7VAor4IgoRWwzE4PdK70woHcDyOhd2Hd1nJWq_r54efnnL_zvL8sNrrQwezBYdfjt5RUfobJKyx-gcaM0tnvAjWpb9SG7HS6HXa9kZ6HGGnqt6qECjZIlIhtElogTK_QOLLZa9i1glGwwovSU8288jYbuvVMfXdTKbjhFu25wKkdH_1pDIzvARyVrjFJiwVhEc0QLF2MMHDUg7KDBONdk417pShxPiFKMstUYpywvijAuNW5FCS1GlJVlmvDbHccPkiX-jR-UrHCvoTbn7M5R6Xpc_9wXUSY7Y9M09nb9XmKZUIzYCvdKGtVdPDBiG_-GrX56sSy_fJ0m3FuMcS9hEx9W1DXuzAeWPL0JG8UPKlJvfhhar-LWNL2PzL2pGcpR8CWCMz873kfPvMsOLLRwgM72VmPZlWroauO0eVernVxtelEBonnsDvYq5CaD--jFKAhOdqqIY6t89DsHRq4ZTOpyjfjTxVilwVtdnZ-KvabrTEQrdx3OHzYfK630nVbnktyVmmWXQ3TGZKKRP0TOJ9bXILdu7P44-SMoV4bCsPApAdf6hc-H_6HTv5F1v8MTAvgzArLPCOC_ICD7nAD-KwKyIAF8QsDVmIcP1V__xd1ZZlnQOOOT1B7AycLgZBNwsoci5s_J4U_IyX-PnPwPk8Mfyps_ISd_Rk7xGTn5L8gpPicn_xU5RZCcPExOESYnm5BztQ6jU0zQyR_QKcLoFBN0ivsqMvJbHDDyhznI7xotI2EMnM4gBiz-BANGnmPA4k8xYCSAwcU9RAEjQQpYHKagCPUPFgchYDGfZHYPAYuDELD4FgIWP9QwCUpjcRBQloS1jXdW5ME6LCnJgtYsrCQJK2FhJSysJPxfmbGwknC7ZyysJNzvWRZWEm7zLJsqeXY_nG0u9_CXheotjt5w1AtjwKBkY9o-upkP8BzRrZ8D5m17dfSv_92DmxawNFh2dpwUavwh7d6PFL2w1f52cKjU4SAtBpLUlKVlWbM0rxlvSpEmTU6YqErWiCTmRVpzcp4bln6-cTfwSz_94JWffjBK1mJ-noRSogbbKvU-r9QBJV9Gz42wMN74b7XE_xk6HGc4JihZxgwlS5pgSijFEcnIJC13l_728orYZqNwpyzW4DJz0xAINxYdRTu48WSNBwPYVKIV2hlh1btKGAuink8i_gVWy8qJMfIHzOcWTnZicP34YRjRYIbWmts1cetaNs3Z-012uxbe1KBdG9r-DTsNxkjXzrZrRLe7qoqqyCrt5ipEt3CCarBu9a_1OlpH5_dRkRNOWBTP3VyG05TNCRlFpDz262TOEWXhbVfQVfuD0O8G0e2yViVEa0RX_nfbKtV_Gzqt2vYcneZplo0buPW4WUTm5LrBl5MF3YkW0e3b6xeXyXr7Sonrk9s0zeY1iPbr18mbMTiP8zwtxuA8zrP8MfjPiwXjrdJYtC12ngYbdQAMJ6sFrlQN-EMYrHorD_IH1O7MJyXDe3F2OSgN15iya2XnpmnRWNCTHTeyaUBDZ6Vo8d9wlP6gkiXeW9sbd73Qrb_mjhI-zLxtj4e50jtEt5s4oZTHiJNZvUjqIinEDBYxzzJWkDTOZvtFJYCxvEoboLGoGl7UTIiqbpqUZBmtYCYXlNCEUJrHCSVxNk8aTnMCRVzWDYNaoJTAQcj2svFMGjPAgseEkZnvK-b8OMJZoGT59vL6z6VhnJ9K6IX7MiqHnUEpaaWx10xmVtrWP9J4e3nFN65sg5fGgLZSdRhx8jVCyZfBwDc49Pb75TkBR5T7xwX6u6uwVRi0MOCvPD1U3ts3ocGANnP_ACGbDbpdTCu8k3Y_lL5l0K3PZfwT9Vr9DyqL6Nan7nD22f8_AAD__6Ht8XE">