OSDN Git Service

* haifa-sched.c (unlink_other_notes, reemit_notes): Do not handle
authorrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Mar 2006 10:50:46 +0000 (10:50 +0000)
committerrakdver <rakdver@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Mar 2006 10:50:46 +0000 (10:50 +0000)
loop notes.
* sched-deps.c (sched_analyze_insn, sched_analyze): Ditto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@112082 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/haifa-sched.c
gcc/sched-deps.c

index 8a51c0d..48c7e7a 100644 (file)
@@ -1,3 +1,9 @@
+2006-03-15  Zdenek Dvorak <dvorakz@suse.cz>
+
+       * haifa-sched.c (unlink_other_notes, reemit_notes): Do not handle
+       loop notes.
+       * sched-deps.c (sched_analyze_insn, sched_analyze): Ditto.
+
 2006-03-15  Andreas Schwab  <schwab@suse.de>
 
        * gensupport.c (identify_predicable_attribute): Don't free p_false
index 325573a..89e1a18 100644 (file)
@@ -989,9 +989,7 @@ unlink_other_notes (rtx insn, rtx tail)
        PREV_INSN (next) = prev;
 
       /* See sched_analyze to see how these are handled.  */
-      if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_BEG
-         && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_END
-         && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
+      if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK
          && NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG
          && NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_END)
        {
@@ -1615,7 +1613,7 @@ move_insn1 (rtx insn, rtx last)
 }
 
 /* Search INSN for REG_SAVE_NOTE note pairs for
-   NOTE_INSN_{LOOP,EHREGION}_{BEG,END}; and convert them back into
+   NOTE_INSN_EHREGION_{BEG,END}; and convert them back into
    NOTEs.  The REG_SAVE_NOTE note following first one is contains the
    saved value for NOTE_BLOCK_NUMBER which is useful for
    NOTE_INSN_EH_REGION_{BEG,END} NOTEs.  LAST is the last instruction
index 4831cff..4fbe5dd 100644 (file)
@@ -96,7 +96,7 @@ static void fixup_sched_groups (rtx);
 static void flush_pending_lists (struct deps *, rtx, int, int);
 static void sched_analyze_1 (struct deps *, rtx, rtx);
 static void sched_analyze_2 (struct deps *, rtx, rtx);
-static void sched_analyze_insn (struct deps *, rtx, rtx, rtx);
+static void sched_analyze_insn (struct deps *, rtx, rtx);
 
 static rtx sched_get_condition (rtx);
 static int conditions_mutex_p (rtx, rtx);
@@ -881,7 +881,7 @@ sched_analyze_2 (struct deps *deps, rtx x, rtx insn)
 /* Analyze an INSN with pattern X to find all dependencies.  */
 
 static void
-sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
+sched_analyze_insn (struct deps *deps, rtx x, rtx insn)
 {
   RTX_CODE code = GET_CODE (x);
   rtx link;
@@ -1002,28 +1002,6 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes)
        }
     }
 
-  /* If there is a {LOOP,EHREGION}_{BEG,END} note in the middle of a basic
-     block, then we must be sure that no instructions are scheduled across it.
-     Otherwise, the reg_n_refs info (which depends on loop_depth) would
-     become incorrect.  */
-  if (loop_notes)
-    {
-      rtx link;
-
-      /* Update loop_notes with any notes from this insn.  */
-      link = loop_notes;
-      while (XEXP (link, 1))
-       {
-         gcc_assert (INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_BEG
-                     || INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_END);
-
-         reg_pending_barrier = MOVE_BARRIER;
-         link = XEXP (link, 1);
-       }
-      XEXP (link, 1) = REG_NOTES (insn);
-      REG_NOTES (insn) = loop_notes;
-    }
-
   /* If this instruction can throw an exception, then moving it changes
      where block boundaries fall.  This is mighty confusing elsewhere.
      Therefore, prevent such an instruction from being moved.  */
@@ -1245,7 +1223,6 @@ void
 sched_analyze (struct deps *deps, rtx head, rtx tail)
 {
   rtx insn;
-  rtx loop_notes = 0;
 
   if (current_sched_info->use_cselib)
     cselib_init (true);
@@ -1279,8 +1256,7 @@ sched_analyze (struct deps *deps, rtx head, rtx tail)
                deps->last_pending_memory_flush
                  = alloc_INSN_LIST (insn, deps->last_pending_memory_flush);
            }
-         sched_analyze_insn (deps, PATTERN (insn), insn, loop_notes);
-         loop_notes = 0;
+         sched_analyze_insn (deps, PATTERN (insn), insn);
        }
       else if (CALL_P (insn))
        {
@@ -1334,8 +1310,7 @@ sched_analyze (struct deps *deps, rtx head, rtx tail)
          add_dependence_list_and_free (insn, &deps->sched_before_next_call, 1,
                                        REG_DEP_ANTI);
 
-         sched_analyze_insn (deps, PATTERN (insn), insn, loop_notes);
-         loop_notes = 0;
+         sched_analyze_insn (deps, PATTERN (insn), insn);
 
          /* In the absence of interprocedural alias analysis, we must flush
             all pending reads and writes, and start new dependencies starting
@@ -1359,19 +1334,6 @@ sched_analyze (struct deps *deps, rtx head, rtx tail)
        gcc_assert (NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG
                    && NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_END);
 
-      /* See comments on reemit_notes as to why we do this.
-        ??? Actually, the reemit_notes just say what is done, not why.  */
-
-      if (NOTE_P (insn)
-         && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
-             || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END))
-       {
-         loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE,
-                                       GEN_INT (NOTE_LINE_NUMBER (insn)),
-                                       loop_notes);
-         CONST_OR_PURE_CALL_P (loop_notes) = CONST_OR_PURE_CALL_P (insn);
-       }
-
       if (current_sched_info->use_cselib)
        cselib_process_insn (insn);