[Bug rtl-optimization/117081] [15 Regression] FAIL: gcc.target/i386/pr91384.c since r15-1619-g3b9b8d6cfdf593
liuhongt at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Feb 18 06:39:09 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117081
--- Comment #20 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
>
> W/o more usage of callee-saved registers, callee needs to restore them
> before exit which is not needed if more caller-saved register are used.
W/ https://gcc.gnu.org/pipermail/gcc-patches/2025-February/675714.html
the codegen is like
foo:
.LFB0:
.cfi_startproc
pushq %r12
.cfi_def_cfa_offset 16
.cfi_offset 12, -16
movq %rsi, %r12
pushq %rbp
.cfi_def_cfa_offset 24
.cfi_offset 6, -24
movq %rdi, %rbp
pushq %rbx
.cfi_def_cfa_offset 32
.cfi_offset 3, -32
movq %rdx, %rbx
subq $32, %rsp
.cfi_def_cfa_offset 64
leaq 16(%rsp), %rcx
leaq 24(%rsp), %r8
call bar
movl %eax, %edx
testl %eax, %eax
je .L1
vmovsd 16(%rsp), %xmm0
vxorpd %xmm1, %xmm1, %xmm1
vcomisd %xmm1, %xmm0
jbe .L18
vmovsd .LC1(%rip), %xmm1
vcomisd %xmm0, %xmm1
ja .L21
.L18:
xorl %edx, %edx
.L3:
vmovsd 24(%rsp), %xmm0
vxorpd %xmm1, %xmm1, %xmm1
vcomisd %xmm1, %xmm0
jbe .L1
vmovsd .LC1(%rip), %xmm1
vcomisd %xmm0, %xmm1
ja .L22
.L1:
addq $32, %rsp
.cfi_remember_state
.cfi_def_cfa_offset 32
movl %edx, %eax
popq %rbx
.cfi_def_cfa_offset 24
popq %rbp
.cfi_def_cfa_offset 16
popq %r12
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
There're 3 pops, more than best one(2 pops), less than worst one(4 pops), but
it looks more reasonable since we do want to keep rsi in callee-saved register
to preserve it across call.
More information about the Gcc-bugs
mailing list