<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63625>63625</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/oecxca7hK
Given the following code:
```C
void foo(void);
static char e = 3, i;
static unsigned f = 6;
static int g, h = -1L;
static char(a)(char b, char c) { return c == 0 ?: b / c; }
static short(d)(short c) {
if (!(((c) >= -1) && ((c) <= 0))) {
__builtin_unreachable();
}
return 0;
}
int main() {
char j = 0;
if (0 >= f) {
e = 0;
for (; e; ++e) {
foo();
j = a(1, j) != g;
}
d(4);
}
d(i);
d(h);
a(0, -1L);
f = 0;
}
```
clang-trunk -O2 does not eliminate the call to foo:
```asm
main: # @main
# %bb.0:
pushq %rax
cmpb $1, f(%rip)
jne .LBB0_3
# %bb.1:
xorl %eax, %eax
.p2align 4, 0x90
.LBB0_2: # =>This Inner Loop Header: Depth=1
movb %al, e(%rip)
callq foo@PLT
movzbl e(%rip), %eax
incb %al
jmp .LBB0_2
.LBB0_3:
movb $1, f(%rip)
xorl %eax, %eax
popq %rcx
retq
.Lfunc_end0:
```
clang-16.0.6 -O2 eliminates the call to foo:
```asm
main: # @main
# %bb.0:
movb $1, f(%rip)
xorl %eax, %eax
retq
.Lfunc_end0:
```
Bisects to 946b32680311f43a349d0199f9e286f385cd9847 (@floatshadow )
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVl9v4zYM_zTMi9BApmzHfsjDpWm2YQU2DPdeyBIdq3MknyW33X36QXKaJrncNhxmBInEPz-SP1KxpPdmb4nWUGyg2C7kFDo3rkNHoSOn3bhonP5r3YUweBCfAHeAu73TjevD0o17wN1XwJ0j9abkqvsV-Bb4p_n7J_NCloWOWOv63r0au2fKaYo4Z2ZQ8vlzP-9fnNGsdQ6wikvAGsRmVvkgg1FMdXJkxEBsmQC8Z-baYLKpKs3aZFRe640NbB89u6S_yx5vhQCsZIyOVQrYRIe0UoA1g9WGjRSm0TIVUSIQZyB2ID6xhgHumAKxYbDaXiD7zo0BsNIzdNqeEGdLZloGWAFm6Tt-ZgPxMKebNlgCluxCfZ-SSMD1JeLxeXpqJtMHY58mO5JUnWx6ShAfJH9kHD2OJfKT-qSNJB6ksbP7ZaxE0zOb0xFnirky_l5KezNLuuEYn9aNqV6xYZSoxQ3ghm5izPbuurY5JwlYZbGdzzOTWRTuv4l3QUR8NGCVX-BdWEW1uVZHYXctjAnwmEAcvStde1X9Cf_quMxb1Uu7vwvjZP9kd78h0448sy4w6s3BWBkonUAl-54Flyj5zvGT_jBLUlPFBZPfeQAFg5wnhxksCrBomiU_C1MPk---AK8Bi1G-ncTqMDRJmqdmtKlZxWiGSMm70bMl4PXycbPhT-I6SnYe5c2N_RyE5FsEPK7e9csBZW_2FnidRzV_q48kzugYi07Y8TQ_fO6MZ79YSyN7dG5gP5PUNEabLQ2hA7HNTtAH9zJXUsg-QtPNUmITIg2xCTn__fHzuf_XJiZ_6fhtDcaqj0Anig7DiSI8r0ic03PK8Z_Y_jcOBze8N1J9SEcKX97jtpNVT2T12QBcTuz53Gblki_LNLinefU_PLD_dRz_FyZ-oOaN8aSCj2XVedkILCsusqzNhRR5rXlW121NWJWtqAql6ypfpf-7nLe9k8F3UrtXBlgv9FroWtRyQeusrKosF3nBF926zKqi1IIU14USWLZqVayKnFZqhW1ZZQuzRo6Cl4JnZZ7zeomNRuJ5qXXG67bNIed0kKZf9v3LIb7hF8b7idalKLFY9LKh3qfLAqKlV5aUgBjvDuM6-tw1095Dznvjg_9ACSb0tN6S1OzeaWIPx3YbZ9kftB_J-7h87ciyycerws13VeRj_rN78SwrIxfT2F_fT0zopmap3AFwFzM4_twNo3smFQB3KW8PuEt1_R0AAP__a0RaGQ">