mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 18:00:55 +08:00
haifa-sched.c: Remove define LINE_NOTE(INSN).
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. From-SVN: r119328
This commit is contained in:
parent
14502dad06
commit
07c0282832
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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. */
|
||||
{
|
||||
|
@ -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);
|
||||
|
@ -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. */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user