revert: re PR debug/45136 (-fcompare-debug failure with -Os -fschedule-insns)
authorAlexandre Oliva <aoliva@redhat.com>
Mon, 31 Jan 2011 05:13:34 +0000 (05:13 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Mon, 31 Jan 2011 05:13:34 +0000 (05:13 +0000)
Reverted:
2011-01-25  Alexandre Oliva  <aoliva@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.

From-SVN: r169429

gcc/ChangeLog
gcc/final.c
gcc/haifa-sched.c
gcc/sched-deps.c
gcc/sched-ebb.c
gcc/sched-int.h
gcc/sched-rgn.c

index cc5d34bbe10ccfe67a13dfc96a89c56228bc0c1a..242f4b630076009b97658a366089b219c2e0a66a 100644 (file)
@@ -1,3 +1,23 @@
+2011-01-31  Alexandre Oliva  <aoliva@redhat.com>
+
+       Reverted:
+       2011-01-25  Alexandre Oliva  <aoliva@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.
+
 2011-01-31  Alan Modra  <amodra@gmail.com>
 
        * config/rs6000/rs6000.c (print_operand): Rearrange addends in
index ceb79744c414f8f4ed58d3774c5ba2c9e7609b6a..09dec08e0eabe4fa30f6152df84d0a98a78c4e42 100644 (file)
@@ -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;
        }
     }
 
@@ -4427,6 +4423,7 @@ rest_of_clean_state (void)
               && NOTE_KIND (insn) != NOTE_INSN_BLOCK_END
               && NOTE_KIND (insn) != NOTE_INSN_CFA_RESTORE_STATE)))
        print_rtl_single (final_output, insn);
+
     }
 
   if (final_output)
index 68499f12b1c2b186997d7917937aed0399351c2f..bd3b84c5c2306db3858d4ab1393cd01d0aec98c1 100644 (file)
@@ -1900,30 +1900,8 @@ get_ebb_head_tail (basic_block beg, basic_block end, rtx *headp, rtx *tailp)
     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, basic_block end, rtx *headp, rtx *tailp)
     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_rtx tail)
 {
   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;
index 590f4deb4838b157b377e619353033587f2d60fc..817d8f966f983efaac4023c7e703f0ea78a8d3b3 100644 (file)
@@ -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;
 
index 264f694739e9d0d4b7d689bd77fb73551be1eead..59b804249d992d54e8b2c91fe6d23789731ce83f 100644 (file)
@@ -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);
index 9077c881ce69a73c673286af9c40dab1c053b5ea..68cfa23ee06af3036b944e50f4e357da5d711f3c 100644 (file)
@@ -887,6 +887,23 @@ extern VEC(haifa_deps_insn_data_def, heap) *h_d_i_d;
 #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.
index 6c4fd46a50f0e2d11d679d32609b5cc24200411f..6ed4675e5506e91ba781ed47df8d96bc8e85b5d7 100644 (file)
@@ -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);
       }
 }