<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/111098>111098</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Loop vectorizer may create redundant preheader and scalar loop
</td>
</tr>
<tr>
<th>Labels</th>
<td>
vectorization,
missed-optimization
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
duk-37
</td>
</tr>
</table>
<pre>
[Compiler Explorer](https://godbolt.org/z/fMnTGzbec)
```cpp
#include <cstdint>
uint32_t foo(uint32_t *A, int n) {
uint32_t sum = 0;
for (int i = 0; i < n * 32; i++)
sum += A[i];
return sum;
}
```
Output IR is attached. I believe what's happening here is the `smax` generated by IndVarSimplify interacting with SCEV badly in some way, but I'm not quite sure.
[output.ll.txt](https://github.com/user-attachments/files/17253286/output.ll.txt)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx8U02P4zYM_TX0hUig0HHiHHzIx6QYoEWBbrHXQrboWK0suRI9M5lfXyiZzc4WRQ3Bsvn4nshnWqdkL565geoA1anQswwhNmb-a1FuizaYa0aOYZys44hPb5MLkSNUJ6B6EJkSlHugM9D5EkwbnCxDvACd34HO_S_-95_eW-6AdqBOoPYf9426r26aPiJUWt-52TBCeeySGOsFyqfPrNl6KekPwT4EoPrxCrTfAx3RekEPtEPYHu4MxEdSmkeE8oQKygfYh4hAdebZB3h7PKLPsljSLQJ0uK3dN-b9umnSITP3UB1sNuW7emSZo89JjyBsT_8y4HN_v84yzYLPv6FNqEV0N7BZ4jO27Cy_ML4OWoC2CQc9Teytv-DAkXO6DIywUWnUb7BReGHPUQsbbK_47M1XHb_YcXK2v2abOOpOMv3VyoBfjk9fsdXGZQxTGBlf9TU72uZygLYj-iD492yFMc2Rlz98zOoQbpUvnVvKm_znaFgZ5nbZhRHoPCeOi3t_I3tJeVCs47yvtlSVVG-Azj9q0q4wTWl25U4X3Ky2VKtVtVFVMTS7vuWedd-Zbcu97iriVbvpNdVrWhumwjakaL1Saq3WpFS1bBV13PemXre13qw2sFY8auuWzr2MeXwLm9LMzWq1Uru6cLpll24_CNELdxKifddigwcioCMQjTYlNoswiR0_YdWpiE0WXbTzJcFaOZskfT9GrDhufg5hwm-6HHHUV-wia2GMbGZvtBecIg-sDUfU3mDqtNMRXQhTMUfX_I_b-bCPbTHF8Cd3AnS-NXhz_N7jS0P_BAAA__9kXTz9">