<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/88688>88688</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Clang generates slower executables than GCC on simple recursive code
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          i-LOVE-cplusplus
      </td>
    </tr>
</table>

<pre>
    #### C++ Code
```C++
#include <iostream>
using namespace std;


int fib(int n) {
   if (n <= 2) return 1;
   return fib(n - 1) + fib(n - 2);
}

int main() {
   cout << fib(45) << endl;
}
```

#### compiler version
```
Ubuntu clang version 18.1.3 (++20240322073153+ef6d1ec07c69-1~exp1~20240322193300.86)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11
Candidate multilib: .;@m64
Selected multilib: .;@m64
```
```
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04) 
```

#### executables generated by clang++ is about 60% slower than g++
```
g++ -Ofast untitled.cpp && time ./a.out
1134903170

real    0m0.971s
user    0m0.971s
sys     0m0.000s
```
```
clang++-18 -Ofast untitled.cpp && time ./a.out
1134903170

real    0m1.619s
user    0m1.607s
sys     0m0.000s
```
#### the following code is extracted from : clang++-18 -S -Ofast
```
_Z3fibi:                                # @_Z3fibi
        .cfi_startproc
# %bb.0:
        pushq   %rbp
        .cfi_def_cfa_offset 16
        pushq   %rbx
        .cfi_def_cfa_offset 24
        pushq   %rax
        .cfi_def_cfa_offset 32
        .cfi_offset %rbx, -24
        .cfi_offset %rbp, -16
        movl    $1, %ebp
        cmpl    $3, %edi
        jl      .LBB0_4
# %bb.1:
        movl    %edi, %ebx
        addl    $2, %ebx
        xorl    %ebp, %ebp
        .p2align        4, 0x90
.LBB0_2: # =>This Inner Loop Header: Depth=1
        leal    -3(%rbx), %edi
        callq   _Z3fibi
        addl    %eax, %ebp
        addl    $-2, %ebx
        cmpl    $4, %ebx
        ja      .LBB0_2
# %bb.3:
        addl    $1, %ebp
.LBB0_4:
        movl    %ebp, %eax
        addq    $8, %rsp
        .cfi_def_cfa_offset 24
        popq    %rbx
        .cfi_def_cfa_offset 16
        popq    %rbp
        .cfi_def_cfa_offset 8
        retq
```
#### the following code is extracted from : g++ -S -Ofast
```
_Z3fibi:
.LFB0:
        .cfi_startproc
        endbr64
        pushq   %r15
        .cfi_def_cfa_offset 16
        .cfi_offset 15, -16
        movl    $1, %eax
        pushq   %r14
        .cfi_def_cfa_offset 24
        .cfi_offset 14, -24
        pushq   %r13
        .cfi_def_cfa_offset 32
        .cfi_offset 13, -32
        pushq   %r12
        .cfi_def_cfa_offset 40
        .cfi_offset 12, -40
        pushq   %rbp
        .cfi_def_cfa_offset 48
        .cfi_offset 6, -48
        pushq   %rbx
        .cfi_def_cfa_offset 56
        .cfi_offset 3, -56
        subq    $56, %rsp
        .cfi_def_cfa_offset 112
        movl    %edi, 4(%rsp)
        movl    $0, 8(%rsp)
        cmpl    $2, %edi
        jle     .L1
.L2:
        movl    4(%rsp), %eax
        movl    $0, 12(%rsp)
        subl    $1, %eax
        movl    %eax, (%rsp)
        cmpl    $2, %eax
        je      .L56
.L3:
        movl    (%rsp), %eax
        movl    $0, 16(%rsp)
        leal    -1(%rax), %r9d
        cmpl    $2, %r9d
        je      .L57
.L5:
        leal    -1(%r9), %esi
        xorl    %r8d, %r8d
        cmpl    $2, %esi
        je      .L58
.L7:
        leal    -1(%rsi), %ebp
        xorl    %ecx, %ecx
        cmpl    $2, %ebp
        je      .L59
.L9:
        leal    -1(%rbp), %ebx
        xorl    %r14d, %r14d
        movl    %ebx, %r10d
        cmpl    $2, %ebx
        je      .L60
.L11:
        leal    -1(%r10), %edx
        xorl    %ebx, %ebx
        cmpl    $2, %edx
        je      .L61
.L13:
        leal    -1(%rdx), %r12d
        xorl    %r15d, %r15d
        movl    %ebx, %r11d
        cmpl    $2, %r12d
        je      .L62
.L15:
        leal    -1(%r12), %r13d
        xorl    %ebx, %ebx
        cmpl    $2, %r13d
        je      .L63
.L17:
        leal    -1(%r13), %edi
        movl    %edx, 44(%rsp)
        subl    $2, %r13d
        movl    %r10d, 40(%rsp)
        movl    %r11d, 36(%rsp)
        movl    %ecx, 32(%rsp)
        movl    %r8d, 28(%rsp)
        movl    %esi, 24(%rsp)
        movl    %r9d, 20(%rsp)
        call    _Z3fibi
        movl    20(%rsp), %r9d
        movl    24(%rsp), %esi
        addl    %eax, %ebx
        cmpl    $2, %r13d
        movl    28(%rsp), %r8d
        movl    32(%rsp), %ecx
        movl    36(%rsp), %r11d
        movl    40(%rsp), %r10d
        movl    44(%rsp), %edx
        jg      .L17
        addl    $1, %ebx
.L19:
        subl    $2, %r12d
        addl    %ebx, %r15d
        cmpl    $2, %r12d
        jg      .L15
        movl    %r11d, %ebx
        addl    $1, %r15d
.L18:
        subl    $2, %edx
        addl    %r15d, %ebx
        cmpl    $2, %edx
        jg      .L13
        addl    $1, %ebx
.L16:
        subl    $2, %r10d
        addl    %ebx, %r14d
        cmpl    $2, %r10d
        jg      .L11
        addl    $1, %r14d
.L14:
        subl    $2, %ebp
        addl    %r14d, %ecx
        cmpl    $2, %ebp
        jg      .L9
        addl    $1, %ecx
.L12:
        subl    $2, %esi
        addl    %ecx, %r8d
        cmpl    $2, %esi
        jg      .L7
        addl    $1, %r8d
.L10:
        subl    $2, %r9d
        addl    %r8d, 16(%rsp)
        cmpl    $2, %r9d
        jg      .L5
        movl    16(%rsp), %eax
        addl    $1, %eax
.L8:
        subl    $2, (%rsp)
        movl    (%rsp), %edi
        addl    %eax, 12(%rsp)
        cmpl    $2, %edi
        jg      .L3
        movl    12(%rsp), %eax
        addl    $1, %eax
.L6:
        subl    $2, 4(%rsp)
        movl    4(%rsp), %edi
        addl    %eax, 8(%rsp)
        cmpl    $2, %edi
        jg      .L2
        movl    8(%rsp), %eax
        addl    $1, %eax
.L1:
        addq    $56, %rsp
        .cfi_remember_state
        .cfi_def_cfa_offset 56
        popq    %rbx
        .cfi_def_cfa_offset 48
        popq    %rbp
        .cfi_def_cfa_offset 40
        popq    %r12
        .cfi_def_cfa_offset 32
        popq    %r13
        .cfi_def_cfa_offset 24
        popq    %r14
        .cfi_def_cfa_offset 16
        popq    %r15
        .cfi_def_cfa_offset 8
        ret
.L61:
        .cfi_restore_state
        movl    $1, %ebx
        jmp     .L16
        .p2align 4,,10
        .p2align 3
.L62:
        movl    $1, %r15d
        jmp     .L18
        .p2align 4,,10
        .p2align 3
.L63:
        movl    $1, %ebx
        jmp     .L19
.L60:
        movl    $1, %r14d
        jmp     .L14
.L59:
        movl    $1, %ecx
        jmp     .L12
.L58:
        movl    $1, %r8d
        jmp     .L10
.L57:
        movl    $1, %eax
        jmp     .L8
.L56:
        movl    $1, %eax
        jmp     .L6
        .cfi_endproc
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWktz47ay_jXwBgUWAT5ELrywJWtuqpTr1Ixz7zln4wJJiILDVwDQI2eR334KfEIShpKnMuXxg43u_rrRL4CiUvK8YuweBI8g2NzRVh1qcc_R7vn_nlDaFK3U_--SOvu4B8SbvuAakEdAHuG6zhhwN8B9AKHbfw2k4SnxeJUWbcYg8Na8lkowWgLvqSe3klc5rGjJZENTBqXKgDeyGt95peCeJ4BE-rcKkBiC1bAOQsj3EJCo0iqAt4FE0wVTraggnuRBOD7rJVUQQdxJIo_GI808Y1htzmGUlFeAROcQ0rpVvf71IMwPujX9I1ZlhUXq6LMTi00_p3XZ8IIJ-M6E5HVl5fs9aSvVwrSgVT4uhDhysOPBDqreD-IS3_UIcVceDjxAHtk-zDBL3VUaxgj_zY4N_ntchGPPc10nCrUzOh0vVORMAe8BHqPwNfRRk6KCV-0R5VU7LDkIRjNY1hkr9MKmlvzYk36ppKJFwbINF5oEyLaVApBtwgeTtnVbZTClVcYzqhj8sl5D3nNRpQ0_5yJbxwFkW2hfb_M0BWQ7IJthkS3GvfhvrGCpYtk_LXc9AS7bQnHN5T1AR2-175ahf6Z9adF5MJztcZcpScsLhXgFZcNS6QwYnne7p_XL65e1jn4N-eTx7uX59f-_Pvz229NX4G0mW68bSLaFqtF3QZuGiV7m83a7e37YvL48fP3y9PL6vw-_Pn0D3qZ6b9QRVXXFgPdAyyxPK0TL7CCplW3ztH34ffcCvA3-QXCdRda6rvY8bwXL4HeuDp339CZJodGnIxWid4iQXoGaP_IxY7TNqyFFMHZ8x0W47f7EfxPiuD4gq5EtafNWFMDb7HmhbQFk23_1PpMHKhgg26xOe9-hzk1fnx42vz45j20uIUKsoknBkE7GluZMAm-TArKmGQVknQ7FkazzGpB1IngOyDoDZL2vhRK0AmRdJ29p_wPNy0sCEWoE2_PjtIsjag2kpG-1QIPNqK6Kj259nQtaItnuez6EsfF4EnfudTSb0ZmcGWbx6g8mkA7EDHFNKHjCjizNdGafhNcAr251xHY9IEM5U4od1SxPdUVDO6krF708q6yBoSoMJyd1raQStJkfpUWdUr15m7xqTdyJVFl6PKKMJW1uIyhearYPJkfHZmxP20IZa2jCdbyz77MA7a-24n-2DNXJG0u1cRmXHe1d9T-Y4PuPmaUp2pxX89-jnoazUbX8kIqV6K8T2wueNIc6qSVKDyz9g1c58DaCFYzKiVF1uWTyA29DW1XPYnSAoTy9eN5VJyrSg2HBdyZELQz3MjVq0iuRR4C34WEUTk87D5WhPz4Yax4quFSa5BEdz6Gvvx89cqZ_Dhyk2qrbR1YxwVMD_35f1DQbTJVnBUjHTReeU4qif7GXuPj3_HdfBnQis4TrnNuqskGdkDHo1qdl7Oel5ml1kq06HdI2oygT_J2ZnrVtaa_yMkMhQoe6c6eFooZyaqMNZU5nb183gbeZsgjpgl8wWp3mO5JMcFrwv4aOuSFXG_63tmlqoVve7uW5m2IEk91cQou8FlwdSqlZuvj-S499HVuepvMA07lTDzDLxTuGtw5Tuky1XUZK2AUV1QCTj35yGiZaLiFN9DAXuoAEUBb1dyagOtAK5ieT7am6kR0976lUsK0UVwXLnLRpICAhICHU9QXqtkWdulU9G8aeH7seXp2gFowWwI3d0nXiFZbjrKy78NlD-SGHZ67rylsGCcNWhKN_GC92Qhyf48VO6K4-gdfcMnVgcF8XRf1djz9pnTG9QeyoBO0Gqr2oS6gD6dysb4NlVhWv__H2XNcpPbkv_tMYgO-ODIPNsZPu-atUVKhG1OmEGwISJInj6slhXNq08vAncGNAApE0pxIytn9N9_S13u8lUxCHdq7jIhfxrVx0mcsjp-Th8aCPrCEy5F6saLoVBt6yfi86xT7WJEACZhibls1A9UZqNjvzTdOc3eOj--qfuxKbrpyUdOyjmtlOmmWDGmKhHmsxcvf4z0A6DaEFzyvgxro1QfcYD-HSYyP9UcGDuhl4Ty8HLuEvVcUE3NV1A_-H0Yx1h5sNa_SMOg63wI2LPj-Q153Geg_HFk-ktCj0_p2H22RYwOjRAn02HNksn93vW6hvdHI_OXe_Z7p_1nKxx-Pu2Tdrdjc92aw-VP1ooAq5nB5moNfNjdlh5pTBtKwpmqiCqT__wSo1dYkby9Po3e3jSU2xlh83ZlWWiNBeDnBwq5vMZMfBDYlubOqJRv_W3TzR6J8XnxOZ3s8UNdxVHWRQT2SSRZm-a5fZJRoyqJ8o9H5klRn2IqOf6QKBfQN7yw2ibJMh7YLwxrzDhocuSrA_lDTZTFdFJ1Hi6kWRddFcloi1K7CuLuExB4ilupxqv4zHMxx60yxAZJssxLRh8lh8bzPGkPHW2zLug7PzrKXyU7aEVhxjq8EDlRqtRsTZAl6TOuJdjXgDE--5jtgALLml4YooG5VESxBM7hFCNEJYLUGQ3MBgZJ_R9NOpc6a21kgs3COGeMQQL2FIzI2zDh4C-5Mj9K-2XnmcFriLrkouoiucxhWMl3Bi15w-7APScXGMIBbuEcSUr9hbApGZcYlJZvVWMHsruOYtvBjbpoYRKZmQLkY3JiZSz4b0Vn-dsI8wvAnGYoTrJmabGc2K3KHw7SV5LnJWNLOYLvC0HHe5tPc-J2vo2SuRAaxPPc9efQ2BfZkg9nZhyJNd6yFXek9X0fQ6uyF62LbM2gP7GdNliRzXWVuQvDa73xwlo5rIBie6WHfm48uCN64LbfLMJBo7rNUPZm0aF1odYRaIvO_nq8UDxXHKhpNaa4teI6UNJxslIbi9JAzYgoUw_-FhE18odHY4WkZvOmYGb1S8TxTeAbt3o1_Da351r_nVX_are-lXvOg2f3abf8VttkOv2VY_0dt7aPGS19LZa-QKMHvGTzPHJ-aeHtdSlkzCnB12r-xmbNvModD-YIS8Mhr2-C4yBdsqytmB_0dTtrNbTpelKm-pOQvF9wcngCtHkd5k78Jka7G91eSlPFzsbPZCu2D0Tx2_epsvTn62PnSzyfjsOunqSVSwkpUJE69SUcVOaT8-AN9-O2SetW--HTLP_DPTlWsE8_LBYFq-z7DfeF25WLHfeF25_zm58ZoiFF9cOgkmVS3Y2X7Ybn-NBlU2fRcwriiGu1Yd6GtA1ti9JE1zcWg7-Vv7rqks-kll9pP5smHT-TB0r0H1LVD9kT2IryhPLcqnY0wQXVEeWXRPZ8ZgdUU3vdQ9nc2D8PPMZxdWrMqMy8zxQvQuu_ey2IvpHbvHK-zh0A9W5O5wv8-Ix5gb42SfeXs3CwhlrhuEmGarLHOjO37ffZjJx4G7cklAnBWL0mSPsziKY4qjPfBdVlJeOEXxXjq1yO-4lC27j6Iwiu4KmrBCdh-MI2R4uURAsLkT93o9StpcAt8tuFRyltC9RLtfdx_EGt8wyvEdovn6sXuf-GW9hnUFJS-bgkHB0lZI_s66C-S7VhT3B6UaOX0MJefq0CZOWpeAbLXK4QdqRP3GUgXItrNAArLtjPhvAAAA___Y2L_M">