This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Elimination of duplicate sign extensions


Andrew Pinski wrote:
On 9/11/07, Mark Shinwell <shinwell@codesourcery.com> wrote:
This patch, based on one by Nigel Stephens of MIPS Technologies,
eliminates some duplicate sign extensions upon function calls.
Currently, if we have something such as:

static int f(short foobar)
{
   return foobar > 0;
}


Does this optimization fix PR 23450 ?

Before my patch your second example in that PR gives:


f:
        pushl   %ebp
        addl    $1, %eax
        movl    %esp, %ebp
        movsbl  %al,%eax
        popl    %ebp
        ret
        .size   f, .-f
        .p2align 4,,15
.globl g
        .type   g, @function
g:
        pushl   %ebp
        movl    %esp, %ebp
        movzbl  8(%ebp), %eax
        addl    $1, %eax
        movsbl  %al,%eax
        call    f
        popl    %ebp
        movsbl  %al,%eax
        ret

and after the patch we get:

f:
        pushl   %ebp
        addl    $1, %eax
        movl    %esp, %ebp
        popl    %ebp
        ret
        .size   f, .-f
        .p2align 4,,15
.globl g
        .type   g, @function
g:
        pushl   %ebp
        movl    %esp, %ebp
        movzbl  8(%ebp), %eax
        popl    %ebp
        addl    $1, %eax
        movsbl  %al,%eax
        jmp     f

So it certainly helps -- but not being an x86 expert I'm not
sure offhand if this is addressing the entirety of that PR.

On x86_64-unknown-linux-gnu, it seems that the sign extensions at
the head of functions are already being elided for some reason.

Mark


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]