Package: gcc-3.0
Version: 1:3.0-0pre010403
Severity: wishlist

For the following program,

int k;

extern void b();

int a(int i) {
        while (k < i) {
                b();
        }
}

GCC generates this on i386 (gcc -S -Os),

a:
        pushl   %ebp
        movl    %esp, %ebp
        pushl   %ebx
        pushl   %ecx
        movl    8(%ebp), %ebx
        cmpl    %ebx, k
        jge     .L7
        .p2align 2
.L5:
        call    b
        cmpl    %ebx, k
        jl      .L5
.L7:
        popl    %edx
        popl    %ebx
        popl    %ebp
        ret

I don't see the reason why it isn't doing:

        .p2align 2
.L5:
        cmpl    %ebx, k
        jge     .L7
        call    b
        jmp     .L5
.L7:

or

        jmp     .L7
        .p2align 2
.L5:
        call    b
.L7:
        cmpl    %ebx, k
        jl      .L5

-- System Information
Debian Release: testing/unstable
Kernel Version: Linux gondolin 2.4.3-pentiumiii-smp #1 SMP Sun Apr 15 14:20:42 
EST 2001 i686 unknown

Versions of the packages gcc-3.0 depends on:
ii  binutils       2.11.90.0.1-1  The GNU assembler, linker and binary utiliti
ii  cpp-3.0        3.0-0pre010403 The GNU C preprocessor.
ii  gcc-3.0-base   3.0-0pre010403 The GNU compiler collection (base package).
ii  libc6          2.2.2-4        GNU C Library: Shared libraries and Timezone
ii  libgcc300      3.0-0pre010403 Shared libgcc.


Reply via email to