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

    <tr>
        <th>Summary</th>
        <td>
            [Wrong code] When no_caller_saved_registers attribute function call other function
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          youngbe
      </td>
    </tr>
</table>

<pre>
    For code:
```c
void ppp(void);

__attribute__((no_caller_saved_registers))
void kkk(void)
{
    ppp();
}
```

After compile with -O3:
```assemble
kkk:                                    # @kkk
 pushq   %rax
        pushq   %r11
        pushq   %r10
 pushq   %r9
        pushq   %r8
        pushq   %rdi
        pushq %rsi
        pushq   %rdx
        pushq   %rcx
        subq    $128, %rsp
        movaps  %xmm15, 112(%rsp)               # 16-byte Spill
 movaps  %xmm14, 96(%rsp)                # 16-byte Spill
 movaps  %xmm13, 80(%rsp)                # 16-byte Spill
        movaps %xmm12, 64(%rsp)                # 16-byte Spill
        movaps  %xmm11, 48(%rsp)                # 16-byte Spill
        movaps  %xmm10, 32(%rsp) # 16-byte Spill
        movaps  %xmm9, 16(%rsp) # 16-byte Spill
        movaps  %xmm8, (%rsp)                   # 16-byte Spill
        movaps  %xmm7, -16(%rsp)                # 16-byte Spill
        movaps  %xmm6, -32(%rsp)                # 16-byte Spill
 movaps  %xmm5, -48(%rsp)                # 16-byte Spill
 movaps  %xmm4, -64(%rsp)                # 16-byte Spill
        movaps %xmm3, -80(%rsp)                # 16-byte Spill
        movaps  %xmm2, -96(%rsp)                # 16-byte Spill
        movaps  %xmm1, -112(%rsp) # 16-byte Spill
        movaps  %xmm0, -128(%rsp) # 16-byte Spill
        movaps  -128(%rsp), %xmm0               # 16-byte Reload
        movaps  -112(%rsp), %xmm1               # 16-byte Reload
        movaps  -96(%rsp), %xmm2                # 16-byte Reload
        movaps  -80(%rsp), %xmm3                # 16-byte Reload
        movaps  -64(%rsp), %xmm4                # 16-byte Reload
        movaps  -48(%rsp), %xmm5                # 16-byte Reload
        movaps  -32(%rsp), %xmm6                # 16-byte Reload
        movaps  -16(%rsp), %xmm7                # 16-byte Reload
        movaps  (%rsp), %xmm8                   # 16-byte Reload
        movaps  16(%rsp), %xmm9                 # 16-byte Reload
        movaps  32(%rsp), %xmm10                # 16-byte Reload
        movaps  48(%rsp), %xmm11                # 16-byte Reload
        movaps  64(%rsp), %xmm12                # 16-byte Reload
        movaps  80(%rsp), %xmm13                # 16-byte Reload
        movaps  96(%rsp), %xmm14                # 16-byte Reload
        movaps  112(%rsp), %xmm15               # 16-byte Reload
        addq    $128, %rsp
        popq    %rcx
        popq %rdx
        popq    %rsi
        popq    %rdi
        popq %r8
        popq    %r9
        popq    %r10
        popq %r11
        popq    %rax
        jmp     ppp@PLT # TAILCALL
```

The function kkk do save the registers may used by ppp, but it call ppp after restoring the registers.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysl1tvozgUgH-NebGIbHN_4CHTKtJKlXa1W2keIxvc4CnEDDbdyb8f2dAESGBS2ijKhePzca7oHKqUOBw5T0HwDQSPDm11IZv0JNvjgXGHyfyU7mQDM5lz4G0BegRoC0LUvbPu_5sUOazrGpDY_AQkAd63_qj93O-p1o1greb7PSAxIPFR7jNalrzZK_rG833DD0Jp3iijTZIB-PX1dQDuqFGPhxD2Nx7dNHqcGDo0ZvuiuXGoqkXJ4f9CF9D927t2jirFK1by7rKxwrP3-9MLEA8CHxmFzsa6VcVPKwga-utiuDV-IMN4QYZuwJL58_G8KBe3ZEaibkp6rQXDs4lMtexnFwkfm8w8dPR6fKqSb7RWlvCrqnBgzmFMbC7taZLciCwOXXbSHP5Xi7LsgROSb0hJuAC6l-QZUozWkMZO9jxieKH_ed47EBugH38dEBmgN07ChwiJTWO4HtDXy7xDH_UpMkAXr6qHm8DQAr2lSr2zwGzNu-vyNybZmne_orQ6nq189ytKvwfa0nfXdeVNIO7Sij9Rq6hDkHgNYqrXP-YMdsGtf3kpaT5HHDtzIeK1xHG8L0CyFPpF4rgkLkRvNXFctBeiv5rozyQmWE30ZhITribimcxEa4m3cfEU9wHinInXT-R7iXNhxNOWuZs4l2o8bZm7iXPliFf3zFzL4NU9M9fWeHXPzD96pk3zJyLN8zuGv1rW_anr8dHKbs6cA6WrWXUgu5pw34HTqXigM52lB6Lz7D3FXQ3sA6XpoP-jqrszdQ189M_Tsw3k8_avp4ft09PCuvJccPjSHjMt5NHsQjCX0KxMUBccnrcmWNETbBXPITt1G9EDZK2GQkOzZplLkNrFp-FKy0YcD2PAxslTL0-8hDo8xWFMMPIJipwiDV5oRAJMGfKRHzBCY4wzluWIJzFLwtwRKUHEQz7BOMEIRRtGMQ8zFuOcBZEfEuAjXlFRbsryrdrI5uAIpVqehoTEkVNSxkv1voA2qTnksvaggI9KobS6qGmhS7uqfm_k8dAtpcEj_F7wI5xdKOF597zE0cZE6oI352tO25RpoXWtzCpIdoDsDkIXLdtksgJkZ4zov9y6kT94pgHZWUcUIDvry-8AAAD__3qd8JU">