This with LAST_UPDATED "Wed Apr 13 18:35:48 UTC 2005", just after committing CRIS prologue as RTL.
Compare the assembly of the attached file (a pruned version corresponding to the fp-bit libgcc object _pack_df.o) compiled at -O2 with to a few minutes before that LAST_UPDATED. Also observable with -mno-prologue-epilogue as follows: --- packd.s 2005-04-13 21:13:39.448893527 +0200 +++ packd.s.proepi 2005-04-13 21:13:19.986146213 +0200 @@ -4,6 +4,8 @@ .global ___pack_d .type ___pack_d, @function ___pack_d: + subq 32,$sp + movem $r5,[$sp] move.d [$r10+12],$r2 move.d [$r10+16],$r3 move.d [$r10+4],$r5 @@ -15,21 +17,19 @@ ___pack_d: beq .L5 cmpq 2,$r9 - beq .L37 - clear.d $r0 - + beq .L7 + nop test.d $r2 ax test.d $r3 - beq .L38 - clear.d $r1 - + beq .L7 + nop move.d [$r10+8],$r4 The first two delay-slots aren't filled any more, when having an RTL prologue (and epilogue). The unexpected/unwanted difference goes away with -fno-reorder-blocks. Issue noted here awaiting further investigation. -- Summary: RTL prologue and basic-block reordering pessimizes delay-slot filling Product: gcc Version: 4.1.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P2 Component: rtl-optimization AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: hp at gcc dot gnu dot org CC: gcc-bugs at gcc dot gnu dot org GCC host triplet: i686-pc-linux-gnu GCC target triplet: cris-axis-elf http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21002