GNU C version 4.0.0 20050120 (experimental) (alphaev68-unknown-linux-gnu)

Test case:

void fbSolidFillmmx(int w, unsigned char *d) {
    while (w >= 64) {
        *(unsigned long long *) (d +  0) = 0;
        *(unsigned long long *) (d +  8) = 0;
        *(unsigned long long *) (d + 16) = 0;
        *(unsigned long long *) (d + 24) = 0;
        *(unsigned long long *) (d + 32) = 0;
        *(unsigned long long *) (d + 40) = 0;
        *(unsigned long long *) (d + 48) = 0;
        *(unsigned long long *) (d + 56) = 0;
        w -= 64;
        d += 64;
    }
}

gives

fbSolidFillmmx:
        cmple $16,63,$1
        bne $1,$L5
        lda $8,8($17)
        lda $7,16($17)
        lda $6,24($17)
        lda $5,32($17)
        lda $4,40($17)
        lda $3,48($17)
        lda $2,56($17)
        mov $31,$22
        .align 4
$L4:
        stq $31,0($17)
        lda $22,64($22)
        lda $17,64($17)
        stq $31,0($8)
        subl $16,$22,$1
        lda $8,64($8)
        stq $31,0($7)
        cmple $1,63,$1
        lda $7,64($7)
        stq $31,0($6)
        lda $6,64($6)
        stq $31,0($5)
        lda $5,64($5)
        stq $31,0($4)
        lda $4,64($4)
        stq $31,0($3)
        lda $3,64($3)
        stq $31,0($2)
        lda $2,64($2)
        beq $1,$L4
$L5:
        ret $31,($26),1

gcc-3.4 generates reasonable code:

fbSolidFillmmx:
        cmple $16,63,$1
        bne $1,$L6
        .align 4
$L11:
        subl $16,64,$16
        stq $31,0($17)
        stq $31,8($17)
        cmple $16,63,$1
        stq $31,16($17)
        stq $31,24($17)
        stq $31,32($17)
        stq $31,40($17)
        stq $31,48($17)
        stq $31,56($17)
        lda $17,64($17)
        beq $1,$L11
$L6:
        ret $31,($26),1

-- 
           Summary: [4.0 regression] Way too many IVs
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: falk at debian dot org
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: alphaev68-unknown-linux-gnu
  GCC host triplet: alphaev68-unknown-linux-gnu
GCC target triplet: alphaev68-unknown-linux-gnu


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

Reply via email to