Bug 60159 - improve code for conditional sibcall
Summary: improve code for conditional sibcall
Status: RESOLVED DUPLICATE of bug 47253
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: unknown
: P3 enhancement
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: missed-optimization
Depends on:
Blocks:
 
Reported: 2014-02-12 11:23 UTC by Jay Foad
Modified: 2021-08-19 03:31 UTC (History)
6 users (show)

See Also:
Host:
Target: i?86-*-* x86_64-*-*
Build:
Known to work:
Known to fail:
Last reconfirmed: 2015-02-09 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jay Foad 2014-02-12 11:23:57 UTC
If I compile this code for x86-64 I get:

$ cat jcc.c
extern int f(int x);
int g(int x) { return x > 3 ? f(x) : x; }

$ cc1 -quiet -O3 jcc.c -o -
...
g:
.LFB0:
        .cfi_startproc
        cmpl    $3, %edi
        jg      .L4
        movl    %edi, %eax
        ret
        .p2align 4,,10
        .p2align 3
.L4:
        jmp     f
        .cfi_endproc

This code would be simpler and shorter if the jg-to-jmp sequence was replaced with a single "jg f" instruction.

I'm using gcc built from svn trunk r207717.
Comment 1 Jakub Jelinek 2014-02-12 12:20:36 UTC
Not sure if that is desirable though, it will mess up debug/unwind info.
Comment 2 Jeffrey A. Law 2014-03-07 17:20:02 UTC
Lots of things mess up debug info :-)  This seems reasonably desirable to me and shouldn't be terribly difficult to implement, possibly guarding it on -Og.
Comment 3 Andrew Pinski 2015-02-09 18:49:40 UTC
This is a target specific bug because most other targets don't have the range for their conditional branches compared to their normal jumps.

Confirmed.
Comment 4 Andrew Pinski 2021-08-19 03:31:33 UTC
Dup of bug 47253.

*** This bug has been marked as a duplicate of bug 47253 ***