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

    <tr>
        <th>Summary</th>
        <td>
            Extra stack save+restore with memset loop idiom transformation
        </td>
    </tr>

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

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

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

<pre>
    Test case:

```cpp
#include <stdio.h>
#include <string.h>
#include <array>

constexpr size_t N = 1120;
float buffer[N];

void zero_int_memset(int* buffer) {
    memset(buffer, 0, N * sizeof(int) );
}

void zero_int_loop(int* buffer) {
    for(int i = 0; i < N; ++i){
        buffer[i] = 0;
    }
}
```

$ clang -O2 -std=c++17

```
zero_int_memset(int*):                  # @zero_int_memset(int*)
        mov     edx, 4480
        xor     esi, esi
        jmp     memset@PLT                      # TAILCALL
zero_int_loop(int*):                    # @zero_int_loop(int*)
        push    rax
        mov     edx, 4480
        xor     esi, esi
        call    memset@PLT
        pop     rax
        ret
buffer:
        .zero   4480
```

https://godbolt.org/z/7T8T1hhTP

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJytVEtvozAQ_jXmYiUyBkI4cEibVlop6vaQe2XABHcNRrbJJv31O4YQmtfuZS3jB_ON55uHnanimG65sThnhqNghcgakXFckKHnbXv6QwPR5LIrOEbBs7GFUPMKBS_3pVo0u4dipjU7TrJ-zFVjLD-0GhvxxT8sfgPkGvs-JSh4GjClVMzirCtLrlH09Iai9Vk2jHslCvzFtfoQjf2oeW24RXQJG0RXoyZNMIpPahjaGTbKnzFxAzAAJUdHleMhoEqTyWi8fmxdKtX-03ap9IDBovfXOdsvwbxbIvoEXTij39VcO8dBQBzOyhNmIndejEm9yDQNcS5Zs8OznxTPILFwVD7Y9eO7NTFsH4W5D9CZ5dSgBjAKyd_ULvyr1b6feXFw2QjDJbkEHJQeAEY4gJsu5J91i7_lNyTvm-0trZHadvVj87zabK6cu8jiI9dunbtRu2DWdqZys2aH_-xzzqS89vnKthqicmNbA77_cSqs8UEY5XPnHMwTqbv1VFnbGqdMX6HvVJEpaedK72D3BV-8XW79qtq-D3CvSIMiCRLmWWElT18OVjNsLMt_YcP2HKpQwxulNMe_ha1OjmEXXyzgDaox4BsD96hmVqjG67RMrziAXpfNc1XDRsr9OM1arT55Dhl6FcZ03MAiWiwW1KtS5hdJTpdLQvMoDhMahUFEszgKMloEhR95kmVcmhSuH9w-T6SUUEpi6vtJ6Ef-3KclK0iyWIZJGZAsh0zwmgk5d4ZdNDyd9hyybmdAKIWxZhIyY8Su4Xw8n3W2UjqthGaFsEfm9YTTnu0fGGeUOA">