<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/56048>56048</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Dead Code Elimination Regression at -O3 (trunk vs. 14.0.4)
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
thetheodor
</td>
</tr>
</table>
<pre>
```c
static short c, d;
void foo();
char a();
static long e(short f) { return f & (f - 1) ? 0 : f - 1; }
int main() {
for (int h = 1; h; h = e(h))
for (; d < 1; d += 1) {
c = h;
if (c + 1 == h) {
foo();
h == 1 || a();
}
}
}
```
`llvm-4c2bccfda3892ae13e97b6bfdbc99ec8cf5d095d (trunk) -O3` can not eliminate `foo` but `llvm-llvmorg-14.0.4 -O3` can.
Target: `x86_64-unknown-linux-gnu`
------------------------------------------------
`llvm-4c2bccfda3892ae13e97b6bfdbc99ec8cf5d095d (trunk) -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Reduced assembly</summary><p>
```asm
main: # @main
.cfi_startproc
# %bb.0:
pushq %rbp
.cfi_def_cfa_offset 16
pushq %rbx
.cfi_def_cfa_offset 24
pushq %rax
.cfi_def_cfa_offset 32
.cfi_offset %rbx, -24
.cfi_offset %rbp, -16
movzwl d(%rip), %eax
testw %ax, %ax
jle .LBB0_1
.LBB0_10:
xorl %eax, %eax
addq $8, %rsp
.cfi_def_cfa_offset 24
popq %rbx
.cfi_def_cfa_offset 16
popq %rbp
.cfi_def_cfa_offset 8
retq
.LBB0_1:
.cfi_def_cfa_offset 32
movl $1, %ecx
xorl %ebp, %ebp
jmp .LBB0_2
.p2align 4, 0x90
.LBB0_9: # in Loop: Header=BB0_2 Depth=1
leal -1(%rbx), %ecx
testl %ecx, %ebx
cmovnel %ebp, %ecx
testl %ecx, %ecx
je .LBB0_10
.LBB0_2: # =>This Loop Header: Depth=1
# Child Loop BB0_7 Depth 2
# Child Loop BB0_6 Depth 2
# Child Loop BB0_5 Depth 2
movswl %cx, %ebx
testw %ax, %ax
jg .LBB0_9
# %bb.3: # in Loop: Header=BB0_2 Depth=1
leal 1(%rbx), %edx
cmpl %ecx, %edx
jne .LBB0_7
# %bb.4: # in Loop: Header=BB0_2 Depth=1
cmpl $1, %ecx
jne .LBB0_6
.p2align 4, 0x90
.LBB0_5: # Parent Loop BB0_2 Depth=1
# => This Inner Loop Header: Depth=2
xorl %eax, %eax
callq foo@PLT
movzwl d(%rip), %ecx
leal 1(%rcx), %eax
movw %ax, d(%rip)
cmpl $32766, %ecx # imm = 0x7FFE
ja .LBB0_5
jmp .LBB0_9
.p2align 4, 0x90
.LBB0_7: # Parent Loop BB0_2 Depth=1
# => This Inner Loop Header: Depth=2
# kill: def $ax killed $ax killed $eax def $rax
movzwl %ax, %ecx
incl %eax
cmpl $32766, %ecx # imm = 0x7FFE
ja .LBB0_7
# %bb.8: # in Loop: Header=BB0_2 Depth=1
movw %ax, d(%rip)
movw $1, %ax
jmp .LBB0_9
.p2align 4, 0x90
.LBB0_6: # Parent Loop BB0_2 Depth=1
# => This Inner Loop Header: Depth=2
xorl %eax, %eax
callq foo@PLT
xorl %eax, %eax
callq a@PLT
movzwl d(%rip), %ecx
leal 1(%rcx), %eax
movw %ax, d(%rip)
cmpl $32766, %ecx # imm = 0x7FFE
ja .LBB0_6
jmp .LBB0_9
.Lfunc_end0:
.size main, .Lfunc_end0-main
```
</p></details>
------------------------------------------------
`llvm-llvmorg-14.0.4 -O3 [-emit-llvm] -S -o /dev/stdout case.c`
<details ><summary>Reduced assembly</summary><p>
```asm
main: # @main
.cfi_startproc
# %bb.0:
movzwl d(%rip), %eax
testw %ax, %ax
jle .LBB0_1
# %bb.3:
xorl %eax, %eax
retq
.p2align 4, 0x90
.LBB0_1: # =>This Inner Loop Header: Depth=1
# kill: def $ax killed $ax killed $eax def $rax
movzwl %ax, %ecx
addl $1, %eax
cmpl $32766, %ecx # imm = 0x7FFE
ja .LBB0_1
# %bb.2:
movw %ax, d(%rip)
xorl %eax, %eax
retq
.Lfunc_end0:
.size main, .Lfunc_end0-main
```
</p></details>
------------------------------------------------
### Bisection
Bisected to: 6001bfcedc3102b45878b7883c241b45863d7e2c
Committed by: @nikic
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzdWFuPmzgU_jXJiwXiHnjIQ5PMaFcaaatu30fGNsFTbsVmJu2v32NMiJPQGXrJSm3EMNjn-PO5-TMmremX9SJy9EUWzm7hvBMSS06QyOtWIrLwtogu_I2W6ftzzSnK6nrhxQsvuRCSHLcIT4oG5KKu9oiBhp4iA0W0WG1Qy2TXVihDCy-CvzhDFnJ7oX-PHLi_Q7rL34D-zkTmlUQl5pWeVqHpfgS_rG4VmlLJAWSnAfL-1reVKbmyFq5xlDFSaVLQ3OqR8OhtNM7lVMcf6XHz0X1TxpV_MVEgyFV6WvVbUNqOy1BfauRHIEBcbeG6yoCpPQbvquP0cCyKsVkUz6UVEC8lJKPYjxMPM9dnySqN0oymJEkYiUkWUicJVYhi2XbVJ-WX9Y8P4xHBFapqiVjBS15hyRD0KtdAlnYSHedQt7rdW25gO3ZgjLbNjH_E7Z5JVRMgPcTRYxRYMF9Vv1RWwavuYO2r7mR_f7e-82eO_dkIoEW4sVjJZe_fItwh619k1aB2T9kz3IWkNUSBYMFscjLc31ImMS8EZPgOWqIrS9x-gcYHRjvCKMJCsDItoGurYEY5tBv179wJfWFR6p5-0fhX9TTxW3jgQ-D0AwbIxCYZf4RV3cqmrQf66PW8ME1tB4BH1aYT-Wf4D6I2bc4RKMseSYYf6ywTTCI3mh51eHWUF0yOwq-P8r1z8dA9zAfcZxm4VxpNr2HYW9bPX18KeKD98gtb3vTEslX6zLBFMiFftIn4MMgN8VPB1HwPm43z6OreoXEW1EPdFhqEjSjmLJhSHYcgHqSteD32ZhTrZmbozYQZg16fKR6lwPufz3w0XXwjaRBwHYHAPfpPDlPx0bkansYwl80YZqMQGg8XfA9lngRqkHNIHNO-ZMaCUasAuL5CD3XdKP2_GKasBYru50I71kjYH3buOGvBsLLVcofKUeWXTPikKufoFBmTbmSIQEwqdu33mxiGwpNRfme-ezN977eju485F30ERvffXXo-g3mMgCK0zXlBNaayZ6XxkPdL0KJfihaeo-lqFS9D4Cdz9xYt7Me0JJds69-yKieLkpo111zXkyF_qk4Ftbq0PLiJ5aNJk8xgGhTNXvnhbEvf45bBC-dYC1cWvl1VJzi9mBDql9PfVcXaby0qb4r6JrcGgotCMbV6AQuc9w8fZ-5hRgwvaoMcprc6wDsr6XPY63T53iqKTtN9Kyi8LPu3bOewur-_OyUWj3kNJ3k-mZ3t1W-S7e8B_8SLQkHAjgrtAB_6HkavGpDBo1J7nsyvRwbDUzsHr4hRdzfM7hWNxDehkXnVO2qNZGOy9g9VX_SbVN9Pcc3ckfhP5ajotSqxH7KuIo-somdv_bbgX9XupT94bJGhZhnHs4sTfH86bPS5sD909qfKywPiLzsnX5_if_QE_Gedg294Qjx_F5y9xk7Hrxms5H7_-_-rJPIDDHXzLQxOzZdvjrfdyq7y511UzAxump_l_59VfopPPF9faMMFI5LXgyW6CZmWtaqGyHHcNAMeIL7reGkQxqs4XcWxTyCNqhn5dMW8YXFu6xKISI1Ov_TfEAOn4p84WdK1TxM_wUvJZcHWOyhYtK0pQ3fDV0uYH31g-5YJoR6x1NQ2fOxDz8JGmvLUd79l1xbrXMpGqEh793Dtucy71CZ1CY2eCPU_C5jjCRyCJheiYwIewsgJ4mW-TlKHpTigSbaKo5SSGGrECVyMnQS8DtmywCkrxBoIFmh1ydee43lO5Iau5_hObK8SmvmYOKCehG7ogLcMUlrYamIbWHrZrnsb0m4vQFhwIcVJCMQKjMDYER93Mq_btcwZXDWt22Vv8bo39z8WeRxA">