<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/84919>84919</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Unbable to optimize simple loop and function
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
colin-arnet
</td>
</tr>
</table>
<pre>
Clang -O3 is not able to optimize the loop and loop body and generates very complex code. gcc is able to optimize the program to a much smaller and simpler assembly.
https://godbolt.org/z/qecj6o43o
```
Source:
int a, b, c;
int d;
int *e = &a;
static char(f)(char g) { return g << b; }
int main() {
for (; d; ++d){
c = f(*e);
}
return c;
}
```
x86 -O3 Assembly:
```
main: # @main
movl d(%rip), %esi
testl %esi, %esi
je .LBB0_9
pushq %rbp
pushq %rbx
movq e(%rip), %rdx
movl b(%rip), %ecx
movl %esi, %r8d
negl %r8d
cmpl $12, %r8d
jae .LBB0_10
.LBB0_2:
movl %esi, %edi
.LBB0_3:
movl %edi, %esi
testb $1, %dil
je .LBB0_5
movl (%rdx), %eax
shll %cl, %eax
movsbl %al, %eax
movl %eax, c(%rip)
leal 1(%rdi), %esi
movl %esi, d(%rip)
.LBB0_5:
cmpl $-1, %edi
je .LBB0_8
incl %esi
.LBB0_7: # =>This Inner Loop Header: Depth=1
movl (%rdx), %eax
shll %cl, %eax
movsbl %al, %eax
movl %eax, c(%rip)
movl %esi, d(%rip)
movl (%rdx), %eax
shll %cl, %eax
movsbl %al, %eax
movl %eax, c(%rip)
leal 1(%rsi), %edi
movl %edi, d(%rip)
addl $2, %esi
cmpl $1, %esi
jne .LBB0_7
.LBB0_8:
popq %rbx
popq %rbp
retq
.LBB0_9:
movl c(%rip), %eax
retq
.LBB0_10:
leaq 4(%rdx), %rdi
leaq d(%rip), %r10
leaq c+4(%rip), %r9
cmpq %r10, %r9
seta %r11b
leaq c(%rip), %rax
leaq d+4(%rip), %rbx
cmpq %rax, %rbx
seta %bpl
cmpq %rax, %rdi
seta %al
cmpq %r9, %rdx
setb %r9b
cmpq %r10, %rdi
seta %dil
cmpq %rbx, %rdx
setb %r10b
testb %r11b, %bpl
jne .LBB0_2
andb %r9b, %al
jne .LBB0_2
andb %r10b, %dil
jne .LBB0_2
movl %r8d, %r9d
andl $-8, %r9d
leal (%rsi,%r9), %edi
movl (%rdx), %eax
shll %cl, %eax
movsbl %al, %eax
movl %eax, c(%rip)
movl %r9d, %r11d
negl %r11d
xorl %r10d, %r10d
.LBB0_14: # =>This Inner Loop Header: Depth=1
addl $-8, %r10d
cmpl %r10d, %r11d
jne .LBB0_14
subl %r10d, %esi
movl %esi, d(%rip)
cmpl %r8d, %r9d
jne .LBB0_3
jmp .LBB0_8
a:
.long 0 # 0x0
e:
.quad a
d:
.long 0 # 0x0
c:
.long 0 # 0x0
b:
.long 0 # 0x0
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUWF2PqzYT_jXOjbUR2JCQi1xsNm_0VjpSL9peV_5awspg1jan2fPrK5sA5itn-6FKJ1ola88z45lnhhmAGFPklRBHkJ5Aet6Qxl6VPjIli-qJ6ErYDVX84_giSZXDp58xLAyslIWESgGtgqq2RVl8E9BeBZRK1ZBUvP3HKfpVLiqhiRUGfhX6AzJV1lLcIFNcbGHOmLO5aK_WKtekdPsElg27QlMSKYX2Zk3h7GhIjBEllR9bCKIziJ7b76u1tQH4GaALQJdccaqk3SqdA3T5BtDlXbC3nUqwuivtovufX_6iGs2EU_fLorKQAPQCqftiAJ-GfT5aAfQsIMBnCNCO9BJjiS0YZFeiAcpeAToAlLkVzAE6QLA_QS1soyuYQ4BfAHYn4RME-_NguiRFBVB2V2j3IYTwVWno9vHJ-wIBOgF04u6QEOY-zLv26q08C4fAAaI_rXNmCLQXTXhqv2_ZztfG8z0TPW8TtI8AP0OAMARJ5Jcj_0r1Vbpf7j1MdVF7ql4gQKkwxRhshbGyk6xg3kT7u_1yOkW_H8bCujHXdxc3SjWt77LR5m3mnhNBseCe5nOwj4UuxcJWwKNodMbHqErkHWomY2XtyEhitKb9RkTARXzPSbtCfcoeeiR4EWrhh1p8NSsuc9SjkviO4YV8lLl07ZjsTv1ALemoNVfZ-cLkTDpYMlR6EHkE6qMit7YFhEkdgaUgHhx3zhUPanjOMp9b7iiYku1T3tL4FE8zFPDY6mfj_aJi4cnBQXt3iX7n469gfAb4f79eCwN_qiqh4RfX9f8vCBfamTiL2l4BPsc_Tu4-lY4fIZBpEZqwCKclMr9ol6ImnHfVhtbKOajIeLUlV11F7sOqy2blXav6Ha504pGsHqbWe2jysNqe2FJP7gmf2omjmSEpiD8_WUi-nvLrwUsjTXdNeGqWAXRKlhQOM757GuJoBWSEJT0opqsnzk-blmAXyLJv0xyFzrUFu4QKvKN1NwOWVae8BqpErp-9OqGN8FOoBdHPMLvowdL0CtXp7TMOxBFdGpJd0loLA0PBxQT7KYnGQlLxML7WRM_Up1WdZ2tDur-W0WpLcfchXWHy2Sn9AMtmoK6HBS3s5Z7PT7SyBz25Y9-15v-qL4eEHHpC4vjBHd5MeFN6EEaDkYiPulXy_fn9D8Z3MAaGnPUuBPW_6Gof0rj64mSSmoYuqP-9u6cll9ZLcuwX7rwt62D3fidFZlNhK1WVQwijT9Af3UaPUGJu7L0h3BEewviDMxessr8Gp_9SRN1T34YfMT_gA9mIY7yPI5SiBKWb6zEh8S45CEEjGmP6SjjZ70iWZjTDSZrt2KY4ogglEY5RnET7CG9TymiKsYji15QljIIkEiUp5FbKr6V7rN8UxjTimCWH-LCRhApp_EsNhCrxB_RCgBBIzxt9dDpPtMkNSCJZGGsGK7awUhx_q-jshUT7umF4x_HaVMwWqto0Wh4nbxsKe23olqkSoIszff95qrV6E8wCdPEOGYAu3uE_AwAA___Yf1Xz">