haifa-sched.c (unlink_other_notes, [...]): Do not handle loop notes.
* haifa-sched.c (unlink_other_notes, reemit_notes): Do not handle loop notes. * sched-deps.c (sched_analyze_insn, sched_analyze): Ditto. From-SVN: r112082
This commit is contained in:
parent
c0fa472198
commit
8b96512fcc
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue