This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

fix 11693

There's a sort of a fundamental misunderstanding between the backend
re-sorting code and the middle-end scheduler.  The backend did in fact
find a nice ordering of four insns that nicely filled two .mlx bundles.
But the middle-end decided that it needed to schedule an asm in the
middle of it, and the backend didn't go back and correct its assumptions.

This is not really the sort of thing that can be fixed on the branch,
so I settle for avoiding the abort.  Ignoring the L slot lets us emit
the X nop, just as we should.

Well, we would if the "nop_x" pattern weren't empty.  I have no idea
why that is that way, and didn't think it was worth tracking down,
since the result does in fact assemble.


        * config/ia64/ia64.c (ia64_emit_nops): Skip L slots when
        padding before inline assembly.

Index: ia64.c
RCS file: /cvs/gcc/gcc/gcc/config/ia64/ia64.c,v
retrieving revision
diff -u -p -u -r1.198.2.11 ia64.c
--- ia64.c	8 Aug 2003 22:07:14 -0000
+++ ia64.c	10 Aug 2003 21:26:59 -0000
@@ -7108,7 +7108,8 @@ ia64_emit_nops ()
 	      while (bundle_pos < 3)
-		  emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn);
+		  if (b->t[bundle_pos] != TYPE_L)
+		    emit_insn_before (gen_nop_type (b->t[bundle_pos]), insn);

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]