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

    <tr>
        <th>Summary</th>
        <td>
            [SLPVectorizer] Wrong value truncation 
        </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>
          aleks-tmb
      </td>
    </tr>
</table>

<pre>
    - There seems to be an issue with SLPVectorizer. In the following example, a 2-byte wide value is incorrectly truncated:

```
define i64 @test(ptr addrspace(1) %arr, i32 %a) {
entry:
  br label %loop

loop:
  %iv = phi i64 [ 0, %entry ], [ %iv.next, %loop ]
 %local_1_7 = phi i64 [ 0, %entry ], [ %4, %loop ]
  %0 = sext i32 %a to i64
  %1 = add nsw i64 %0, 4294967297
  %2 = add i64 %1, %local_1_7
 %3 = and i64 %1, 1
  %4 = add i64 %2, %3
  %iv.next = add nuw nsw i64 %iv, 1
  %5 = icmp ugt i64 %iv, 355
  br i1 %5, label %exit, label %loop

exit:
  ret i64 %4
}
```
- In the loop we summarize the constant 4294967297 (`0x1'0000'0001`), but after running SLPVectorizer over the unrolled loop, the constant is truncated to `1`:
```
loop: 
  %iv = phi i64 [ 0, %entry ], [ %iv.next.16, %loop ]
  %local_1_7 = phi i64 [ 0, %entry ], [ %op.rdx3, %loop ]
  %2 = add <16 x i32> %1, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
  %3 = sext <16 x i32> %2 to <16 x i64>
...
```
- Command to reproduce: `opt -passes=loop-unroll,slp-vectorizer -unroll-count=17`
- https://godbolt.org/z/zcPefTPzW
- Looks like the issue was caused by the https://github.com/llvm/llvm-project/commit/7f2167868d8c1cedd3915883412b9c787a2f01db

@alexey-bataev Could you please take a look?

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEVktv4zgM_jXKhUighx_xIYdpMgEWmEOBHewcB7LFJNrKliHJadJfv5DsvLrtYXYPA7RxRH_6SJH8xEjv9b5DXJH8iXAuDZ7wPK9lkHgknJN8M5NDOFi3kgZf_Dy09ay26ryaw_cDOgSP2HoIFmoE2YH2fkB41eEAf357_gubYJ1-Q7eAPzoIB4SdNca-6m4PeJJtb5DwNUjg8_oc4kaFcJRmQNAedNdY57AJ5gzBDV0jAyoivhC6IfTyWdDpLy0V7nSHoIsMSEYD-kD4sg8OpFLO97JBwpeM8AoIz6Vz0bsWPK2StXwaibAL7nz1BVA7MLJGE5HG2v4-hrS-QQnP9RGI2EB_0GMo-RPQ6IrwPBEDyTdpnT-N8EWHpzAhIl0CjHzJ0kjzk_0sf4k1-5gvmmgi8ngK19PHGuoiuwOxBJJKQedfR488Tw4zXmVVUfKqvIPzK3yCsqv_KfrbgcSI7R6x7I4te8_GJzbxkOaUt1ucw-t9rPr4njVPUN20PQz78IgTeX5XbM0SPr641h1POjwY3jdCAtwaweHVxZRXUm4-bNv5RR6pVq8IfmhbGZWTrI3tfJBduEs8EL4kBaUnRnhJKaXjg0VKXsUo6yGA3AV04Iaui4p7UCTYI7rEPnTOGoMqOY87H1xqf9Ne7BFSjE7ExwKctAD_WwwLVnzev_9NELZfOHUSn9PeWpiINSvgFNVBxNdbN4t11Au7XBu_-4v4ehe9uIn63-HzVLuLuciuWxeLxSctubZtGyUaLDjsnVVDg6m0BbV9gHkvvUdPxCZmcj52EeFrb_r58dZm04t5Y4cuELFh5Z2LQwi9j63Et4Rv91bV1oSFdXvCt2_xv3nG3ffntx-XDd-sffFg9MsojGncSA-NHDwqqM_J_o5Xh8NQLxrbEr415nh5zHtn_8YmEL5tbNtGcW_LHWdFuSyWatmwBpUSFcuXS5ExXldNuSwl31Gm6ocZlNGHwQlrOxgFZztAb1B6hCBfEGQU2AsR23HXTK2EqkQlZ7hiJRcly9iSzg4roQTjrEBWNEWjlMobpSohZYE7JsusmukVpzyjS5bTilcZXdTVrsrLHdsptiuampGMYiu1WcRTxnTOUqJWjGYZ57N0f_lp5Kd8iC8Pd8M0-d0qZake9p5k1Ggf_I0x6GDSz4bHnfkGfjjb7acpPl0d2nYwG5xZ_XJhUuCe8O0U-3HF_wkAAP___ZVuTQ">