<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">