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

    <tr>
        <th>Summary</th>
        <td>
            Excessive optimization removes necessary code in Clang Compiler for ARM and AARCH64
        </td>
    </tr>

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

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

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

<pre>
    ## TL;DR.

The Clang compiler, starting from version 15.0.0, demonstrates a critical issue where aggressive optimization removes essential code in scenarios targeting both ARM and AARCH64 platforms.

#### Clang 15.0.0 - ARM - NO PROBLEM
- https://godbolt.org/z/39sn3TT61

#### Clang (trunk) - AARCH64 - BUG
- https://godbolt.org/z/6cY6ob5e6

#### Clang (trunk) - ARM - BUG
- https://godbolt.org/z/5YE3f5M3K

## Steps to reproduce the issues.

C code:
```
#include <stdint.h>
#include <stddef.h>

typedef struct {
  uint8_t arr[16];
  void (*show)(uint8_t arr[16]);
} CONTEXT;

static void xor16(uint8_t out[16], uint8_t a[16], uint8_t b[16]) {
  for (size_t i = 0; i < 16; i ++)
    out[i] = a[i] ^ b[i];
}

int function_that_is_incorrectly_compiled(CONTEXT *ctx) {
  volatile uint8_t block[16];

  xor16(ctx->arr, ctx->arr, block); // BUG. This code has no effect!!!

  ctx->show(ctx->arr);

  return 0;
}
```

The disassembly of the compiled code doesn't contain code, related to the "xor16(...)" function call:
```
function_that_is_incorrectly_compiled:
        push {r11, lr}
        mov     r11, sp
        ldr     r1, [r0, #16]
 blx     r1
        mov     r0, #0
        pop     {r11, pc}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUVVuvozgM_jXpi1UEodDywEOvu9LOTWe70s5TFYIp2QkEJaZzzvn1Ky69njO7MxUiJY79fbZjWzinjjViyqIVizYT0VJpbPolCILEBtUkM_lLynjIeAj7DyxcbZ485m-Yvxze-xJhrUV9BGmqRmm0jK_BkbCk6iMU1lRwQuuUqSGIPN_zO3mOlakdWUHoQIC0ipQUGpRzLcL3Ei2COB4tOqdOCKYhValXQZ0Vi5U5oQN0DmtSQoM0OYKqwUmshVXGAQl7xJ5AZqiE5dNHEHUOy-XT-vd4Bo0WVBhbuTtXBi9HXwefBsYw7S1M4dNn-PL0efVh-3HQmEJJ1DgWLhnfMb47mjwzmjxjj4zvXhnfhYmrw_0-Dv4HiPEF2bb-xnjSoY08p7D667efhYrl19hkEca_BtU79gsw0ddtWEQfwz_ewsCfhI0DMmCxsSZvJQKVOGT1PtbrPmkdzLAZ--NzNqdqqdscgYVrR7mqyStZuP2BOMfiVty_6aXBHAtwZFtJwOarYR-gVTUtDgTCWhatgphFGxZepCej8i5GjC9dab4znjC-eE-FJxctNt_A-vOn_fbv_XWvfzsSpORg9NnYIL4xZlq6Gltfab23md3A3vpSGNuRdeoVDwQKWLgBn4Wr_u8agnj8z1f9k5z1YERXLNr0SuLyEW17NHUbFjbf3HqlaoKirWVXjwcqBR2UO6haGmtRkn45jL0gZ3wxxgUYX0p6fqB_MlqQ0nj1Uxv57U1WzsfPEZT0PGXhtssGX8P912ChTw4Md7i73R7sS-WGTlEKB7UBLAqUxHgwPndIo83hBtzhJW9YWaTW1n3YH6P1cK0vHTNXTjiHVaZfwBR9kZxDNnDMDbqa8TmBNDUJVQ_1wtdgUQvCvKuyTo1xfo6K53n9beWX3IAUWv-oyH4ugeHyemW6X9O6ssugDYKOjbYXZ88nKnPq1_GEa-7FOrejuJOyaGX7icB4OOR8OJzp5_Op942flfwHeqbp1yvDRr5NxyRPwzwJEzHBNJgHi3kyi-bBpExDDIJixmdxMA_nvkwijLiMfBH7c5FnC5yolPt85sdBEvhRHARe5Gecz5J44cdhHC0KNvOxEkp7Wp-qrm1O-u6XJrEfzSZaZKhdP2s5l107Zpx3Y9em3flp1h4dm_laOXJXC6RIY7p9lv81DmvsxMK-XMbh0O7X41juW8XDIJy0VqcPDV9R2WaeNBXju47BuEwba_7p62U3tHPGd4NPp5T_GwAA__8yUVtU">