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

    <tr>
        <th>Summary</th>
        <td>
            Dead Code Elimination Regression when using __builtin_unreachable (trunk vs 15)
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    https://godbolt.org/z/jrn4o3s9c

Given the following code:

```C
void foo(void);
static short h = 4;
static int i, j, l, o, b, f;
static int *k = &j, *n = &l, *p = &o, *q, *a = &j, *e = &o;
static char m;
static unsigned char *r = &m;
static short *c = &h, *g = &h;
static char *d = &m;
static char(s)(unsigned b) {
    if (!(((b) >= 0) && ((b) <= 206))) {
 __builtin_unreachable();
    }
    return 0;
}
static char(t)(char d, int e) { return e >= 2 || d > e ? d : d << e; }
static int(u)(int b, int g) { return g == 0 ?: b % g; }
static void v(int *at) { *at || (n = 0); }
static int *w() {
    *a = 0;
    p = 0;
 return q;
}
static void x(char ah) {
    b = u(*n, ah);
    (*c = b) == (*d = 206, s(t(0 < ah, ah)));
    *p = 0;
}
static void y(int *) {}
int main() {
    if (h) {
        y(&i);
        x(h);
 w();
        i = f = *e;
        v(&f);
        *g = 7;
 q = k;
        s(*r);
        s(0);
    } else {
 foo();
    }
}

```
clang-trunk -O2 generates:

```asm
main:                                   # @main
# %bb.0:
        pushq   %rax
        movzwl  h(%rip), %eax
        testw   %ax, %ax
        je      .LBB0_5
# %bb.1:
        testb   %al, %al
        je      .LBB0_2
# %bb.3:
        cmpb    $1, %al
        jmp     .LBB0_4
.LBB0_5:
        callq   foo@PLT
        jmp     .LBB0_6
.LBB0_2:
        movw    $1, h(%rip)
.LBB0_4:
        movq    p(%rip), %rax
        movl    $0, (%rax)
        movq    $0, p(%rip)
        movw    $7, h(%rip)
.LBB0_6:
        xorl    %eax, %eax
        popq    %rcx
        retq
.Lfunc_end0:
```

clang-15.0.7 -O2 generates:

```asm
main:                                   # @main
# %bb.0:
        movq    p(%rip), %rax
        movl    $0, (%rax)
        movq    $0, p(%rip)
        movb    $1, h(%rip)
        xorl    %eax, %eax
        retq
.Lfunc_end0:
```

Bisects to e1dd2cd063785ea3a6004c8d173f13113b1b8265 (@nikic)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEV02PozgQ_TWVi9WRKb4POaTTk72MtKvV3lsGTHC3g9PYJD3z61e2ISGEHq32MlHkQH28en5VpmmmtTi0nG8gfob4ZcV606huYxpuGq4q1a0KVf3YNMacNIRbwD3g_qCqQkmzVt0BcP8TcP_WtZEKdV4CfQG69esf4sxbYhpOaiWluoj2QEpVcYszCYOE-u_O35-VqEitFGBmLwFzCJ-9SxtmREl0ozpDGgLhC4nmTtEaIgB35M0u0i7KLoVd6qVowO27wwJMXBLgth0NcjCcRoMaDB_DL5un8lvkrFjZsI4c59a-dS2ovBtw240AD6F-44DbcgxphqKHm2GpKOC2-hLVRgBm2iqN2ZVOAZgTSIdYQggRNQHMAAO32q-PCb9ZaOquMQFMyJ13Z71IE4ef36O-vha9kEa0r33bcVY2rJDcZd-6bktD-nK76bjpu5bQa8TVe78j43fkFKisULbbfCAwovCRPxJId5DuiFXqm7Pv3fXWrTsId4RD-Ezm1URrrG6-mC1RjLUOs1quS04rC26RCwIYk8MSrDsH5wHSDpoZ0dzNyBYw88NKvWZL9GzGxat639Hr_NI7tU9z28D_40vFHdnPUWzWPFQqHGTvSGxbK5ALum-yc_rZHmbnxQ9tdh1gN0c7on17MyukhxoB_fcedjvf0CL9HzetR_pjmDUfmWiXNPSn4nHH9vPDJSRiTsl-Poesm-OyMPiugmNfDwd4yx8Czr5MvZR8fTikN9eHM7w_xGqvdLeEY3104VgSLjWf7Nw_ub88v7eL-4e_vy0law9Ppuvbd_L0J5IDb3nHDNdf_c1g-ugtrjvhle0vPoAhgYi6BA9mDRgXxZpOyuSnXjcfQHPAuGOfV_NRnX9eJNC8cduMO3FyM2dPYswngYZrc_H57HPwT9xvHGi-_v78TF_jOY9gysPiFAOOHHHkEg7OccIpTnk8eZgoWEA5nq4wkbeO3KYQTEorie1xRP_6_s9ifjLNx2n-UZ0vEwr3Ck6SolmSrXlakHvWF-mxqfdmQ8AIfYMaY06P9e9Ipr8kmUxJfqrOV3cj8DgMJ3UaZ6m8WTtuPkbIum_LV95Wkxm8PxvTExLEa7pOf_sR-Q2tKX49P_-hFf9D9GeheWk0MYrwoKqwrGgSplnMWcgSSqMyq4I0rIMwCMIiKDJMYrfLiLbiXZSA-arahFUe5mzFN0GSpZjmcRismk2clFUZUQzqJOURrzFOaF7QuK5YEpZ5tBIbpBjSBGmQRDFm64AFWZbXJcZpGKZxDRHlRybkWsrz0b6Tr4TWPd8kYRQEK8kKLrV7vUds-YU4JyDat_1uY3Oeiv6gIaJSaKNvKEYYyTcvnFVkpypOvklxFC0zQrXkb37ouNb28tLwlvTavtwvvsxZIfwD_axJEFst-k7O_6MQpumLdamOgHvLYPh5OnXqjZcGcO94a8C929e_AQAA__9bwjiq">