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]

[PATCH/RFA] Don't duplicate noncopyable insns


2 tests of libjava began to fail on sh4-unknown-linux-gnu from
20050202 mainline because of the duplicated labels.  It seems

2005-02-01  Steven Bosscher  <>

	PR optimization/15242
	* params.def (PARAM_MAX_GOTO_DUPLICATION_INSNS): New param.
	* basic-block.h (duplicate_computed_gotos): Add prototype.
	* bb-reorder.c (duplicate_computed_gotos): New function to
	duplicate sufficiently small blocks ending in a computed jump.

causes it.  duplicate_computed_gotos may duplicate a block but
unfortunately SH has noncopyable insns in PIC case.  The attached
patch takes noncopyable insns into account.
This problem may cause a latent bug for alpha and s390 which
also have noncopyable insns, though I'm not sure about it.
The patch is tesetd with bootstrap and make -k check with no new
failures for sh4-unknown-linux-gnu and i686-unknown-linux-gnu.

2005-02-16  Kaz Kojima  <>

	* bb-reorder.c (duplicate_computed_gotos): Don't duplicate
	the block including noncopyable insn.

diff -uprN ORIG/gcc/gcc/bb-reorder.c LOCAL/gcc/gcc/bb-reorder.c
--- ORIG/gcc/gcc/bb-reorder.c	2005-02-16 11:25:59.000000000 +0900
+++ LOCAL/gcc/gcc/bb-reorder.c	2005-02-16 15:11:26.743995515 +0900
@@ -2050,7 +2050,17 @@ duplicate_computed_gotos (void)
 	  FOR_BB_INSNS (bb, insn)
 	      if (INSN_P (insn))
-	        size += get_attr_length (insn);
+		{
+		  /* If the insn isn't copyable, don't duplicate
+		     the block.  */
+		  if (targetm.cannot_copy_insn_p
+		      && targetm.cannot_copy_insn_p (insn))
+		    {
+		      size = max_size + 1;
+		      break;
+		    }
+		  size += get_attr_length (insn);
+		}
 	      if (size > max_size)

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