<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/81429>81429</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Combine operations for integer array acting as larger type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
gooncreeper
</td>
</tr>
</table>
<pre>
if I mess something up with this issue I retire from writing compiler issues
```C
#include <stdint.h>
void unopt(uint32_t a[restrict 2], const uint32_t b[restrict 2]) {
a[0] += b[0];
a[1] += b[1] + (a[0] < b[0]);
}
void opt(uint32_t a[restrict 2], const uint32_t b[restrict 2]) {
uint64_t *restrict a64 = (uint64_t *)a;
const uint64_t *restrict b64 = (uint64_t *)b;
*a64 += *b64;
}
```
```ASM
unopt: # @unopt
mov eax, dword ptr [rsi]
add dword ptr [rdi], eax
mov eax, dword ptr [rsi + 4]
adc dword ptr [rdi + 4], eax
ret
opt: # @opt
mov rax, qword ptr [rsi]
add qword ptr [rdi], rax
ret
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0VMtu4zoM_Rp6QzSwKD_ihRd53ABd3NV8QCHbTKyBbbmS3Ez_fuBHk0mTAp3FGEEEyoeHPEcylXP61DHnEG8h3gdq8LWx-cmYrrTMPdugMNV7ro_4jC07h8607GvdnXDo8ax9jb7WDrVzA-MzWvbaMh6tafFstR-BpWl73bCdQQ7CPYQbSML5t1tikrorm6FiBLlzvtKdX9Ug_1teT_9vRlc4dKb3QOtBd17Si0cF8day81aXHgniPdAOS9M5jxdMcY_JENLtzIuIE0sI8R6BtiD3U8YYg_wEEp9AHzECra8kcndloOxCAun-TtA_kTM_Y0ISvXgE2lzwKolwbH4p-vEeKFM3Yq817yiKLymKq9QLEdBmqjl7BrQpkuiBIx834s_0y-bmx__zznz8coNAEiEK5_hGd2veppXVr9G76mxshb23OLrm9GjXDV5V1bTeAiu9eD_S_A3_dBmiB1XKh1Wu8JtalhdVi9xvPIsjX_ph535fv-vH62M_7H2Pl2MKqlxWmcxUwLlIwzRZC4pFUOeqksmREg5TmYljXKaFYgpjyuJUhiRkoHMKKQpJCJHFkRCrJC5YCI7DNRWsUoYo5FbpZtU0b-3K2FMwzZN8LSLKgkYV3LhpjhF1fJ6HDdD4cQQ2H3OeiuHkIAob7by7snjtG853pi10x2h6tspr0zk8Gou683xii8pa9Y6qnAaactgoO277956DwTZ57X3vQG6ADkCHk_b1UKxK0wIdxkLL8tRb85NLD3RYZiEdpvZ_BwAA__-Q_4tl">