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

Reply via email to