diff options
author | dorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-29 18:24:14 +0000 |
---|---|---|
committer | dorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-11-29 18:24:14 +0000 |
commit | 3953ee1cd1c9fd6023d4548fe5a5d9ff3f230785 (patch) | |
tree | da4032793fa855993d2d1d0ddb8fafbcd3e51adc /gcc | |
parent | 90489f58c23298d23fdfbc7967783e7c6f4d3d49 (diff) | |
download | gcc-3953ee1cd1c9fd6023d4548fe5a5d9ff3f230785.tar.gz |
2006-11-29 Tehila Meyzels <tehila@il.ibm.com>
* haifa-sched.c: Remove define LINE_NOTE(INSN).
Remove line_note_head.
Update documentation.
(associate_line_notes_with_blocks): Kill.
(extend_bb): Remove basic block argument, put void instead.
Remove line number handling for each bb.
(save_line_notes): Kill.
(restore_line_notes): Kill.
(sched_init): Remove line_note_head initialization.
Change extend_bb call.
(sched_finish): Remove free of line_note_head.
(add_block): Change extend_bb call.
* sched-ebb.c (schedule_ebb): Remove save_line_notes,
rm_line_notes and restore_line_notes calls.
(schedule_ebbs): Remove rm_redundant_line_notes.
* sched-int.h (struct haifa_insn_data): Remove line_note.
(save_line_notes): Remove declaration.
(restore_line_notes): Remove declaration.
* modulo-sched.c (loop_canon_p): Update debug info printing
by using insn locators instead of line note.
(sms_schedule): Update debug info printing, by using insn
locators instead of line note.
* sched-rgn.c (debug_dependencies): Remove handling of case
n>0 (line number), since it's a dead code.
(schedule_region): Remove save_line_notes and
restore_line_notes calls.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@119328 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 28 | ||||
-rw-r--r-- | gcc/haifa-sched.c | 152 | ||||
-rw-r--r-- | gcc/modulo-sched.c | 12 | ||||
-rw-r--r-- | gcc/sched-ebb.c | 8 | ||||
-rw-r--r-- | gcc/sched-int.h | 8 | ||||
-rw-r--r-- | gcc/sched-rgn.c | 23 |
6 files changed, 46 insertions, 185 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9bef3c87451..5145756ff87 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,31 @@ +2006-11-29 Tehila Meyzels <tehila@il.ibm.com> + + * haifa-sched.c: Remove define LINE_NOTE(INSN). Remove line_note_head. + Update documentation. + (associate_line_notes_with_blocks): Kill. + (extend_bb): Remove basic block argument, put void instead. + Remove line number handling for each bb. + (save_line_notes): Kill. + (restore_line_notes): Kill. + (sched_init): Remove line_note_head initialization. + Change extend_bb call. + (sched_finish): Remove free of line_note_head. + (add_block): Change extend_bb call. + * sched-ebb.c (schedule_ebb): Remove save_line_notes, + rm_line_notes and restore_line_notes calls. + (schedule_ebbs): Remove rm_redundant_line_notes. + * sched-int.h (struct haifa_insn_data): Remove line_note. + (save_line_notes): Remove declaration. + (restore_line_notes): Remove declaration. + * modulo-sched.c (loop_canon_p): Update debug info printing + by using insn locators instead of line note. + (sms_schedule): Update debug info printing, by using insn + locators instead of line note. + * sched-rgn.c (debug_dependencies): Remove handling of case + n>0 (line number), since it's a dead code. + (schedule_region): Remove save_line_notes and + restore_line_notes calls. + 2006-11-29 Joseph Myers <joseph@codesourcery.com> * config/rs6000/predicates.md (gpc_reg_operand): Check diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index 3fda0683fac..0ed0dddad3c 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -186,7 +186,6 @@ fix_sched_param (const char *param, const char *val) struct haifa_insn_data *h_i_d; -#define LINE_NOTE(INSN) (h_i_d[INSN_UID (INSN)].line_note) #define INSN_TICK(INSN) (h_i_d[INSN_UID (INSN)].tick) #define INTER_TICK(INSN) (h_i_d[INSN_UID (INSN)].inter_tick) @@ -200,10 +199,6 @@ struct haifa_insn_data *h_i_d; For now, all instructions are equally good. */ #define ISSUE_POINTS(INSN) 1 -/* Vector indexed by basic block number giving the starting line-number - for each basic block. */ -static rtx *line_note_head; - /* List of important notes we must keep around. This is a pointer to the last element in the list. */ static rtx note_list; @@ -509,7 +504,7 @@ static void advance_one_cycle (void); /* Notes handling mechanism: ========================= Generally, NOTES are saved before scheduling and restored after scheduling. - The scheduler distinguishes between three types of notes: + The scheduler distinguishes between two types of notes: (1) LOOP_BEGIN, LOOP_END, SETJMP, EHREGION_BEG, EHREGION_END notes: Before scheduling a region, a pointer to the note is added to the insn @@ -569,12 +564,11 @@ static void init_before_recovery (void); static basic_block create_recovery_block (void); static void create_check_block_twin (rtx, bool); static void fix_recovery_deps (basic_block); -static void associate_line_notes_with_blocks (basic_block); static void change_pattern (rtx, rtx); static int speculate_insn (rtx, ds_t, rtx *); static void dump_new_block_header (int, basic_block, rtx, rtx); static void restore_bb_notes (basic_block); -static void extend_bb (basic_block); +static void extend_bb (void); static void fix_jump_move (rtx); static void move_block_after_check (rtx); static void move_succs (VEC(edge,gc) **, basic_block); @@ -1321,99 +1315,6 @@ no_real_insns_p (rtx head, rtx tail) return 1; } -/* Save line number notes for each insn in block B. HEAD and TAIL are - the boundaries of the block in which notes should be processed. */ - -void -save_line_notes (int b, rtx head, rtx tail) -{ - rtx next_tail; - - /* We must use the true line number for the first insn in the block - that was computed and saved at the start of this pass. We can't - use the current line number, because scheduling of the previous - block may have changed the current line number. */ - - rtx line = line_note_head[b]; - rtx insn; - - next_tail = NEXT_INSN (tail); - - for (insn = head; insn != next_tail; insn = NEXT_INSN (insn)) - LINE_NOTE (insn) = line; -} - -/* After a block was scheduled, insert line notes into the insns list. - HEAD and TAIL are the boundaries of the block in which notes should - be processed. */ - -void -restore_line_notes (rtx head, rtx tail) -{ - rtx line, note, prev, new; - int added_notes = 0; - rtx next_tail, insn; - - head = head; - next_tail = NEXT_INSN (tail); - - /* Determine the current line-number. We want to know the current - line number of the first insn of the block here, in case it is - different from the true line number that was saved earlier. If - different, then we need a line number note before the first insn - of this block. If it happens to be the same, then we don't want to - emit another line number note here. */ - for (line = head; line; line = PREV_INSN (line)) - if (NOTE_P (line) && NOTE_LINE_NUMBER (line) > 0) - break; - - /* Walk the insns keeping track of the current line-number and inserting - the line-number notes as needed. */ - for (insn = head; insn != next_tail; insn = NEXT_INSN (insn)) - if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0) - line = insn; - /* This used to emit line number notes before every non-deleted note. - However, this confuses a debugger, because line notes not separated - by real instructions all end up at the same address. I can find no - use for line number notes before other notes, so none are emitted. */ - else if (!NOTE_P (insn) - && INSN_UID (insn) < old_max_uid - && (note = LINE_NOTE (insn)) != 0 - && note != line - && (line == 0 -#ifdef USE_MAPPED_LOCATION - || NOTE_SOURCE_LOCATION (note) != NOTE_SOURCE_LOCATION (line) -#else - || NOTE_LINE_NUMBER (note) != NOTE_LINE_NUMBER (line) - || NOTE_SOURCE_FILE (note) != NOTE_SOURCE_FILE (line) -#endif - )) - { - line = note; - prev = PREV_INSN (insn); - if (LINE_NOTE (note)) - { - /* Re-use the original line-number note. */ - LINE_NOTE (note) = 0; - PREV_INSN (note) = prev; - NEXT_INSN (prev) = note; - PREV_INSN (insn) = note; - NEXT_INSN (note) = insn; - set_block_for_insn (note, BLOCK_FOR_INSN (insn)); - } - else - { - added_notes++; - new = emit_note_after (NOTE_LINE_NUMBER (note), prev); -#ifndef USE_MAPPED_LOCATION - NOTE_SOURCE_FILE (new) = NOTE_SOURCE_FILE (note); -#endif - } - } - if (sched_verbose && added_notes) - fprintf (sched_dump, ";; added %d line-number notes\n", added_notes); -} - /* Delete notes between HEAD and TAIL and put them in the chain of notes ended by NOTE_LIST. */ @@ -2722,11 +2623,10 @@ sched_init (void) init_alias_analysis (); - line_note_head = 0; old_last_basic_block = 0; glat_start = 0; glat_end = 0; - extend_bb (0); + extend_bb (); if (current_sched_info->flags & USE_GLAT) init_glat (); @@ -2758,7 +2658,6 @@ sched_finish (void) dfa_finish (); free_dependency_caches (); end_alias_analysis (); - free (line_note_head); free_glat (); if (targetm.sched.md_finish_global) @@ -3902,29 +3801,6 @@ fix_recovery_deps (basic_block rec) add_jump_dependencies (insn, jump); } -/* The function saves line notes at the beginning of block B. */ -static void -associate_line_notes_with_blocks (basic_block b) -{ - rtx line; - - for (line = BB_HEAD (b); line; line = PREV_INSN (line)) - if (NOTE_P (line) && NOTE_LINE_NUMBER (line) > 0) - { - line_note_head[b->index] = line; - break; - } - /* Do a forward search as well, since we won't get to see the first - notes in a basic block. */ - for (line = BB_HEAD (b); line; line = NEXT_INSN (line)) - { - if (INSN_P (line)) - break; - if (NOTE_P (line) && NOTE_LINE_NUMBER (line) > 0) - line_note_head[b->index] = line; - } -} - /* Changes pattern of the INSN to NEW_PAT. */ static void change_pattern (rtx insn, rtx new_pat) @@ -4087,28 +3963,10 @@ restore_bb_notes (basic_block first) If BB is NULL, initialize structures for the whole CFG. Otherwise, initialize them for the just created BB. */ static void -extend_bb (basic_block bb) +extend_bb (void) { rtx insn; - if (write_symbols != NO_DEBUG) - { - /* Save-line-note-head: - Determine the line-number at the start of each basic block. - This must be computed and saved now, because after a basic block's - predecessor has been scheduled, it is impossible to accurately - determine the correct line number for the first insn of the block. */ - line_note_head = xrecalloc (line_note_head, last_basic_block, - old_last_basic_block, - sizeof (*line_note_head)); - - if (bb) - associate_line_notes_with_blocks (bb); - else - FOR_EACH_BB (bb) - associate_line_notes_with_blocks (bb); - } - old_last_basic_block = last_basic_block; if (current_sched_info->flags & USE_GLAT) @@ -4143,7 +4001,7 @@ add_block (basic_block bb, basic_block ebb) && bb->il.rtl->global_live_at_start == 0 && bb->il.rtl->global_live_at_end == 0); - extend_bb (bb); + extend_bb (); glat_start[bb->index] = 0; glat_end[bb->index] = 0; diff --git a/gcc/modulo-sched.c b/gcc/modulo-sched.c index 83a07eade85..4160e998c1b 100644 --- a/gcc/modulo-sched.c +++ b/gcc/modulo-sched.c @@ -818,7 +818,11 @@ loop_canon_p (struct loop *loop) { if (dump_file) { + rtx insn = BB_END (loop->header); + fprintf (dump_file, "SMS loop many exits "); + fprintf (dump_file, " %s %d (file, line)\n", + insn_file (insn), insn_line (insn)); } return false; } @@ -827,7 +831,11 @@ loop_canon_p (struct loop *loop) { if (dump_file) { + rtx insn = BB_END (loop->header); + fprintf (dump_file, "SMS loop many BBs. "); + fprintf (dump_file, " %s %d (file, line)\n", + insn_file (insn), insn_line (insn)); } return false; } @@ -954,6 +962,8 @@ sms_schedule (void) { if (dump_file) { + fprintf (dump_file, " %s %d (file, line)\n", + insn_file (tail), insn_line (tail)); fprintf (dump_file, "SMS single-bb-loop\n"); if (profile_info && flag_branch_probabilities) { @@ -1043,6 +1053,8 @@ sms_schedule (void) if (dump_file) { + fprintf (dump_file, " %s %d (file, line)\n", + insn_file (tail), insn_line (tail)); fprintf (dump_file, "SMS single-bb-loop\n"); if (profile_info && flag_branch_probabilities) { diff --git a/gcc/sched-ebb.c b/gcc/sched-ebb.c index 19c60cf9f0d..38b81af94e8 100644 --- a/gcc/sched-ebb.c +++ b/gcc/sched-ebb.c @@ -479,11 +479,6 @@ schedule_ebb (rtx head, rtx tail) current_sched_info->prev_head = PREV_INSN (head); current_sched_info->next_tail = NEXT_INSN (tail); - if (write_symbols != NO_DEBUG) - { - save_line_notes (first_bb->index, head, tail); - } - /* rm_other_notes only removes notes which are _inside_ the block---that is, it won't remove notes before the first real insn or after the last real insn of the block. So if the first insn @@ -519,9 +514,6 @@ schedule_ebb (rtx head, rtx tail) head = current_sched_info->head; tail = current_sched_info->tail; - if (write_symbols != NO_DEBUG) - restore_line_notes (head, tail); - if (EDGE_COUNT (last_bb->preds) == 0) /* LAST_BB is unreachable. */ { diff --git a/gcc/sched-int.h b/gcc/sched-int.h index 000af714336..14690dfbfbc 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -270,11 +270,7 @@ struct haifa_insn_data /* A list of scheduled producers of the instruction. Links are being moved from LOG_LINKS to RESOLVED_DEPS during scheduling. */ rtx resolved_deps; - - /* The line number note in effect for each insn. For line number - notes, this indicates whether the note may be reused. */ - rtx line_note; - + /* Logical uid gives the original ordering of the insns. */ int luid; @@ -634,8 +630,6 @@ extern int haifa_classify_insn (rtx); extern void get_ebb_head_tail (basic_block, basic_block, rtx *, rtx *); extern int no_real_insns_p (rtx, rtx); -extern void save_line_notes (int, rtx, rtx); -extern void restore_line_notes (rtx, rtx); extern void rm_other_notes (rtx, rtx); extern int insn_cost (rtx, rtx, rtx); diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c index 47d0a9a17a3..8b9cf9931be 100644 --- a/gcc/sched-rgn.c +++ b/gcc/sched-rgn.c @@ -2584,13 +2584,6 @@ debug_dependencies (void) n = NOTE_LINE_NUMBER (insn); if (n < 0) fprintf (sched_dump, "%s\n", GET_NOTE_INSN_NAME (n)); - else - { - expanded_location xloc; - NOTE_EXPANDED_LOCATION (xloc, insn); - fprintf (sched_dump, "line %d, file %s\n", - xloc.line, xloc.file); - } } else fprintf (sched_dump, " {%s}\n", GET_RTX_NAME (GET_CODE (insn))); @@ -2768,7 +2761,6 @@ schedule_region (int rgn) { basic_block first_bb, last_bb, curr_bb; rtx head, tail; - int b = BB_TO_BLOCK (bb); first_bb = EBB_FIRST_BB (bb); last_bb = EBB_LAST_BB (bb); @@ -2784,10 +2776,6 @@ schedule_region (int rgn) current_sched_info->prev_head = PREV_INSN (head); current_sched_info->next_tail = NEXT_INSN (tail); - if (write_symbols != NO_DEBUG) - { - save_line_notes (b, head, tail); - } /* rm_other_notes only removes notes which are _inside_ the block---that is, it won't remove notes before the first real insn @@ -2838,17 +2826,6 @@ schedule_region (int rgn) /* Sanity check: verify that all region insns were scheduled. */ gcc_assert (sched_rgn_n_insns == rgn_n_insns); - /* Restore line notes. */ - if (write_symbols != NO_DEBUG) - { - for (bb = 0; bb < current_nr_blocks; bb++) - { - rtx head, tail; - - get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail); - restore_line_notes (head, tail); - } - } /* Done with this region. */ |