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

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |NEW
                 CC|                            |hubicka at gcc dot gnu.org
           Assignee|rakdver at gcc dot gnu.org         |unassigned at gcc dot 
gnu.org

--- Comment #22 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Unasigning Zdenek. He is busy by his math :)

on x86 we now generate wit -Os:
test:
.LFB0:
        .cfi_startproc
        pushl   %ebp
        .cfi_def_cfa_offset 8
        .cfi_offset 5, -8
        movl    %esp, %ebp
        .cfi_def_cfa_register 5
        pushl   %edi
        pushl   %esi
        pushl   %ebx
        .cfi_offset 7, -12
        .cfi_offset 6, -16
        .cfi_offset 3, -20
        xorl    %ebx, %ebx
        subl    $28, %esp
        movl    8(%ebp), %eax
.L2:
        cmpl    %ebx, (%eax)
        jle     .L1
        leal    4(,%ebx,4), %edi
        xorl    %esi, %esi
        leal    -4(%edi), %ecx
.L5:
        cmpl    16(%ebp), %esi
        jge     .L8
        movl    4(%eax), %edx
        movl    %eax, -32(%ebp)
        incl    %esi
        pushl   %eax
        pushl   %eax
        movl    %ecx, -28(%ebp)
        pushl   (%edx,%edi)
        pushl   (%edx,%ecx)
        call    func
        addl    $16, %esp
        movl    -32(%ebp), %eax
        movl    -28(%ebp), %ecx
        jmp     .L5
.L8:
        incl    %ebx
        jmp     .L2
.L1:
        leal    -12(%ebp), %esp
        popl    %ebx
        .cfi_restore 3
        popl    %esi
        .cfi_restore 6
        popl    %edi
        .cfi_restore 7
        popl    %ebp
        .cfi_restore 5
        .cfi_def_cfa 4, 4
        ret
        .cfi_endproc


This is 79 bytes, while code quoted is 88 bytes.

and -O2:
test:
.LFB0:
        .cfi_startproc
        pushl   %ebp
        pushl   %edi
        xorl    %ebp, %ebp
        pushl   %esi
        pushl   %ebx
        subl    $28, %esp
        movl    48(%esp), %esi
        movl    (%esi), %ecx
        testl   %ecx, %ecx
        jle     .L1
        .p2align 4,,10
        .p2align 3
.L2:
        movl    56(%esp), %edx
        leal    1(%ebp), %eax
        movl    %eax, 12(%esp)
        testl   %edx, %edx
        jle     .L6
        leal    0(,%eax,4), %ebx
        xorl    %ebp, %ebp
        leal    -4(%ebx), %edi
        .p2align 4,,10
        .p2align 3
.L4:
        movl    4(%esi), %edx
        subl    $8, %esp
        addl    $1, %ebp
        pushl   (%edx,%ebx)
        pushl   (%edx,%edi)
        call    func
        addl    $16, %esp
        cmpl    %ebp, 56(%esp)
        jne     .L4
.L6:
        movl    12(%esp), %ebp
        cmpl    %ebp, (%esi)
        jg      .L2
.L1:
        addl    $28, %esp
        popl    %ebx
        popl    %esi
        popl    %edi
        popl    %ebp
        ret
.LFE0:

which is 100 bytes. So it seems that -O2 code got bigger and -Os code smaller

Reply via email to