summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 18:24:14 +0000
committerdorit <dorit@138bc75d-0d04-0410-961f-82ee72b054a4>2006-11-29 18:24:14 +0000
commit3953ee1cd1c9fd6023d4548fe5a5d9ff3f230785 (patch)
treeda4032793fa855993d2d1d0ddb8fafbcd3e51adc
parent90489f58c23298d23fdfbc7967783e7c6f4d3d49 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog28
-rw-r--r--gcc/haifa-sched.c152
-rw-r--r--gcc/modulo-sched.c12
-rw-r--r--gcc/sched-ebb.c8
-rw-r--r--gcc/sched-int.h8
-rw-r--r--gcc/sched-rgn.c23
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. */