https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115673

--- Comment #24 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to H.J. Lu from comment #21)
> Created attachment 60337 [details]
> A patch with tests

This patch isn't necessary.  It is OK to indirect call via memory for
-mforce-indirect-call.  The old codegen is

f2:
.LFB2:
        .cfi_startproc
        pushq   %rbx
        .cfi_def_cfa_offset 16
        .cfi_offset 3, -16
        movq    f1@GOTPCREL(%rip), %rbx
        call    *%rbx
        leaq    f3(%rip), %rax
        call    *%rax
        movq    %rbx, %rax
        popq    %rbx
        .cfi_def_cfa_offset 8
        jmp     *%rax
        .cfi_endproc

The current one is better:

2:
.LFB2:
        .cfi_startproc
        subq    $8, %rsp
        .cfi_def_cfa_offset 16
        call    *f1@GOTPCREL(%rip)
        leaq    f3(%rip), %rax
        call    *%rax
        addq    $8, %rsp
        .cfi_def_cfa_offset 8
        jmp     *f1@GOTPCREL(%rip)
        .cfi_endproc

Reply via email to