[gcc] 4.6.0-0.5

Jakub Jelinek jakub at fedoraproject.org
Fri Jan 28 11:29:49 UTC 2011


commit 055fab3c16ac801c99235375c2ba3601fbce025a
Author: Jakub Jelinek <jakub at redhat.com>
Date:   Fri Jan 28 12:29:35 2011 +0100

    4.6.0-0.5

 gcc.spec                   |    2 +
 gcc46-pr45136-revert.patch |  207 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 209 insertions(+), 0 deletions(-)
---
diff --git a/gcc.spec b/gcc.spec
index ce9a661..683faf0 100644
--- a/gcc.spec
+++ b/gcc.spec
@@ -169,6 +169,7 @@ Patch20: gcc46-pr46890.patch
 Patch21: gcc46-ppl-0.10.patch
 Patch22: gcc46-pr31490.patch
 Patch23: gcc46-Woverlength-string.patch
+Patch24: gcc46-pr45136-revert.patch
 
 Patch1000: fastjar-0.97-segfault.patch
 Patch1001: fastjar-0.97-len1.patch
@@ -604,6 +605,7 @@ not stable, so plugins must be rebuilt any time GCC is updated.
 %patch21 -p0 -b .ppl-0.10~
 %patch22 -p0 -b .pr31490~
 %patch23 -p0 -b .Woverlength-string~
+%patch24 -p0 -b .pr45136-revert~
 
 # This testcase doesn't compile.
 rm libjava/testsuite/libjava.lang/PR35020*
diff --git a/gcc46-pr45136-revert.patch b/gcc46-pr45136-revert.patch
new file mode 100644
index 0000000..423ddea
--- /dev/null
+++ b/gcc46-pr45136-revert.patch
@@ -0,0 +1,207 @@
+Temporarily revert:
+2011-01-25  Alexandre Oliva  <aoliva at redhat.com>
+
+	PR debug/45136
+	PR debug/45130
+	* haifa-sched.c (get_ebb_head_tail): Move notes across boundary
+	debug insns.
+	(no_real_insns_p, schedule_block, set_priorities): Drop special
+	treatment of boundary debug insns.
+	* sched-deps.c (sd_init_insn, sd_finish_insn): Don't mark debug
+	insns.
+	* sched-ebb.c (schedule_ebbs): Don't skip debug insns.
+	* sched-int.h (DEBUG_INSN_SCHED_P): Remove.
+	(BOUNDARY_DEBUG_INSN_P): Likewise.
+	(SCHEDULE_DEBUG_INSN_P): Likewise.
+	* sched-rgn.c (init_ready_list): Drop special treatment of
+	boundary debug insns.
+	* final.c (rest_of_clean-state): Clear notes' BB.
+
+--- gcc/sched-ebb.c	(revision 169260)
++++ gcc/sched-ebb.c	(revision 169259)
+@@ -598,9 +598,9 @@ schedule_ebbs (void)
+ 	 a note or two.  */
+       while (head != tail)
+ 	{
+-	  if (NOTE_P (head))
++	  if (NOTE_P (head) || BOUNDARY_DEBUG_INSN_P (head))
+ 	    head = NEXT_INSN (head);
+-	  else if (NOTE_P (tail))
++	  else if (NOTE_P (tail) || BOUNDARY_DEBUG_INSN_P (tail))
+ 	    tail = PREV_INSN (tail);
+ 	  else if (LABEL_P (head))
+ 	    head = NEXT_INSN (head);
+--- gcc/final.c	(revision 169260)
++++ gcc/final.c	(revision 169259)
+@@ -4402,11 +4402,7 @@ rest_of_clean_state (void)
+ 	    if (LABEL_P (insn))
+ 	      INSN_UID (insn) = CODE_LABEL_NUMBER (insn);
+ 	    else
+-	      {
+-		if (NOTE_P (insn))
+-		  set_block_for_insn (insn, NULL);
+-		INSN_UID (insn) = 0;
+-	      }
++	      INSN_UID (insn) = 0;
+ 	}
+     }
+ 
+--- gcc/haifa-sched.c	(revision 169260)
++++ gcc/haifa-sched.c	(revision 169259)
+@@ -1900,30 +1900,8 @@ get_ebb_head_tail (basic_block beg, basi
+     beg_head = NEXT_INSN (beg_head);
+ 
+   while (beg_head != beg_tail)
+-    if (NOTE_P (beg_head))
++    if (NOTE_P (beg_head) || BOUNDARY_DEBUG_INSN_P (beg_head))
+       beg_head = NEXT_INSN (beg_head);
+-    else if (DEBUG_INSN_P (beg_head))
+-      {
+-	rtx note, next;
+-
+-	for (note = NEXT_INSN (beg_head);
+-	     note != beg_tail;
+-	     note = next)
+-	  {
+-	    next = NEXT_INSN (note);
+-	    if (NOTE_P (note))
+-	      {
+-		if (sched_verbose >= 9)
+-		  fprintf (sched_dump, "reorder %i\n", INSN_UID (note));
+-
+-		reorder_insns_nobb (note, note, PREV_INSN (beg_head));
+-	      }
+-	    else if (!DEBUG_INSN_P (note))
+-	      break;
+-	  }
+-
+-	break;
+-      }
+     else
+       break;
+ 
+@@ -1935,33 +1913,8 @@ get_ebb_head_tail (basic_block beg, basi
+     end_head = NEXT_INSN (end_head);
+ 
+   while (end_head != end_tail)
+-    if (NOTE_P (end_tail))
++    if (NOTE_P (end_tail) || BOUNDARY_DEBUG_INSN_P (end_tail))
+       end_tail = PREV_INSN (end_tail);
+-    else if (DEBUG_INSN_P (end_tail))
+-      {
+-	rtx note, prev;
+-
+-	for (note = PREV_INSN (end_tail);
+-	     note != end_head;
+-	     note = prev)
+-	  {
+-	    prev = PREV_INSN (note);
+-	    if (NOTE_P (note))
+-	      {
+-		if (sched_verbose >= 9)
+-		  fprintf (sched_dump, "reorder %i\n", INSN_UID (note));
+-
+-		reorder_insns_nobb (note, note, end_tail);
+-
+-		if (end_tail == BB_END (end))
+-		  df_insn_change_bb (note, NULL);
+-	      }
+-	    else if (!DEBUG_INSN_P (note))
+-	      break;
+-	  }
+-
+-	break;
+-      }
+     else
+       break;
+ 
+@@ -1975,7 +1928,8 @@ no_real_insns_p (const_rtx head, const_r
+ {
+   while (head != NEXT_INSN (tail))
+     {
+-      if (!NOTE_P (head) && !LABEL_P (head))
++      if (!NOTE_P (head) && !LABEL_P (head)
++	  && !BOUNDARY_DEBUG_INSN_P (head))
+ 	return 0;
+       head = NEXT_INSN (head);
+     }
+@@ -2858,7 +2812,7 @@ schedule_block (basic_block *target_bb)
+   last_scheduled_insn = prev_head;
+ 
+   gcc_assert ((NOTE_P (last_scheduled_insn)
+-	       || DEBUG_INSN_P (last_scheduled_insn))
++	       || BOUNDARY_DEBUG_INSN_P (last_scheduled_insn))
+ 	      && BLOCK_FOR_INSN (last_scheduled_insn) == *target_bb);
+ 
+   /* Initialize INSN_QUEUE.  Q_SIZE is the total number of insns in the
+@@ -3365,7 +3319,7 @@ set_priorities (rtx head, rtx tail)
+ 	current_sched_info->sched_max_insns_priority;
+   rtx prev_head;
+ 
+-  if (head == tail && ! INSN_P (head))
++  if (head == tail && (! INSN_P (head) || BOUNDARY_DEBUG_INSN_P (head)))
+     gcc_unreachable ();
+ 
+   n_insn = 0;
+--- gcc/sched-deps.c	(revision 169260)
++++ gcc/sched-deps.c	(revision 169259)
+@@ -715,6 +715,9 @@ sd_init_insn (rtx insn)
+   INSN_FORW_DEPS (insn) = create_deps_list ();
+   INSN_RESOLVED_FORW_DEPS (insn) = create_deps_list ();
+ 
++  if (DEBUG_INSN_P (insn))
++    DEBUG_INSN_SCHED_P (insn) = TRUE;
++
+   /* ??? It would be nice to allocate dependency caches here.  */
+ }
+ 
+@@ -724,6 +727,12 @@ sd_finish_insn (rtx insn)
+ {
+   /* ??? It would be nice to deallocate dependency caches here.  */
+ 
++  if (DEBUG_INSN_P (insn))
++    {
++      gcc_assert (DEBUG_INSN_SCHED_P (insn));
++      DEBUG_INSN_SCHED_P (insn) = FALSE;
++    }
++
+   free_deps_list (INSN_HARD_BACK_DEPS (insn));
+   INSN_HARD_BACK_DEPS (insn) = NULL;
+ 
+--- gcc/sched-int.h	(revision 169260)
++++ gcc/sched-int.h	(revision 169259)
+@@ -887,6 +887,23 @@ extern VEC(haifa_deps_insn_data_def, hea
+ #define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \
+   (RECOVERY_BLOCK (INSN) != NULL && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR)
+ 
++/* The unchanging bit tracks whether a debug insn is to be handled
++   like an insn (i.e., schedule it) or like a note (e.g., it is next
++   to a basic block boundary.  */
++#define DEBUG_INSN_SCHED_P(insn) \
++  (RTL_FLAG_CHECK1("DEBUG_INSN_SCHED_P", (insn), DEBUG_INSN)->unchanging)
++
++/* True if INSN is a debug insn that is next to a basic block
++   boundary, i.e., it is to be handled by the scheduler like a
++   note.  */
++#define BOUNDARY_DEBUG_INSN_P(insn) \
++  (DEBUG_INSN_P (insn) && !DEBUG_INSN_SCHED_P (insn))
++/* True if INSN is a debug insn that is not next to a basic block
++   boundary, i.e., it is to be handled by the scheduler like an
++   insn.  */
++#define SCHEDULE_DEBUG_INSN_P(insn) \
++  (DEBUG_INSN_P (insn) && DEBUG_INSN_SCHED_P (insn))
++
+ /* Dep status (aka ds_t) of the link encapsulates information, that is needed
+    for speculative scheduling.  Namely, it is 4 integers in the range
+    [0, MAX_DEP_WEAK] and 3 bits.
+--- gcc/sched-rgn.c	(revision 169260)
++++ gcc/sched-rgn.c	(revision 169259)
+@@ -2138,7 +2138,7 @@ init_ready_list (void)
+ 	src_head = head;
+ 
+ 	for (insn = src_head; insn != src_next_tail; insn = NEXT_INSN (insn))
+-	  if (INSN_P (insn))
++	  if (INSN_P (insn) && !BOUNDARY_DEBUG_INSN_P (insn))
+ 	    try_ready (insn);
+       }
+ }


More information about the scm-commits mailing list