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