------- Comment #2 from christophe dot jaillet at wanadoo dot fr  2006-07-14 
21:11 -------
I tried to compile it on my cygwin box and had a strange (and certainly
unrelated) behaviour :

gcc -O3 test.c -S
Version 3.4.4 (must be the latest version available on cygwin :()

Description : the case 1 is tested in two times. First <=2 then == 1. I think
that it is useless and that if 
        cmpl    $2, %ebx
        jle     L9
was turned into
        cmpl    $1,%ebx
        je      L9
the second test after L9: would be useless.

See code below.

        .file   "test.c"
        .def    ___main;        .scl    2;      .type   32;     .endef
        .text
        .p2align 4,,15
.globl _main
        .def    _main;  .scl    2;      .type   32;     .endef
_main:
        pushl   %ebp
        movl    $16, %eax
        movl    %esp, %ebp
        pushl   %ebx
        subl    $4, %esp
        andl    $-16, %esp
        call    __alloca
        call    ___main
        cmpl    $2, %ebx
        je      L4
        cmpl    $2, %ebx
        jle     L9                   ==> every thing <= 2
        cmpl    $3, %ebx
        je      L10
L6:
        movb    $13, (%ebx)
        xorl    %eax, %eax
        movb    $13, 1(%ebx)
        movb    $13, 2(%ebx)
        movb    $13, 3(%ebx)
        movl    -4(%ebp), %ebx
        leave
        ret
        .p2align 4,,7
L9:
        cmpl    $1, %ebx             ==> Now comparaison against 1 is done !
        jne     L6
        movb    $13, (%ebx)
        xorl    %eax, %eax
        movl    -4(%ebp), %ebx
        leave
        ret
        .p2align 4,,7
L4:
        movb    $13, (%ebx)
        xorl    %eax, %eax
        movb    $13, 1(%ebx)
        movl    -4(%ebp), %ebx
        leave
        ret
        .p2align 4,,7
L10:
        movb    $13, (%ebx)
        xorl    %eax, %eax
        movb    $13, 1(%ebx)
        movb    $13, 2(%ebx)
        movl    -4(%ebp), %ebx
        leave
        ret


-- 


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

Reply via email to