OSDN Git Service

* trans-decl.c (gfc_build_qualified_array): Ensure
[pf3gnuchains/gcc-fork.git] / gcc / haifa-sched.c
index 0a85b6e..8bea5e3 100644 (file)
@@ -1586,7 +1586,8 @@ setup_insn_max_reg_pressure (rtx after, bool update_p)
     max_reg_pressure[ira_reg_class_cover[i]]
       = curr_reg_pressure[ira_reg_class_cover[i]];
   for (insn = NEXT_INSN (after);
-       insn != NULL_RTX && BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (after);
+       insn != NULL_RTX && ! BARRIER_P (insn)
+        && BLOCK_FOR_INSN (insn) == BLOCK_FOR_INSN (after);
        insn = NEXT_INSN (insn))
     if (NONDEBUG_INSN_P (insn))
       {
@@ -1695,6 +1696,7 @@ schedule_insn (rtx insn)
         sd_iterator_cond (&sd_it, &dep);)
       {
        rtx dbg = DEP_PRO (dep);
+       struct reg_use_data *use, *next;
 
        gcc_assert (DEBUG_INSN_P (dbg));
 
@@ -1716,6 +1718,14 @@ schedule_insn (rtx insn)
        INSN_VAR_LOCATION_LOC (dbg) = gen_rtx_UNKNOWN_VAR_LOC ();
        df_insn_rescan (dbg);
 
+       /* Unknown location doesn't use any registers.  */
+       for (use = INSN_REG_USE_LIST (dbg); use != NULL; use = next)
+         {
+           next = use->next_insn_use;
+           free (use);
+         }
+       INSN_REG_USE_LIST (dbg) = NULL;
+
        /* We delete rather than resolve these deps, otherwise we
           crash in sched_free_deps(), because forward deps are
           expected to be released before backward deps.  */
@@ -1835,27 +1845,22 @@ concat_note_lists (rtx from_end, rtx *to_endp)
 void
 remove_notes (rtx head, rtx tail)
 {
-  rtx next_tail, prev, insn, next;
+  rtx next_tail, insn, next;
 
   note_list = 0;
   if (head == tail && !INSN_P (head))
     return;
 
   next_tail = NEXT_INSN (tail);
-  prev = PREV_INSN (head);
   for (insn = head; insn != next_tail; insn = next)
     {
       next = NEXT_INSN (insn);
       if (!NOTE_P (insn))
-       {
-         prev = insn;
-         continue;
-       }
+       continue;
 
       switch (NOTE_KIND (insn))
        {
        case NOTE_INSN_BASIC_BLOCK:
-         prev = insn;
          continue;
 
        case NOTE_INSN_EPILOGUE_BEG: