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