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