diff options
author | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-24 11:32:24 +0000 |
---|---|---|
committer | steven <steven@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-11-24 11:32:24 +0000 |
commit | 57548910722f59a3ff1f72f72c6370447c2c3314 (patch) | |
tree | 6b6bc6570ef7a0a4f2c302b560d0913867479133 /gcc/sched-deps.c | |
parent | 21b083dc05539f8f6730b5e5d961c31c78c9f00f (diff) | |
download | gcc-57548910722f59a3ff1f72f72c6370447c2c3314.tar.gz |
* cfgrtl.c (rtl_delete_block): Fix comment.
* emit-rtl.c (remove_unnecessary_notes): Die if we see BLOCK_BEG
or BLOCK_END insn notes.
* jump.c (squeeze_notes): Likewise.
* haifa-sched.c (reemit_notes): Don't "re-emit" EH_REGION_BEG and
EH_REGION_END notes, we never have them to begin with.
* sched-deps.c (sched_analyze_insn): When updating loop notes,
verify that we have indeed only recorded loop notes.
(sched_analyze): Die if we see EH_REGION_BEG or EH_REGION_END notes.
Only record loop notes.
* cfgexpand.c (tree_expand_cfg): Fix comment.
* passes.c (rest_of_compilation): Don't do a second call to
convert_from_eh_region_ranges from here, it's already called
from cfgexpand.c.
* except.c (resolve_fixup_regions): Remove.
(remove_fixup_regions): Remove.
(convert_from_eh_region_ranges_1): Remove.
(convert_from_eh_region_ranges): Remove the case where EH is
not already lowered at the tree level. We always lower there.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91148 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/sched-deps.c')
-rw-r--r-- | gcc/sched-deps.c | 35 |
1 files changed, 12 insertions, 23 deletions
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c index 5e23a9304e0..32d0fdba813 100644 --- a/gcc/sched-deps.c +++ b/gcc/sched-deps.c @@ -976,18 +976,14 @@ sched_analyze_insn (struct deps *deps, rtx x, rtx insn, rtx loop_notes) { rtx link; - /* Update loop_notes with any notes from this insn. Also determine - if any of the notes on the list correspond to instruction scheduling - barriers (loop, eh & setjmp notes, but not range notes). */ + /* Update loop_notes with any notes from this insn. */ link = loop_notes; while (XEXP (link, 1)) { - if (INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_BEG - || INTVAL (XEXP (link, 0)) == NOTE_INSN_LOOP_END - || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_BEG - || INTVAL (XEXP (link, 0)) == NOTE_INSN_EH_REGION_END) - reg_pending_barrier = MOVE_BARRIER; + 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); @@ -1323,26 +1319,19 @@ sched_analyze (struct deps *deps, rtx head, rtx tail) deps->in_post_call_group_p = post_call; } + /* EH_REGION insn notes can not appear until well after we complete + scheduling. */ + if (NOTE_P (insn)) + 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 - || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG - || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END)) + && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG + || NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)) { - rtx rtx_region; - - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_BEG - || NOTE_LINE_NUMBER (insn) == NOTE_INSN_EH_REGION_END) - rtx_region = GEN_INT (NOTE_EH_HANDLER (insn)); - else - rtx_region = const0_rtx; - - loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE, - rtx_region, - loop_notes); loop_notes = alloc_EXPR_LIST (REG_SAVE_NOTE, GEN_INT (NOTE_LINE_NUMBER (insn)), loop_notes); |