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

    <tr>
        <th>Summary</th>
        <td>
            [SLPVectorizer] Crash during horizontal reduction (size() >= N && "Dropping more elements than exist")
        </td>
    </tr>

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

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          annamthomas
      </td>
    </tr>
</table>

<pre>
    We crash in SLPVectorizer during horizontal reduction stating we remove more elements than present in the ArrayRef.

Here's reproducer.
cat upstream.ll
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

define void @ham.27() #0 {
bb:
  br label %bb169

bb169: ; preds = %bb
  %shl183 = shl i32 0, 6
  %shl187 = shl i32 0, 8
  %or188 = or i32 %shl183, 1
  %add189 = add i32 %or188, %shl183
 %add190 = add i32 0, %add189
  %shl191 = shl i32 0, 10
  %or192 = or i32 %shl187, 1
  %add193 = add i32 %or192, %shl187
  %add194 = add i32 %add190, %add193
  %or196 = or i32 %shl191, 1
  %add197 = add i32 %or196, %shl191
  %add198 = add i32 %add194, %add197
  %shl199 = shl i32 0, 14
  %add202 = add i32 %add198, poison
  %or203 = or i32 %shl199, 1
  %add204 = add i32 %or203, %shl199
  %add205 = add i32 %add202, %add204
  %sub206 = sub i32 poison, %add205
  store atomic i32 %sub206, ptr addrspace(1) poison unordered, align 4
 unreachable
}
```

Reproduce with `opt -passes=slp-vectorizer upstream.ll -debug -mattr=+avx`

Failure is Assertion failed: (size() >= N && "Dropping more elements than exist"), function drop_back, file ArrayRef.h, line 211.



</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVU-P46gT_TTkghzhwn8POaQnv-h3WK1WM9LucYRNJWYHgwW4p2c-_QqcTDtpa08rJRUD71VeFXI94b26GsQDKV9IedqJOQzWHYQxYgyDHYXfdVb-OPyFtHfCD1QZ-uW3P_7EPlinfqKjcnbKXOkQl9YEoalDOfdBWUN9ECEefkfqcLSvSEfrkKLGEU3wNAzC0MmhRxNi5jAgPTonfnzGy56wE2HHJf4fHRKoPXU4OSvnHt3tvBeBzpMPDsW41_pGqtjtk5ZBuCsGKkUQWvywc6CEnygBwGwk_IjZBDUj_MghhbjMH5fxqSpSyNT94dJEUg5NZpr4UN05VZF9SdsqbmcT3A-a25fDcgYE4EFicGrSeJf31lRfqyKbzTdjv5tMKzO_ZVcz_2ItUeJFGaSvVklKCjaIcQ81gYZASwlwRkn9siC7jvAbidLOUS061JRA2XV51a5zLhv8SAl_iTck_U1U2XX3BARKP-i84enID5oqDpQR-ESrZ0z9EdOsMNblTZMg1iXEr9wRma-QQsq8aRNUSHnHJn6EvvMWyo3RsgcGu0GXZE9a2_yj1pw9im1hS2y9JbblG2JbWIutnynFM2WpYaW65U-Cqg1Bbb4pqN4SVK0EtR8ozaagYi2ofm5ju9HG4jExMNhMnK5ysspb81AmML5VZrtRJrAPTUz8dZntM6XcUAMM3ssEtq7Azx2wpfF-7hLnJnpFKO8EH-LsE8GOqv8lP2VI1QYX_9j5SfRIoMnj27tko7OxTqJDGYFCq6uhdxmzcSj6QXQab69vfdqcgUv8fB-f9LsKAyUVs1Og2SS8R0_4yespe32f7avBSjOJ3Xyl2ShCcISfCLyI17en_Geh9OyQKk-P3qNLLnARSqNMwwQar37ifTbx_8XW_U4JVASqOPFOzk5TdIwNn8A35UMcfZDu-zKbxWSks9PXTvTf0q7SKwsZ4paOwxHy_MFQlriTBy5b3oodHvKqzStWsCLfDQfZtayrWJ3LruEoZN7kgnUlv_Rtk1d5sVMHYMBZw9q8Yaxg-0LIssOaIStrIWpJCoajUHqv9eu4t-66U97PeKiKsmp2afD6ZLoAEUH48cFWU52fCEBy3bgqTzt3iNCsm6-eFEwrH_x7-qCCTjb-mKc80U_JuP_Np_-re9nNTh-GECYffQbOBM5XFYa52_d2JHBOlS4_2eTs39gHAufUGE_gnHrzTwAAAP__N3xjcg">