fix 11693

Richard Henderson rth@redhat.com
Sun Aug 10 21:36:00 GMT 2003


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.


r~


        * 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 1.198.2.11
diff -u -p -u -r1.198.2.11 ia64.c
--- ia64.c	8 Aug 2003 22:07:14 -0000	1.198.2.11
+++ 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);
 		  bundle_pos++;
 		}
 	      continue;



More information about the Gcc-patches mailing list