From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21761 invoked by alias); 28 Jul 2004 19:56:07 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 21752 invoked by uid 48); 28 Jul 2004 19:56:06 -0000 Date: Wed, 28 Jul 2004 19:56:00 -0000 From: "falk at debian dot org" To: gcc-bugs@gcc.gnu.org Message-ID: <20040728195603.16807.falk@debian.org> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug tree-optimization/16807] New: [lno] Weird loop unrolling X-Bugzilla-Reason: CC X-SW-Source: 2004-07/txt/msg03391.txt.bz2 List-Id: gcc version 3.5-tree-ssa-lno 20040719 (merged 20040718) For this code: int g (int *p, int n) { int r = 0, i; for (i = 0; i < n; ++i) r += p[i]; return r; } with -O3 -funroll-all-loops, I get: g: .frame $30,0,$26,0 .prologue 0 mov $31,$0 ble $17,$L4 lda $17,-1($17) mov $31,$24 $L5: ldl $23,0($16) zapnot $17,15,$3 lda $2,1($24) lda $3,1($3) lda $24,7($2) lda $4,1($2) lda $5,2($2) lda $6,3($2) lda $7,4($2) lda $8,5($2) lda $22,6($2) cmpeq $2,$3,$2 cmpeq $4,$3,$4 cmpeq $5,$3,$5 cmpeq $6,$3,$6 cmpeq $7,$3,$7 cmpeq $8,$3,$8 cmpeq $22,$3,$22 cmpeq $24,$3,$25 addl $0,$23,$0 lda $3,4($16) bne $2,$L4 ldl $1,0($3) lda $16,28($3) addl $0,$1,$0 bne $4,$L4 ldl $1,4($3) addl $0,$1,$0 bne $5,$L4 ldl $1,8($3) addl $0,$1,$0 bne $6,$L4 ldl $1,12($3) addl $0,$1,$0 bne $7,$L4 ldl $1,16($3) addl $0,$1,$0 bne $8,$L4 ldl $1,20($3) addl $0,$1,$0 bne $22,$L4 ldl $1,24($3) addl $0,$1,$0 beq $25,$L5 .align 4 $L4: ret $31,($26),1 .end g which strikes me as an extremely weird way of unrolling a loop, and in fact it takes twice the time as the code 3.5 generates, which is: g: .frame $30,0,$26,0 .prologue 0 mov $17,$25 ble $17,$L38 lda $17,-1($17) cmple $25,1,$1 ldl $0,0($16) lda $24,1($31) and $17,7,$17 lda $23,4($16) bne $1,$L4 addl $31,$17,$17 beq $17,$L5 cmpeq $17,1,$1 bne $1,$L31 cmpeq $17,2,$1 bne $1,$L32 cmpeq $17,3,$1 bne $1,$L33 cmpeq $17,4,$1 bne $1,$L34 cmpeq $17,5,$1 bne $1,$L35 cmpeq $17,6,$1 bne $1,$L36 ldl $1,4($16) lda $23,8($16) lda $24,2($31) addl $0,$1,$0 $L36: ldl $1,0($23) addl $24,1,$24 lda $23,4($23) addl $0,$1,$0 $L35: ldl $1,0($23) addl $24,1,$24 lda $23,4($23) addl $0,$1,$0 $L34: ldl $1,0($23) addl $24,1,$24 lda $23,4($23) addl $0,$1,$0 $L33: ldl $1,0($23) addl $24,1,$24 lda $23,4($23) addl $0,$1,$0 $L32: ldl $1,0($23) addl $24,1,$24 lda $23,4($23) addl $0,$1,$0 $L31: ldl $2,0($23) addl $24,1,$24 lda $23,4($23) cmple $25,$24,$1 addl $0,$2,$0 bne $1,$L4 $L5: ldl $1,0($23) ldl $8,4($23) addl $24,8,$24 ldl $6,8($23) ldl $7,12($23) cmple $25,$24,$22 ldl $4,16($23) ldl $5,20($23) addl $0,$1,$1 ldl $2,24($23) ldl $3,28($23) lda $23,32($23) addl $1,$8,$1 addl $1,$6,$1 addl $1,$7,$1 addl $1,$4,$1 addl $1,$5,$1 addl $1,$2,$1 addl $1,$3,$0 beq $22,$L5 $L4: ret $31,($26),1 $L38: mov $31,$0 ret $31,($26),1 .end g -- Summary: [lno] Weird loop unrolling Product: gcc Version: lno 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=16807