<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63193>63193</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/YYrcW9KKv
Given the following code:
```c
void foo(void);
static int b, c;
static short d;
static int **e, ***f = &e, ****g = &f, *h = &b, *i = &b;
static char(a)(char j, unsigned) { return j; }
int main() {
char k;
for (; d <= 0; d++)
if (*i) {
int l;
int *m = &l;
*h = g != m;
if (d) {
__builtin_unreachable();
k = a(k, 0);
}
{
int *n = &c;
if (a(0 != *f, *e || *n) != 1) foo();
}
}
}
```
clang trunk -Os generates:
```asm
main: # @main
movzwl d(%rip), %eax
testw %ax, %ax
jle .LBB0_1
xorl %eax, %eax
retq
.LBB0_1:
cmpb $0, b(%rip)
je .LBB0_8
pushq %rax
movl $1, %ecx
jmp .LBB0_3
.LBB0_8: # =>This Inner Loop Header: Depth=1
movzwl %ax, %ecx
incl %eax
cmpl $32766, %ecx # imm = 0x7FFE
ja .LBB0_8
movw %ax, d(%rip)
xorl %eax, %eax
retq
.LBB0_5: # in Loop: Header=BB0_3 Depth=1
movb $1, b(%rip)
callq foo@PLT
movl $1, %ecx
movzwl d(%rip), %eax
.LBB0_6: # in Loop: Header=BB0_3 Depth=1
movzwl %ax, %edx
incl %eax
movw %ax, d(%rip)
cmpl $32766, %edx # imm = 0x7FFE
jbe .LBB0_7
.LBB0_3: # =>This Inner Loop Header: Depth=1
testl %ecx, %ecx
jne .LBB0_5
xorl %ecx, %ecx
jmp .LBB0_6
.LBB0_7:
addq $8, %rsp
xorl %eax, %eax
retq
```
clang-16 -Os can eliminate the call to foo and generate less code:
```asm
main: # @main
cmpb $0, d(%rip)
jne .LBB0_4
cmpb $1, b(%rip)
jne .LBB0_3
movb $1, b(%rip)
.LBB0_3:
movb $1, d(%rip)
.LBB0_4:
xorl %eax, %eax
retq
```
Bisects to 61d2f3a71e61929bf9b07c90e21d268090417bdb (@nikic)
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0V1-P4yYQ_zTkZbQrDI7_POQh2Vza6k5qVZ1U3dMKGxKza0MWcLK9T1-B7cTOJXt71xZFMYaZ4TczP8bArJU7JcQCzVdovp6x1lXaLFwlXCU012ZWaP73onJubxFdIrJBZLPTvNC1u9dmh8jmKyKbL19M-Vf-8eMB4TXCy-7_F3kQClwlYKvrWh-l2kGpufB2OrEEd7-yez9oyWGrNSKZ7yKSI7rqpqxjTpYglYMCkQcoL2dspY0Dfk0BkSUiS-HVui4iyy0gugZEkukwIsvdMLPtZ6phoOgH5HngYrWyYgaRjHnkJPNv8OSVWhWi7D0ClK7ACNcaBU-IrgCl686Gh9owqRDJerluPFiF59NaAABbbcDL0RVwQPTBA8LhDZFV-OVnYd_kNsiTpZzaHjW_fj1ZZTyDyLIZ_L4udQrVDhCJfKe5bi1A4Tdx-Pb4WLSydlI9tsoIVlasqEUXmKs2fXsOizNEsmcfc3xL9hTw6eANq73vavD9TLzeEb8gHjz2zOpZIgClDygNfRWc7UQi3-9I_n2Ep965M-yZ8U4ra6Z24EyrnuHudws7oYRhTtjzVpsqM9t0I4FwdAmIUEAxDq8TPI0-fD3W4ImVITI3ch_I7d2aC_baCzth3TFwYM5e-9nTZN-eahGe959WK_wYTSdftak7EgWrl_b7ZoR76UYGI4N_g0TZ7IvOToy9lWICe4pH9FCy6fi-tdVLB8VcAmj0oYcZRwPIcpB5avYjB-kYaOZj_J0WUkDXiH74XEkLvyklDHzSeg-_CsaF8SbWYu8qRNfR9SSNw3_GdWJyOQ5xX1ua_eAQJWmSnJVvQZRNVwfwa7rZfLgIKbse0kYfjjCmB7-dlu8w4ZIC83dG1vsfounlh4CuQ6LeiGoxTvYbXCpZXb-EXR3jPz59_gHSXGTwzW3WeZz8rx5_yyP-Hh6NE_2eLN_iHf853hXj0pKOo0VP1e3ntpavbHXvbfnt3npS45Xnt6l8RXcA3-xhyOwIePpNbWOcv_Qxy3pjxu7_XR29_Tm5i5LwLSmZAlHLRirmRDjNebKD057uwBQ_fW2gFtZenPB-9rNzWcffoNI0BfG5sL13804N0B8uAmeiva16xYcB80n1P8nfSlpROutzlEScbClLI5FEOcmLbV7gtMyxIBEnSYZzHEdpwYtwOoyxks-yRCSf8QXlOc3ZTCyiJEsITTGJZ9WCxTQXjOEswozQfFvylGUkifMiLSMck5lcEEwoTnAWzSNM4vuIZCIVZD5PWUTnmKMYi4bJ-r6uD42_Qsykta1YJDTK6axmhahtuI0QosQRwiQixF9OzMLr3BXtzqIY19I6e7bipKvFYi0YhwfNBXzoOSu1gj_FzghrffdYCQWt9XeRq4dMH4juIHWwECU-Fq2pLy9A0lVtcV_qBpGNR9A_7vZGP4nSIbIJuC0im-DXPwEAAP__6yFX3Q">