diff options
author | Richard Henderson <rth@gcc.gnu.org> | 2001-12-30 20:19:35 -0800 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2001-12-30 20:19:35 -0800 |
commit | d73b1f074b027d0bf173cbe7b6dc88df5307889c (patch) | |
tree | eda556eeb126b284e63a737eeba7cb809f6af60e /gcc/haifa-sched.c | |
parent | eb3aaa5b8614583989296fe7a7ce16baf7c258f4 (diff) | |
download | gcc-d73b1f074b027d0bf173cbe7b6dc88df5307889c.zip gcc-d73b1f074b027d0bf173cbe7b6dc88df5307889c.tar.gz gcc-d73b1f074b027d0bf173cbe7b6dc88df5307889c.tar.bz2 |
cfglayout.c (scope_def, [...]): Remove.
* cfglayout.c (scope_def, scope_forest_info, forest,
relate_bbs_with_scopes, make_new_scope, build_scope_forest,
remove_scope_notes, insert_intra_before_1, insert_intra_1,
insert_intra_bb_scope_notes, insert_inter_bb_scope_notes,
rebuild_scope_notes, free_scope_forest_1, dump_scope_forest,
dump_scope_forest_1, get_next_bb_note, get_prev_bb_note): Remove.
(fixup_reorder_chain): Don't set scope for bb.
(insn_scopes, scope_to_insns_initialize, set_block_levels,
change_scope, scope_to_insns_finalize): New.
(cfg_layout_initialize, cfg_layout_finalize): Update to match.
* cfglayout.h (scope_def, scope): Remove.
(reorder_block_def): Remove scope member.
(scope_to_insns_initialize, scope_to_insns_finalize): Declare.
* haifa-sched.c: Revert reemit_other_notes change.
* sched-ebb.c (schedule_ebbs): Don't call remove_unnecessary_notes.
Use scope_to_insns_initialize and scope_to_insns_finalize.
* sched-rgn.c (schedule_insns): Likewise.
* gcc.dg/debug-6.c: New.
From-SVN: r48412
Diffstat (limited to 'gcc/haifa-sched.c')
-rw-r--r-- | gcc/haifa-sched.c | 74 |
1 files changed, 18 insertions, 56 deletions
diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index ca6cfbb..7b9a2e8 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -319,7 +319,6 @@ static void adjust_priority PARAMS ((rtx)); static rtx unlink_other_notes PARAMS ((rtx, rtx)); static rtx unlink_line_notes PARAMS ((rtx, rtx)); static rtx reemit_notes PARAMS ((rtx, rtx)); -static rtx reemit_other_notes PARAMS ((rtx, rtx)); static rtx *ready_lastpos PARAMS ((struct ready_list *)); static void ready_sort PARAMS ((struct ready_list *)); @@ -1576,60 +1575,6 @@ reemit_notes (insn, last) return retval; } - -/* NOTE_LIST is the end of a chain of notes previously found among the - insns. Insert them at the beginning of the insns. Actually, insert - NOTE_INSN_BLOCK_END notes at the end of the insns. Doing otherwise - tends to collapse lexical blocks into empty regions, which is somewhat - less than useful. */ -/* ??? Ideally we'd mark each insn with the block it originated from, - and preserve that information. This requires some moderately - sophisticated block reconstruction code, since block nestings must - be preserved. */ - -static rtx -reemit_other_notes (head, tail) - rtx head, tail; -{ - bool saw_block_beg = false; - - while (note_list) - { - rtx note_tail = note_list; - note_list = PREV_INSN (note_tail); - - if (NOTE_LINE_NUMBER (note_tail) == NOTE_INSN_BLOCK_END - /* We can only extend the lexical block while we havn't - seen a BLOCK_BEG note. Otherwise we risk mis-nesting - the notes. */ - && ! saw_block_beg) - { - rtx insert_after = tail; - if (GET_CODE (NEXT_INSN (tail)) == BARRIER) - insert_after = NEXT_INSN (tail); - - PREV_INSN (note_tail) = insert_after; - NEXT_INSN (note_tail) = NEXT_INSN (insert_after); - if (NEXT_INSN (insert_after)) - PREV_INSN (NEXT_INSN (insert_after)) = note_tail; - NEXT_INSN (insert_after) = note_tail; - } - else - { - if (NOTE_LINE_NUMBER (note_tail) == NOTE_INSN_BLOCK_BEG) - saw_block_beg = true; - - PREV_INSN (note_tail) = PREV_INSN (head); - NEXT_INSN (PREV_INSN (head)) = note_tail; - NEXT_INSN (note_tail) = head; - PREV_INSN (head) = note_tail; - head = note_tail; - } - } - - return head; -} - /* Move INSN, and all insns which should be issued before it, due to SCHED_GROUP_P flag. Reemit notes if needed. @@ -1855,7 +1800,24 @@ schedule_block (b, rgn_n_insns) head = NEXT_INSN (prev_head); tail = last; - head = reemit_other_notes (head, tail); + /* Restore-other-notes: NOTE_LIST is the end of a chain of notes + previously found among the insns. Insert them at the beginning + of the insns. */ + if (note_list != 0) + { + rtx note_head = note_list; + + while (PREV_INSN (note_head)) + { + note_head = PREV_INSN (note_head); + } + + PREV_INSN (note_head) = PREV_INSN (head); + NEXT_INSN (PREV_INSN (head)) = note_head; + PREV_INSN (head) = note_list; + NEXT_INSN (note_list) = head; + head = note_head; + } /* Debugging. */ if (sched_verbose) |