http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58615

            Bug ID: 58615
           Summary: [SH] Optimize simple function returns
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: olegendo at gcc dot gnu.org
            Target: sh*-*-*

As of rev. 202876, the file linux-2.4.23-pre3-testplatform/net/ipv4/igmp.c from
the CSiBE set, compiled with -m4-single -ml -O2 -mpretend-cmove shows the
following sequence:

    .type    _is_in, @function
_is_in:
        ...

.L3:
        ...
    tst    r1,r1
    negc    r0,r3
    .align 2
.L29:
    rts    
    mov    r3,r0

.L8:
        ...
    movt    r0
    bra    .L29
    xor    r0,r3

.L9:
        ...
    tst    r7,r7
    bra    .L29
    movt    r3

.L6:
        ...
    tst    r1,r1
    bra    .L29
    negc    r0,r3

.L7:
        ...
    cmp/eq    r2,r1
    bra    .L29
    movt    r3

.L31:
        ...
    tst    r1,r1
    bra    .L29
    negc    r0,r3


In cases where the prologue is trivial or consists of only a few instructions,
it would be better to return from the function directly, instead of branching
to  the returning basic block.

Reply via email to