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

    <tr>
        <th>Summary</th>
        <td>
            Dead Code Elimination Regression when using __builtin_unreachable (trunk vs 16)
        </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/vW7nbGvzz

Given the following code:

```
void foo(void);
static int a, d, *b, *e = &a, **c = &b, ***f = &c;
static int *h();
static void g(int k) {
 int ***i = f;
    *c = h();
    &i || k;
}
static void j() { g(0); }
static int *h() {
    *c = e;
    if ((10 ^ a) == 0)
 *b = 0;
    else
        return 0;
    if (b == &a || b == 0) {
        if (b == 0 || b == &a) __builtin_unreachable();
        else foo();
    }
    return &d;
}
int main() { j(); }
```

`clang trunk -O3` generates: 
```
main: # @main
        pushq   %rbx
        leaq    a(%rip), %rax
        movq    %rax, b(%rip)
        cmpl    $10, a(%rip)
 jne     .LBB0_1
        movq    b(%rip), %rcx
        movl    $0, (%rcx)
        movq    b(%rip), %rcx
        leaq    d(%rip), %rbx
 cmpq    %rax, %rcx
        je      .LBB0_4
        testq   %rcx, %rcx
        jne     .LBB0_5
.LBB0_4:
        callq   foo@PLT
 jmp     .LBB0_5
.LBB0_1:
        xorl    %ebx, %ebx
.LBB0_5:
 movq    %rbx, b(%rip)
        xorl    %eax, %eax
        popq %rbx
        retq
 ```
 
 `clang-16 -O3` can eliminate the call to `foo` and generate less code: 
 
 ```
 main: # @main
        leaq    a(%rip), %rax
        movq %rax, b(%rip)
        cmpl    $10, a(%rip)
        jne     .LBB0_1
 movq    b(%rip), %rax
        movl    $0, (%rax)
        leaq d(%rip), %rax
        jmp     .LBB0_3
.LBB0_1:
        xorl    %eax, %eax
.LBB0_3:
        movq    %rax, b(%rip)
        xorl    %eax, %eax
        retq
 ```
 
 Bisects to 9b5ff4436e446e9df97ee37b3bcf9ba029c7d9aa  (@nikic)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVt9vozgQ_mucl1ErY34_5CFtN_uy0p1OJ91jZcMQ3Do4xSbb619_MmASCKtupYuiBDzffDP-ZgbMjZGHBnFL4gcSP214Z2vdbm2NtkZd6nYjdPnvtrb2ZEi4I2xP2P6gS6GVvdftgbD9B2H78z9pI76fPz4IfSJ0N_x-l2dswNYIlVZK_5TNAQpdouO5gpGEjt_-9qxlCZXWhGXukrCchA-DyVhuZQGyscAJe4TS_RC2E-M_AgmfgLCEjwuE7Qq_Ji5rhO0qv1yssRO2qwnLVmL32R0IyxzslbAcSDoivOfwlX2AavIHAJjSWZIPxkQCSR9J-givk4WkT7fxXwZ3F7rPhQ5csATPt3KV6XUuOMtCVtCjs4ACib85nXMHc8g-zIB0osOwdu2NyuDlzn1atF3bLGBDEOF5XcH8zsV1sHnGK570xm0ofg7Pz6KTysrmuWta5EXNhcIV1X3WY8fdFMUrerUXwpLytj5O6yOXzVVpXibCC8-i2afFQvHmALbtmle4-yMkCYUDNthyi27uYNW7j-eMLAQS0f52trNTZ-q3vthxK97nNoXcmVyFM2eXJ5drPyNxyxfgoz6_wUjE3x1KzNxm4OJ4UgM4CqjD8hXsS4M9-P7HwwN9DtbDibXcitvcfDg6YLIRtkzsS7Ren3INPIlZHE8LYda4Xoa9jpuN5kaLxvoiFb-mmOkVD0bP5x-oUwW4Uo7SNXVE__zxtxf9ePoVSXBD8q7bUdcYhc8L_c49xeR13SLisxa55p5kw2XXnfTpbbV3W7Rv_kk0Hwm4LPcjdRckfp4K3gAqeZQNt9i_lpxMYLUDO6USCrwpp7kDhcb4Fxbc0M-ifjqJX5-2_2_UVjsoWJRtdSZWElsbNX47av1-V0dnyTnvyfD3e_K2bzzF0utLT6_fa83PO_BBGiyscf2Vi7iqoihMMIoSzMsqTxHDVISiqHLBKcuLtMw5h17QiDbyVRaE5ZtyG5Z5mPMNboMki_MsDyO6qbcxTfMwKaIqy5IwoSlHkTNWVoKlWGJcbOSWURbShMZBxhij9zSPAsqiNI0QCxEyElE8cqnulTof3UFuI43pcJuEAYs2igtUpj8TMtbgT-iNhDF3RGy3zudOdAdDIqqksebCYqVVuH1CXsKjLhG-jQMndQN_4aFFY9zlzxob6Iw7Ea6-qZ0Qw8vwbCBInBZdq5bHUGnrTtwX-kjY3mUw_t2dWv2ChSVs3-dtCNv3-_ovAAD__2F5xuw">