<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/62024>62024</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Bitwise `or` used instead of offset in load
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
dzaima
</td>
</tr>
</table>
<pre>
```c
#include<stdlib.h>
void ext(int,int,int,int);
void f(int* a, size_t s, size_t n) {
size_t i = 4*s;
while (i+4 < n) {
int w = a[i]; if (w>100) return;
int x = a[i+1]; if (x>100) return;
int y = a[i+2]; if (y>100) return;
int z = a[i+3]; if (z>100) return;
ext(w, x, y, z);
i+= 4;
}
}
```
with `-O3` compiles to:
```asm
f: # @f
push r15
push r14
push rbx
lea rax, [4*rsi + 4]
cmp rax, rdx
jae .LBB0_7
mov rbx, rdx
mov r15, rsi
mov r14, rdi
shl r15, 2
.LBB0_2: # =>This Inner Loop Header: Depth=1
mov edi, dword ptr [r14 + 4*r15]
cmp edi, 100
jg .LBB0_7
lea rax, [4*r15]
mov rcx, rax
or rcx, 4
mov esi, dword ptr [r14 + rcx]
cmp esi, 100
jg .LBB0_7
mov rcx, rax
or rcx, 8
mov edx, dword ptr [r14 + rcx]
cmp edx, 100
jg .LBB0_7
or rax, 12
mov ecx, dword ptr [r14 + rax]
cmp ecx, 100
jg .LBB0_7
call ext@PLT
lea rax, [r15 + 4]
add r15, 8
cmp r15, rbx
mov r15, rax
jb .LBB0_2
.LBB0_7:
pop rbx
pop r14
pop r15
ret
```
but all those `or`s would be better off being done as offsets within the load instructions (which they are with `size_t i = 0;`).
[compiler explorer](https://godbolt.org/z/K37n8GY15)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVsFu6ygU_ZqbzVUjDNixF17UTTMzmkozi7eZ1RM2JKZyTAS4SfP1I2wnjdOk6ntWhV0O93A4Fy4RzulNq1QOcQHxciY6Xxuby6PQWzErjXzPISHDXwVkCeQRKNNt1XRSAXtyXja6nNfAngf0zWiJ6uCBprr1QJ8-tRmw4mLs-jTyEQXQJ3T6qH56dBffLdAMYTFGIeIJ0AhsiRzoozuTBnhf60ZhIAZacAT2dIMjPLr1uO9JBMSFhngJrAj96xC9B_YcERIirfKdbSeTnOIPF_G0iEaOgeHwLYb3CQOdMLx_i-E4YWAThuN9hiFP-2D1ITTvoTlepug8CdBi8PoSgcVy3BPnj9NmGf7da18jJOThHwYJwcpsd7pRDr0B9ngVIdx26FkDO8_79QOUIXCyHhXtOleHbhvFU_UfAL8DlIcp0CiBVvSmQFyEHWadRqAF8mDuZGy13fXvcbyVV1yvQuH8pSjIz8UU2Jo3PM1-K_CMR3GPOz3iHwAfAvU00NXNZSAd0EEDDe72xrElsOcftXb4V9sqiy_G7PBPJaSyYcxS7XwNbBndFqWkDtxyb6zEnbfBJxvx0SP6GOa-59QYG3bl1KnN8J66FXJx4e8pHzf4z75Ug6HiylBj8RLnd1bm7q8sRN5dlfuVVX1f8gil9_Jw-D21Q9yvqT0bOKQiop81qeoLPeILPdVdPTelVKLpN3moYZz8-_Lj8wGebhobxdcHWEg5DBrOSXrnXI_H77pGXB_Pc-pey0sLJ6dvca57J5adGWe5pg_A54JlPjRNAKv8zQpcdh6DU742ToVSbCwkxOHedI3EUmGpvFcWzXqNpdLtBqVpFQoXepzyDkMN1y36WmFjhETdOm-7ymvTuv6WrHVVB_gdhVV4KvmTK5qEayMJd9B8VDm0cTFeCRbVYdcYq2zIDk1r73cueEVXQFcbI0vT-LmxG6CrI9DV32zRpn_8F5zPZjJnMmOZmKk8SlKSZWmcJbM651m6SChPKGciTrIoXidRSjhRLOYyZouZzimhjHCSEUJYlMwTLtYx5ZSniUjXogJO1FboZt40b9sw_Uw716k8oYTyWSNK1bj-pxOlrdpjDwINN_jM5iHmoew2DjhptPPug8Vr36i80H6vL7KCnVODv0pINOsxBajb3vlZZ5v8yhjt666cV2YLdBXYx9fDzppXVXmgq16TA7rqNf8fAAD___TTjjE">