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