Noticed a regression relative to 4.0 on the code generated for one of the loops in zaxpy.f of the SPEC wupwise benchark. The loop is transformed into a branch-on-count loop, but the target on the branch is the loop exit (return in this case) instead of the loop start. The 'bct' is immediately followed by an unconditional branch to the loop start.
Here's a snippet of the generated code (this is for the first loop in the source, even though it appears as the second loop in the generated code). 'L18' is the epilog block. .L15: addi %r0,%r7,-1 # D.511, ix, ... ... stfdx %f11,%r11,%r31 # (* zy), SR.12 bdz .L18 b .L15 -- Summary: Reversed branch-on-count loop (DoLoop) Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: regression AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pthaugen at us dot ibm dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: powerpc*-*-* GCC host triplet: powerpc*-*-* GCC target triplet: powerpc*-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20372