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

    <tr>
        <th>Summary</th>
        <td>
            Regression in instcombine
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    While debugging a reggression in julia we found that some code that used to vectorize no longer does. Digging deeper it looks like it's a reggression in instcombine from LLVM 18 to LLVM 19 (still there on trunk)

```llvm
define swiftcc float @julia_perf_sum_1108(ptr nonnull swiftself %0, ptr noundef nonnull align 8 dereferenceable(16) %1) local_unnamed_addr #0 {
  %8 = load i64, ptr %1, align 8, !tbaa !9, !alias.scope !12, !noalias !15
  %9 = icmp slt i64 %8, 1
  br i1 %9, label %26, label %10

10:                                               ; preds = %2
  %11 = getelementptr inbounds i8, ptr %1, i64 8
  %12 = load ptr, ptr %11, align 8, !tbaa !20, !alias.scope !12, !noalias !15, !nonnull !8
  %13 = getelementptr inbounds [1 x i32], ptr %12, i64 %8
  br label %14

14: ; preds = %14, %10
  %15 = phi i64 [ 0, %10 ], [ %17, %14 ]
  %16 = phi float [ 0.000000e+00, %10 ], [ %24, %14 ]
  %17 = add nuw nsw i64 %15, 1
  %18 = getelementptr inbounds [1 x i32], ptr %12, i64 %15
  %19 = getelementptr inbounds i8, ptr %13, i64 %15
  %20 = load i8, ptr %19, align 1, !tbaa !22, !range !24, !alias.scope !12, !noalias !15
  %21 = load float, ptr %18, align 4, !tbaa !25, !alias.scope !28, !noalias !29
  %22 = icmp eq i8 %20, 0
  %23 = fadd float %16, %21
 %24 = select i1 %22, float %16, float %23 ; this select
  %25 = icmp eq i64 %17, %8
  br i1 %25, label %26, label %14, !llvm.loop !30

26: ; preds = %14, %2
  %27 = phi float [ 0.000000e+00, %2 ], [ %24, %14 ]
  ret float %27
}
```
The select highlighted used to be able to be folded into `%24 = select i1 %23, float -0.000000e+00, float %22` which allowed a sequence of loop-simplify + LCSSA + vectorize to vectorize the loop. The sequence still works, but the instcombine change makes it not vectorize

https://godbolt.org/z/GE369hEcr (Just the instcombine)

https://godbolt.org/z/5YWo5WPY8 (Whole sequence)

https://godbolt.org/z/zz6c6s547
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJykVt1u2zgTfRr6ZhBDpH4sX_jCbuoP-NAFFtvFBr0KKHEksaFJlaTqbZ5-QUqynKTpJljDgERq5pzhmRmS3DnZasQdyQ8kv13xwXfG7tqKW66EXFVG_NjddVIhCKyGtpW6BQ4W29aic9JokBq-DkpyOCM0ZtACfMc9OHNCqI3AcTg4FOANfMfaGysfEbQBZXSLFoRBt4ZbOaILxB4tSA_KmAcHSj4gSE_Yxr1kltr52pwqqREaa07w6dNfvwEtA9X4ugXCSuelUuA7tAhGg7eDfiBsS5J9-BfJ-Ffq-4kke4FNgHNn2fi6hkYZ7oFkSVzlfY-2uXfD6Z7SpCSs7L0FbbQelBpdHKoGCMsTwj7A-HXQApuLFVey1VCCQIsNWtQ18kohYSUtCAvx5jQ8lam5uh-05icU91wIC4SlCZDNgSR7CHYlkPQWlOECZJHNhCPAh5kovBJGfcV5eG6nMVeSu7WrTY9hSNk0r038EufymWgbiWR96sEpH8gifXCh0aayIGm0DHOKV6jCiBVPhjQZJacJSffwvh9JD9BbFC6GErDn4CiNUy16VHhC7YMIUldBdweyfK5LiL68OLNFw97ba9tfiMiSd6k4z40FQBhd6NNfxU7yA4W_QaaM5LfXobF5HTELUwIWmbNJ5izI_EI4mo0BjekYw8jjx76TI2p-gORiBBN5mA0Tm_lLFr_MEMUFYmqZALJO4g8JOySvIrLs54ibiMiFAD2cQbvzvORRUnoxLP-ziEup0-3bqyn9KQJLrtryif12qSj6vKLmyrFct7GWZlXe16mMLuQxD9f85cKfPefPf87Gypdscecc2diyMeA3kOW4_uByqS02lngT8jhVRqiWKeUsZjEWQTRzqLD202YyivLM6TKMwAfwnXST24UyfxrWlKG5cMunW9a49Ff3rFmpcDyslTF9GKTTTsaKX7fYZZNim7e2B3tDd1j0VzpsQiyb2-uzjCT7Pzuc1exk2ynZdh7F5SSuEMKxM702RgkUILU3ENxfyUe6JODmZfBLRIwUCZw7WXfAlTJnFMDB4bchnHZgmnC29zdOnnolmx9A2AE-ffj8eR_fljvCkwuD7zC6rWFc2QQ2nu1nYx9ciKEafLS8vhnUXeypE39AFy4W2vgFd8xj533vSLon7EjYsTWiMsqvjW0JOz4Sdvzfx7TYdh_r0Efl_wf3guRynfg3pPzLncnvfv8SWqW864xa1vJmjMfHoi5cnm1WYpeKbbrlK9zRTZZkLM9Ytup2eYU0r4ukqrhIm4KmtGxoWW7qitWY55uV3LGE5QljGd2mCcvWKd9ixuo0z7EpKpGSLMETl2od697YdiWdG3BHWRn8Y3-4eG9kTOMZ4lfCwia7srvgdFMNrSNZoqTzboHx0ivc_YGv3ONWg1W7ZwJI3w3VujYnwo7xljY-bnprvoa2Z8fI7gg7TuF937F_AgAA__-1kBHr">