<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/63626>63626</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/vjKv9a9d9

Given the following code:

```C
void foo(void);
static char a, c = 151;
static int b, f = 6, g, n;
static int *d = &b, *h = &f;
static int **e = &d;
static short i;
static unsigned char j;
static short o(int *l, short m) {
    j = f;
    if (j >= m) return 0;
 foo();
    if (*l) a = 5;
    return i;
}
static void q() {
 int k = b;
    int ***p = &e;
    &p == &g;
    o(&k, c);
 {
        int l;
        *e = &l;
        if (!(((c) >= -105) && ((c) <= -105))) {
            __builtin_unreachable();
        }
 }
    for (; f != 9; f++)
        ;
    c = 0;
    for (; c; c = 1)
        ;
    if (a) *h = 0;
    *e = &n;
}
int main() { q(); }

```
clang-trunk -O2 does not eliminate the call to foo:

```asm
main:                                   # @main
# %bb.0:
        movl    f(%rip), %eax
        movzbl  %al, %ecx
        xorl    %edx, %edx
        cmpb    $0, c(%rip)
        movl    $-105, %esi
        cmovnel %edx, %esi
        cmpl    %esi, %ecx
        jge     .LBB0_2
# %bb.1:
        pushq   %rax
        callq   foo@PLT
        movl    f(%rip), %eax
        addq    $8, %rsp
.LBB0_2:
        cmpl    $9, %eax
        je      .LBB0_4
# %bb.3:
        movl    $9, f(%rip)
.LBB0_4:
        movb    $1, c(%rip)
        cmpb    $1, a(%rip)
        jne     .LBB0_6
# %bb.5:
        movl    $0, f(%rip)
.LBB0_6:
        xorl    %eax, %eax
        retq
.Lfunc_end0:
```

clang-15.0.7 -O2 eliminates the call to foo:

```asm
main:                                   # @main
# %bb.0:
        leaq    -4(%rsp), %rax
        movq    %rax, d(%rip)
        cmpl    $9, f(%rip)
        je      .LBB0_2
# %bb.1:
        movl    $9, f(%rip)
.LBB0_2:
        movb    $1, c(%rip)
        cmpb    $1, a(%rip)
        jne     .LBB0_4
# %bb.3:
        movl    $0, f(%rip)
.LBB0_4:
        xorl    %eax, %eax
        retq
.Lfunc_end0:
```

Bisects to eaf6e2fc337ce428ae87d57360a2168c415acb5d (@luxufan )
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMV01vqzgX_jXOxkpkDuCERRZJe_Mu3ivNaDT7ymATnDp2ik3aub9-ZBsKpGnnzuJKEyEKPs_5es45xmXWyqMWYovyPcofF6xzjWm3rhGuEYabdlEa_te2ce5iUbpDcEBwOBpeGuVWpj0iOPxAcLie_n8tWMELRB4R2cX7_-RVaOwagWujlHmV-ogrw4W3M4EhSuL1EN-vRnJcG4Ng4x8RFCjdR5F1zMkKVw1rMUPwgCuM0kec5MktRGqHS4-oA4L6x6O_6XtIBDsecAho0EKwa4aF-hMNBDsxYPgtxjamdVjeLnc60M1jCqf7Wj7z3ofywcTVM4ICo3WvgDHGp-B9DM-vyRoj2HjJNy8MSq1wXasxGYGR3Smzo270WmAWrOczRG9pTAutH2cJhNq9RNuTYH02z8FeOff4ziSC3WUgU8wwCGiQ9MLjTBjToM-hF2b5zJgafKmZcrQ-FvGjdGAkCXd_VSGxSO4yIXl4BYqA4hngYQKI18eI_O_pqeykclI_dboVrGpYqcSd2oRYB7InTxjj2rTBd7r3zQ6J91yENwT7cBU3dqaG4wSR2drEYhVuccq-NhS5YpGQfnrITSVHrvXHFvIFOjOpx-4ZOsnH8A672TTia6WYPi5d2-lnvPwNMDfCYm0cFkqepWZOhH2oYkphZ0L_f7IJMXuOKyGUdFasT34IUowyEhSiMb8AeVmuyMRNcTZXhUhRh6TyVl5CY_jNJhfsbQr7UXoggpypAVCNgDfT9mLB3wY5H-XV-VIGeUb6uZj4uwkGQRa7NFqxcmLFXLX46GgGuQxyK-8EejoKRIrV9_2ePMEtNcmUmktnm5doqp1Q4evll329MvL79z__LZeM82g22_TS1l6idAhrEsV7Ptk9W6cxmew2mfROnQcz9Uf-Bytzpb5oyedFGysbQOwu6KTHQOltoPn9QMmXgdKp0qT72NsdmlrhXgblutPVk9B8MgbzuZ1Ob5KvyGodxvd9au1_YGyVYL6HlllPj530Wjuf20kLwwPmn9XwH7pj3mtfD87P9hr8-l772aH4uteyX9xre2lF5axvJ8FqKqCu0nRdiQw2TGzWPF-nlDBI6KbKkpxVZc7DtzAjqnvraqYxgmLBtykv0oItxDahm02SpTQvFs22rEpaljQlZJ2mnOYAhAKtUkaLTVaSfCG3QCAlNCUJzdZpsaooJDQXIhFFthYEUEbEmUm1Uup69ifshbS2E1uaUqALxUqhbDisA2jxioMQAfize7v1OsuyO1ofrrTOjlacdEps8aNgHD8YLvC3fsak0fgPcWyFtf7xtREad9af1e-eTTwZ8Tt7tTjxx5tF16rbfxCka7pyVZkzgoMPof-zvLTmJCqH4BACtwgOIbG_AwAA__9EQyt5">