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