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

    <tr>
        <th>Summary</th>
        <td>
            Mutual reductions in SLP
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            llvm:SLPVectorizer
      </td>
    </tr>

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

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

<pre>
    Given this code:
https://godbolt.org/z/G55n584nb
```
uint64_t both(uint32_t* x) {
    uint32_t s = 0;
    uint32_t m = 0;
    for(int i = 0; i < 32; i++) {
        s += x[i];
        m += x[i] * x[i];
    }
    return s + ((uint64_t)m << 32);
}
```
If we remove the "s += " line then it vectorizes the MLA. If we remove the "m += " line then it vectorizes the Add. But both together it does not.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyNUk1v2zAM_TXyhZghS1FiH3xwGqwY0AIDBuxa2JZia5ClQh9Z118_WklTLMhhggSTes-PpMjByT_toz4pC3HWAUYnFeEdoQdCuznG17B67CvuycnBmVg6P6H3judRCCvqjR3OdLKll53dpG3cbl4iDC7OhNWrz9lLJKyDN8IaILv9mQm4PlAIQPgBKOH3wOUOeHQe1ZEB-opm8wE4yzZh-7xvQq4LoyGCf70RsddEHP6RXtdyy4BzAXfoZHf4dLyKydtzADz15QXWF8FM1kIeLimy5qpyVbh5y29H-K1QcnEnhY1SKMiuqaMNRtsMWNARTmqMzut3FTL3-akr4Z7C8r8KnZQl7NO5lRDdpPDWr0TpkGJdLAvZctnwpi-ijka1zymm3mBAmcaonQ2gLfx4-l4kb9qbwdJxTkM5ugUdY04fny-v3v3CRNDVISQV0BCCC1rMbdVvR8VrdeRsVzdbyfstG3ldbwbKKrwtTD8oE1psExaXRXmH4X9-FIYzw7B_hW4ZZYwK2lSCU8HK3cA2rNrxZqyqvmGUbKhaem3KVWQd_sK3ObshTQFBo0MMn2Afgp6sUjky6vcpzs63sj-pZfJK2SLX0uZC_gIhFv9F">