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

    <tr>
        <th>Summary</th>
        <td>
            [SLPVectorizer] Miscompile in SLP vectorizer
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            miscompilation,
            vectorizers,
            llvm:SLPVectorizer
      </td>
    </tr>

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

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

<pre>
    The following IR
```llvm
define <4 x float> @foo(i64 %0) {
entry:
  %1 = trunc i64 0 to i32
  %2 = sitofp i32 %1 to float
  %3 = sitofp i64 0 to float
  %4 = fadd float %3, %2
  %to_max.i = fcmp ogt float %4, 0.000000e+00
  %5 = trunc i64 0 to i32
  %6 = sitofp i32 %5 to float
  %7 = sitofp i64 0 to float
  %8 = fadd float %7, %6
  %to_max.i.1 = fcmp ogt float %8, 0.000000e+00
  %9 = trunc i64 %0 to i32
  %10 = sitofp i32 %9 to float
  %11 = sitofp i64 %0 to float
  %12 = fadd float %11, %10
 %to_max.i.2 = fcmp ogt float %12, 0.000000e+00
  %13 = trunc i64 0 to i32
 %14 = sitofp i32 %13 to float
  %15 = sitofp i64 0 to float
  %16 = fadd float %15, %14
  %to_max.i.3 = fcmp ogt float %16, 0.000000e+00
  %r0 = insertelement <4 x float> poison, float %4, i32 0
  %r1 = insertelement <4 x float> %r0, float %8, i32 1
  %r2 = insertelement <4 x float> %r1, float %12, i32 2
  %r3 = insertelement <4 x float> %r2, float %16, i32 3
  ret <4 x float> %r3
}
```
Is optimized by `opt -passes=slp-vectorizer` to
```llvm
define <4 x float> @foo(i64 %0) {
entry:
  %1 = trunc i64 %0 to i32
  %2 = insertelement <4 x i32> <i32 0, i32 0, i32 poison, i32 0>, i32 %1, i32 2
  %3 = sext <4 x i32> %2 to <4 x i64>
  %4 = sitofp <4 x i64> %3 to <4 x float>
  %5 = sitofp <4 x i32> %2 to <4 x float>
  %6 = fadd <4 x float> %4, %5
  %7 = fcmp ogt <4 x float> %6, zeroinitializer
  ret <4 x float> %6
}
```
Which is incorrect as can be seen when passing `i64 2147516416` as an argument to this function.
Third element of the returned vector is `65536.000000` before optimization and `-4294901760.000000` after.

Checked by running `llvm-lli` on
```llvm
;target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128-ni:1-p2:32:8:8:32-ni:2"
target triple = "x86_64-unknown-linux-gnu"

declare noundef i32 @printf(ptr noundef readonly captures(none), ...)
@str = private unnamed_addr constant [8 x i8] c"%f, %f\0A\00", align 1

define <4 x float> @foo(i64 %0) {
entry:
  %1 = trunc i64 0 to i32
  %2 = sitofp i32 %1 to float
  %3 = sitofp i64 0 to float
  %4 = fadd float %3, %2
  %to_max.i = fcmp ogt float %4, 0.000000e+00
  %5 = trunc i64 0 to i32
  %6 = sitofp i32 %5 to float
 %7 = sitofp i64 0 to float
  %8 = fadd float %7, %6
  %to_max.i.1 = fcmp ogt float %8, 0.000000e+00
  %9 = trunc i64 %0 to i32
  %10 = sitofp i32 %9 to float
  %11 = sitofp i64 %0 to float
  %12 = fadd float %11, %10
 %to_max.i.2 = fcmp ogt float %12, 0.000000e+00
  %13 = trunc i64 0 to i32
 %14 = sitofp i32 %13 to float
  %15 = sitofp i64 0 to float
  %16 = fadd float %15, %14
  %to_max.i.3 = fcmp ogt float %16, 0.000000e+00
  %r0 = insertelement <4 x float> poison, float %4, i32 0
  %r1 = insertelement <4 x float> %r0, float %8, i32 1
  %r2 = insertelement <4 x float> %r1, float %12, i32 2
  %r3 = insertelement <4 x float> %r2, float %16, i32 3
  ret <4 x float> %r3
}

define <4 x float> @bar(i64 %0) {
entry:
  %1 = trunc i64 %0 to i32
  %2 = insertelement <4 x i32> <i32 0, i32 0, i32 poison, i32 0>, i32 %1, i32 2
  %3 = sext <4 x i32> %2 to <4 x i64>
  %4 = sitofp <4 x i64> %3 to <4 x float>
  %5 = sitofp <4 x i32> %2 to <4 x float>
  %6 = fadd <4 x float> %4, %5
  %7 = fcmp ogt <4 x float> %6, zeroinitializer
 ret <4 x float> %6
}

define i32 @main() {
  %r1 = call <4 x float> @foo(i64 2147516416)
  %r10 = extractelement <4 x float> %r1, i32 2
  %res1 = fpext float %r10 to double
  %r2 = call <4 x float> @bar(i64 2147516416)
 %r20 = extractelement <4 x float> %r2, i32 2
  %res2 = fpext float %r20 to double
  %n = call i32 (ptr, ...) @printf(ptr @str, double %res1, double %res2)
  ret i32 0
}
```
bisect pointed to https://github.com/llvm/llvm-project/commit/6425f2d66740b84fc3027b649cd4baf660c384e8 commit.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWFtv2zoS_jX0CyGDN9Hygx-U5AQ4wFmg2Ba7jwUtjWxuKVIgqTTpr19QFzuOlcsCiz4cpGgSmpz5Zj7ORWOpEPTBAuxQfoMYUwYe4Snbq6jgATGG8ruV6uPR-V2trDaqNau9q592346AG2eM-6ntAf_5T0RKJMn435iHFpGyhkZbwIjfCvyIG-NURPwPjARpnEOs0FJgxHKC2BajzQ0iJdjonxAvESlxOqIY8TscfW8rnKQJjg5rzuZzNpwHHV3Tpf1RJ7rJ2CTFL6RmmAsRMYg0qq7H_UENsdvByCwU3fdWPa71KFu1HXaHeJYXSZ6syfAPELshZNbM3-EhF3jkV05u3udRLPDYTDzkSx5r-gqT4nUm2xdMUvxekKFkgc32ylVKX9KZsS7F2AIlSidOdHDsOSf2CifKXidF-RvxSediKc_4ta_5-xGicolPPvMRV0HirxGSrxPyYwi0DeAjGGjBxqs67JwOziaQyxRO_M5I9ANIg8ULoGIGoicg9kEgegE0hi0hnfLL8w8isUskOSPxAcnDslY6RZu75_0MkfLPgF0Xdat_QY33TxhJ4rqIs06FAAHxu2C67AGq6Lz-BR7JFPnf0hMXKvCNq05SyR6_HcN8ive0OCfFuM3_mNfJ9FUsptYKj1cGkhfRnXalSFAX3XYqkwuJEfOsN1_QZSN9oblo8aXms7JbiLqY6i-_7LWnqltQGdLpF3inrY5amSHsbySWXMyrfx91dcQ6YG0r5z1UEauAK2XxHnAAsPjnESxOaZaes0iSFHNGxSanUlCZEk0FrCxW_tAPkY4Ox6MOuOltFbWza0TKb0ftazzngmtwPEJytPcWajzmbfICSSLznMupqyT0PTTOw5z9KiFiZeskmgm2FVtCN5I8U1BNBJ-MIlLeHqH6MVaM762dKKRayIzRSdrZhSpB_CYqf4CIaxWVUU-uj0NAEGOQtYiXkHVsQxAvU_BLztJHevkxrVJSlVJk-rSgrEC8pKzImoJMKztsyVldiuzrsK3Tdtax-aCYfjgbz1gakEg5uRq97gzMbj4W8rsUWW9_WPfTZkbb_jE72H5UGTpBZZQHbF1va2jGGhOk89rGBrGii_505kHVzponXKku9h4CYoV1FhDbpixcr9dpRUokSIh-cKHz-kFFwL21qoX6u6prjytnQ1SpG-Q3RSqdAuV3uEo-sbyZaqBB-S0p0y8yHNxiZfTBDq38c6r7v051n0Pd51D3OdT93qHurQ62V_5zBvsbzGDvj2CnLJgeu63SFrHiHPLnhVIpY95-4D0byIYH8aQ9Viw8Rq-q9-vjsiAgTJ28S5E9ZXwCjQ7Xrt8beFGHr_l5TusrPwflD7u5ULcQ2KKbbMFNe_ZyzOY05JwHmKvxZxxnksCIM9_L1Q6bbz0Ffm5118P2Xoc0YHdO2wh18u8YYxdSYbN7xO4POh77_bpyLWL3wyg6_sk67_4DVUTsvnJtq9NCCpY3rJZyI8i-EE3FCdvspdhWtdirRkpS8UJAgUeN9are8XrLt2oFO7oRgm_5Ni9Wx10tcuC03uQ0r2tW043IKeEKtjVUBJRc6R0jLCeCUrrJGS_WEjgoINuNqvlW5g0SBFqlzTr5unb-sNIh9LCjPBeUrIzagwnT-71Wh8q1nTbDID_Od4ix8zfXcNobLoCXX__68q_z99rxjaDfDdey7w8BCWJ0iOFsPOpohteJl5r5Hf7HbBywtvjrX1_w2e6q92b3P4djIBoQu5-4PuzYfwMAAP__3imyrA">