tree-pass.h (pass_purge_lineno_notes): Remove declaration.

* tree-pass.h (pass_purge_lineno_notes): Remove declaration.
	* modulo-sched.c (find_line_note): Remove.
	(loop_canon_p): Do not worry about line number notes.
	(sms_schedule): Likewise.
	* cse.c (cse_main): Likewise.
	* regmove.c (fixup_match_1): Likewise
	* function.c (emit_return_info_block): Likewise.
	(expand_function_end): Likewise.
	(thread_prologue_an_epilogue_insns): Likewise.
	* cfgrtl.c (try_redirect_by_replacing_jump, rtl_tidy_fallthru_edge):
	Likewise.
	* emit-rtl.c (find_line_note, emit_insn_after_with_line_notes,
	emit_note_copy_after): Kill.
	(emit_note_copy): Do not worry about line numbers.
	* jump.c (purge_line_number_notes): Kill.
	(pass_purge_lineno_notes): Kill.
	* cfgcleanup.c (rest_of_handle_jump2): Kill purge_line_number_notes
	call.
	* rtl.h (emit_note_copy_after, emit_insn_after_with_line_notes): Kill.
	* passes.c (init_optimization_passes): Don't purge_lineno_notes.
	* sched-ebb.c (schedule_ebbs): Don't do rm_redundant_line_notes.
	* tree-pass.h (pass_purge_lineno_notes): Kill.
	* sched-ebb.c (schedule_ebb): Don't rm_line_notes,
	rm_redundant_line_notes.
	* sched-rgb.c (schedule_region): Don't rm_line_notes,
	rm_redundant_line_notes.
	* sched-int.h (rm_line_notes, rm_redundant_line_notes): Kill.
	* haifa-sched.c: Update comment about handling notes.
 	(unlink_line_notes): Kill.
	(rm_line_notes): Kill.
	(save_line_notes): Simplify.
	(rm_redundant_line_notes): Kill.

From-SVN: r118693
This commit is contained in:
Jan Hubicka 2006-11-11 16:50:16 +01:00 committed by Jan Hubicka
parent f9f770a8d5
commit 6039a0c74a
16 changed files with 47 additions and 434 deletions

View File

@ -1,3 +1,38 @@
2006-11-11 Jan Hubicka <jh@suse.cz>
* tree-pass.h (pass_purge_lineno_notes): Remove declaration.
* modulo-sched.c (find_line_note): Remove.
(loop_canon_p): Do not worry about line number notes.
(sms_schedule): Likewise.
* cse.c (cse_main): Likewise.
* regmove.c (fixup_match_1): Likewise
* function.c (emit_return_info_block): Likewise.
(expand_function_end): Likewise.
(thread_prologue_an_epilogue_insns): Likewise.
* cfgrtl.c (try_redirect_by_replacing_jump, rtl_tidy_fallthru_edge):
Likewise.
* emit-rtl.c (find_line_note, emit_insn_after_with_line_notes,
emit_note_copy_after): Kill.
(emit_note_copy): Do not worry about line numbers.
* jump.c (purge_line_number_notes): Kill.
(pass_purge_lineno_notes): Kill.
* cfgcleanup.c (rest_of_handle_jump2): Kill purge_line_number_notes
call.
* rtl.h (emit_note_copy_after, emit_insn_after_with_line_notes): Kill.
* passes.c (init_optimization_passes): Don't purge_lineno_notes.
* sched-ebb.c (schedule_ebbs): Don't do rm_redundant_line_notes.
* tree-pass.h (pass_purge_lineno_notes): Kill.
* sched-ebb.c (schedule_ebb): Don't rm_line_notes,
rm_redundant_line_notes.
* sched-rgb.c (schedule_region): Don't rm_line_notes,
rm_redundant_line_notes.
* sched-int.h (rm_line_notes, rm_redundant_line_notes): Kill.
* haifa-sched.c: Update comment about handling notes.
(unlink_line_notes): Kill.
(rm_line_notes): Kill.
(save_line_notes): Simplify.
(rm_redundant_line_notes): Kill.
2006-11-11 Richard Guenther <rguenther@suse.de>
* tree.def (FIX_CEIL_EXPR, FIX_FLOOR_EXPR, FIX_ROUND_EXPR):

View File

@ -2312,8 +2312,6 @@ rest_of_handle_jump2 (void)
cleanup_cfg ((optimize ? CLEANUP_EXPENSIVE : 0)
| (flag_thread_jumps ? CLEANUP_THREADING : 0));
purge_line_number_notes ();
if (optimize)
cleanup_cfg (CLEANUP_EXPENSIVE);

View File

@ -866,12 +866,6 @@ try_redirect_by_replacing_jump (edge e, basic_block target, bool in_cfglayout)
e->probability = REG_BR_PROB_BASE;
e->count = src->count;
/* We don't want a block to end on a line-number note since that has
the potential of changing the code between -g and not -g. */
while (NOTE_P (BB_END (e->src))
&& NOTE_LINE_NUMBER (BB_END (e->src)) >= 0)
delete_insn (BB_END (e->src));
if (e->dest != target)
redirect_edge_succ (e, target);
@ -1233,11 +1227,6 @@ rtl_tidy_fallthru_edge (edge e)
#endif
q = PREV_INSN (q);
/* We don't want a block to end on a line-number note since that has
the potential of changing the code between -g and not -g. */
while (NOTE_P (q) && NOTE_LINE_NUMBER (q) >= 0)
q = PREV_INSN (q);
}
/* Selectively unlink the sequence. */

View File

@ -6138,19 +6138,10 @@ cse_main (rtx f, int nregs)
/* Compute the mapping from uids to cuids.
CUIDs are numbers assigned to insns, like uids,
except that cuids increase monotonically through the code.
Don't assign cuids to line-number NOTEs, so that the distance in cuids
between two insns is not affected by -g. */
except that cuids increase monotonically through the code. */
for (insn = f, i = 0; insn; insn = NEXT_INSN (insn))
{
if (!NOTE_P (insn)
|| NOTE_LINE_NUMBER (insn) < 0)
INSN_CUID (insn) = ++i;
else
/* Give a line number note the same cuid as preceding insn. */
INSN_CUID (insn) = i;
}
INSN_CUID (insn) = ++i;
/* Loop over basic blocks.
Compute the maximum number of qty's needed for each basic block

View File

@ -166,7 +166,6 @@ static GTY ((if_marked ("ggc_marked_p"), param_is (struct rtx_def)))
#define first_label_num (cfun->emit->x_first_label_num)
static rtx make_call_insn_raw (rtx);
static rtx find_line_note (rtx);
static rtx change_address_1 (rtx, enum machine_mode, rtx, int);
static void unshare_all_decls (tree);
static void reset_used_decls (tree);
@ -3663,22 +3662,6 @@ reorder_insns (rtx from, rtx to, rtx after)
}
}
/* Return the line note insn preceding INSN. */
static rtx
find_line_note (rtx insn)
{
if (no_line_numbers)
return 0;
for (; insn; insn = PREV_INSN (insn))
if (NOTE_P (insn)
&& NOTE_LINE_NUMBER (insn) >= 0)
break;
return insn;
}
/* Emit insn(s) of given code and pattern
at a specified place within the doubly-linked list.
@ -3963,22 +3946,6 @@ emit_insn_after_noloc (rtx x, rtx after)
return last;
}
/* Similar to emit_insn_after, except that line notes are to be inserted so
as to act as if this insn were at FROM. */
void
emit_insn_after_with_line_notes (rtx x, rtx after, rtx from)
{
rtx from_line = find_line_note (from);
rtx after_line = find_line_note (after);
rtx insn = emit_insn_after (x, after);
if (from_line)
emit_note_copy_after (from_line, after);
if (after_line)
emit_note_copy_after (after_line, insn);
}
/* Make an insn of code JUMP_INSN with body X
and output it after the insn AFTER. */
@ -4098,28 +4065,6 @@ emit_note_after (int subtype, rtx after)
add_insn_after (note, after);
return note;
}
/* Emit a copy of note ORIG after the insn AFTER. */
rtx
emit_note_copy_after (rtx orig, rtx after)
{
rtx note;
if (NOTE_LINE_NUMBER (orig) >= 0 && no_line_numbers)
{
cur_insn_uid++;
return 0;
}
note = rtx_alloc (NOTE);
INSN_UID (note) = cur_insn_uid++;
NOTE_LINE_NUMBER (note) = NOTE_LINE_NUMBER (orig);
NOTE_DATA (note) = NOTE_DATA (orig);
BLOCK_FOR_INSN (note) = NULL;
add_insn_after (note, after);
return note;
}
/* Like emit_insn_after_noloc, but set INSN_LOCATOR according to SCOPE. */
rtx
@ -4504,12 +4449,6 @@ emit_note_copy (rtx orig)
{
rtx note;
if (NOTE_LINE_NUMBER (orig) >= 0 && no_line_numbers)
{
cur_insn_uid++;
return NULL_RTX;
}
note = rtx_alloc (NOTE);
INSN_UID (note) = cur_insn_uid++;

View File

@ -203,7 +203,7 @@ extern tree debug_find_var_in_block_tree (tree, tree);
static void record_insns (rtx, VEC(int,heap) **) ATTRIBUTE_UNUSED;
static int contains (rtx, VEC(int,heap) **);
#ifdef HAVE_return
static void emit_return_into_block (basic_block, rtx);
static void emit_return_into_block (basic_block);
#endif
#if defined(HAVE_epilogue) && defined(INCOMING_RETURN_ADDR_RTX)
static rtx keep_stack_depressed (rtx);
@ -4340,14 +4340,6 @@ expand_function_end (void)
without returning a value. */
emit_note (NOTE_INSN_FUNCTION_END);
/* Must mark the last line number note in the function, so that the test
coverage code can avoid counting the last line twice. This just tells
the code to ignore the immediately following line note, since there
already exists a copy of this note somewhere above. This line number
note is still needed for debugging though, so we can't delete it. */
if (flag_test_coverage)
emit_note (NOTE_INSN_REPEATED_LINE_NUMBER);
/* Output a linenumber for the end of the function.
SDB depends on this. */
force_next_line_note ();
@ -4653,11 +4645,9 @@ sibcall_epilogue_contains (rtx insn)
block_for_insn appropriately. */
static void
emit_return_into_block (basic_block bb, rtx line_note)
emit_return_into_block (basic_block bb)
{
emit_jump_insn_after (gen_return (), BB_END (bb));
if (line_note)
emit_note_copy_after (line_note, PREV_INSN (BB_END (bb)));
}
#endif /* HAVE_return */
@ -5123,18 +5113,6 @@ thread_prologue_and_epilogue_insns (rtx f ATTRIBUTE_UNUSED)
if (BB_HEAD (last) == label && LABEL_P (label))
{
edge_iterator ei2;
rtx epilogue_line_note = NULL_RTX;
/* Locate the line number associated with the closing brace,
if we can find one. */
for (seq = get_last_insn ();
seq && ! active_insn_p (seq);
seq = PREV_INSN (seq))
if (NOTE_P (seq) && NOTE_LINE_NUMBER (seq) > 0)
{
epilogue_line_note = seq;
break;
}
for (ei2 = ei_start (last->preds); (e = ei_safe_edge (ei2)); )
{
@ -5158,7 +5136,7 @@ thread_prologue_and_epilogue_insns (rtx f ATTRIBUTE_UNUSED)
with a simple return instruction. */
if (simplejump_p (jump))
{
emit_return_into_block (bb, epilogue_line_note);
emit_return_into_block (bb);
delete_insn (jump);
}
@ -5195,7 +5173,7 @@ thread_prologue_and_epilogue_insns (rtx f ATTRIBUTE_UNUSED)
this is still reachable will be determined later. */
emit_barrier_after (BB_END (last));
emit_return_into_block (last, epilogue_line_note);
emit_return_into_block (last);
epilogue_end = BB_END (last);
single_succ_edge (last)->flags &= ~EDGE_FALLTHRU;
goto epilogue_done;
@ -5297,61 +5275,6 @@ epilogue_done:
}
#endif
#ifdef HAVE_prologue
/* This is probably all useless now that we use locators. */
if (prologue_end)
{
rtx insn, prev;
/* GDB handles `break f' by setting a breakpoint on the first
line note after the prologue. Which means (1) that if
there are line number notes before where we inserted the
prologue we should move them, and (2) we should generate a
note before the end of the first basic block, if there isn't
one already there.
??? This behavior is completely broken when dealing with
multiple entry functions. We simply place the note always
into first basic block and let alternate entry points
to be missed.
*/
for (insn = prologue_end; insn; insn = prev)
{
prev = PREV_INSN (insn);
if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0)
{
/* Note that we cannot reorder the first insn in the
chain, since rest_of_compilation relies on that
remaining constant. */
if (prev == NULL)
break;
reorder_insns (insn, insn, prologue_end);
}
}
/* Find the last line number note in the first block. */
for (insn = BB_END (ENTRY_BLOCK_PTR->next_bb);
insn != prologue_end && insn;
insn = PREV_INSN (insn))
if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0)
break;
/* If we didn't find one, make a copy of the first line number
we run across. */
if (! insn)
{
for (insn = next_active_insn (prologue_end);
insn;
insn = PREV_INSN (insn))
if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0)
{
emit_note_copy_after (insn, prologue_end);
break;
}
}
}
#endif
#ifdef HAVE_epilogue
if (epilogue_end)
{
@ -5366,8 +5289,7 @@ epilogue_done:
{
next = NEXT_INSN (insn);
if (NOTE_P (insn)
&& (NOTE_LINE_NUMBER (insn) > 0
|| NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG
&& (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG
|| NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_END))
reorder_insns (insn, insn, PREV_INSN (epilogue_end));
}

View File

@ -511,26 +511,18 @@ static void advance_one_cycle (void);
Generally, NOTES are saved before scheduling and restored after scheduling.
The scheduler distinguishes between three types of notes:
(1) LINE_NUMBER notes, generated and used for debugging. Here,
before scheduling a region, a pointer to the LINE_NUMBER note is
added to the insn following it (in save_line_notes()), and the note
is removed (in rm_line_notes() and unlink_line_notes()). After
scheduling the region, this pointer is used for regeneration of
the LINE_NUMBER note (in restore_line_notes()).
(2) LOOP_BEGIN, LOOP_END, SETJMP, EHREGION_BEG, EHREGION_END 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
that follows or precedes it. (This happens as part of the data dependence
computation). After scheduling an insn, the pointer contained in it is
used for regenerating the corresponding note (in reemit_notes).
(3) All other notes (e.g. INSN_DELETED): Before scheduling a block,
(2) All other notes (e.g. INSN_DELETED): Before scheduling a block,
these notes are put in a list (in rm_other_notes() and
unlink_other_notes ()). After scheduling the block, these notes are
inserted at the beginning of the block (in schedule_block()). */
static rtx unlink_other_notes (rtx, rtx);
static rtx unlink_line_notes (rtx, rtx);
static void reemit_notes (rtx);
static rtx *ready_lastpos (struct ready_list *);
@ -1276,50 +1268,6 @@ unlink_other_notes (rtx insn, rtx tail)
return insn;
}
/* Delete line notes beginning with INSN. Record line-number notes so
they can be reused. Returns the insn following the notes. */
static rtx
unlink_line_notes (rtx insn, rtx tail)
{
rtx prev = PREV_INSN (insn);
while (insn != tail && NOTE_NOT_BB_P (insn))
{
rtx next = NEXT_INSN (insn);
if (write_symbols != NO_DEBUG && NOTE_LINE_NUMBER (insn) > 0)
{
basic_block bb = BLOCK_FOR_INSN (insn);
/* Delete the note from its current position. */
if (prev)
NEXT_INSN (prev) = next;
if (next)
PREV_INSN (next) = prev;
if (bb)
{
/* Basic block can begin with either LABEL or
NOTE_INSN_BASIC_BLOCK. */
gcc_assert (BB_HEAD (bb) != insn);
/* Check if we are removing last insn in the BB. */
if (BB_END (bb) == insn)
BB_END (bb) = prev;
}
/* Record line-number notes so they can be reused. */
LINE_NOTE (insn) = insn;
}
else
prev = insn;
insn = next;
}
return insn;
}
/* Return the head and tail pointers of ebb starting at BEG and ending
at END. */
@ -1373,34 +1321,6 @@ no_real_insns_p (rtx head, rtx tail)
return 1;
}
/* Delete line notes from one block. Save them so they can be later restored
(in restore_line_notes). HEAD and TAIL are the boundaries of the
block in which notes should be processed. */
void
rm_line_notes (rtx head, rtx tail)
{
rtx next_tail;
rtx insn;
next_tail = NEXT_INSN (tail);
for (insn = head; insn != next_tail; insn = NEXT_INSN (insn))
{
rtx prev;
/* Farm out notes, and maybe save them in NOTE_LIST.
This is needed to keep the debugger from
getting completely deranged. */
if (NOTE_NOT_BB_P (insn))
{
prev = insn;
insn = unlink_line_notes (insn, next_tail);
gcc_assert (prev != tail && prev != head && insn != next_tail);
}
}
}
/* 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. */
@ -1420,10 +1340,7 @@ save_line_notes (int b, rtx head, rtx tail)
next_tail = NEXT_INSN (tail);
for (insn = head; insn != next_tail; insn = NEXT_INSN (insn))
if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0)
line = insn;
else
LINE_NOTE (insn) = line;
LINE_NOTE (insn) = line;
}
/* After a block was scheduled, insert line notes into the insns list.
@ -1497,58 +1414,6 @@ restore_line_notes (rtx head, rtx tail)
fprintf (sched_dump, ";; added %d line-number notes\n", added_notes);
}
/* After scheduling the function, delete redundant line notes from the
insns list. */
void
rm_redundant_line_notes (void)
{
rtx line = 0;
rtx insn = get_insns ();
int active_insn = 0;
int notes = 0;
/* Walk the insns deleting redundant line-number notes. Many of these
are already present. The remainder tend to occur at basic
block boundaries. */
for (insn = get_last_insn (); insn; insn = PREV_INSN (insn))
if (NOTE_P (insn) && NOTE_LINE_NUMBER (insn) > 0)
{
/* If there are no active insns following, INSN is redundant. */
if (active_insn == 0)
{
notes++;
SET_INSN_DELETED (insn);
}
/* If the line number is unchanged, LINE is redundant. */
else if (line
#ifdef USE_MAPPED_LOCATION
&& NOTE_SOURCE_LOCATION (line) == NOTE_SOURCE_LOCATION (insn)
#else
&& NOTE_LINE_NUMBER (line) == NOTE_LINE_NUMBER (insn)
&& NOTE_SOURCE_FILE (line) == NOTE_SOURCE_FILE (insn)
#endif
)
{
notes++;
SET_INSN_DELETED (line);
line = insn;
}
else
line = insn;
active_insn = 0;
}
else if (!((NOTE_P (insn)
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED)
|| (NONJUMP_INSN_P (insn)
&& (GET_CODE (PATTERN (insn)) == USE
|| GET_CODE (PATTERN (insn)) == CLOBBER))))
active_insn++;
if (sched_verbose && notes)
fprintf (sched_dump, ";; deleted %d line-number notes\n", notes);
}
/* Delete notes between HEAD and TAIL and put them in the chain
of notes ended by NOTE_LIST. */

View File

@ -140,62 +140,6 @@ struct tree_opt_pass pass_cleanup_barriers =
0 /* letter */
};
unsigned int
purge_line_number_notes (void)
{
rtx last_note = 0;
rtx insn;
/* Delete extraneous line number notes.
Note that two consecutive notes for different lines are not really
extraneous. There should be some indication where that line belonged,
even if it became empty. */
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
if (NOTE_P (insn))
{
if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_FUNCTION_BEG)
/* Any previous line note was for the prologue; gdb wants a new
note after the prologue even if it is for the same line. */
last_note = NULL_RTX;
else if (NOTE_LINE_NUMBER (insn) >= 0)
{
/* Delete this note if it is identical to previous note. */
if (last_note
#ifdef USE_MAPPED_LOCATION
&& NOTE_SOURCE_LOCATION (insn) == NOTE_SOURCE_LOCATION (last_note)
#else
&& NOTE_SOURCE_FILE (insn) == NOTE_SOURCE_FILE (last_note)
&& NOTE_LINE_NUMBER (insn) == NOTE_LINE_NUMBER (last_note)
#endif
)
{
delete_related_insns (insn);
continue;
}
last_note = insn;
}
}
return 0;
}
struct tree_opt_pass pass_purge_lineno_notes =
{
"elnotes", /* name */
NULL, /* gate */
purge_line_number_notes, /* execute */
NULL, /* sub */
NULL, /* next */
0, /* static_pass_number */
0, /* tv_id */
0, /* properties_required */
0, /* properties_provided */
0, /* properties_destroyed */
0, /* todo_flags_start */
TODO_dump_func, /* todo_flags_finish */
0 /* letter */
};
/* Initialize LABEL_NUSES and JUMP_LABEL fields. Delete any REG_LABEL
notes whose labels don't occur in the insn any more. Returns the

View File

@ -761,19 +761,6 @@ generate_prolog_epilog (partial_schedule_ptr ps, struct loop * loop, rtx count_r
end_sequence ();
}
/* Return the line note insn preceding INSN, for debugging. Taken from
emit-rtl.c. */
static rtx
find_line_note (rtx insn)
{
for (; insn; insn = PREV_INSN (insn))
if (NOTE_P (insn)
&& NOTE_LINE_NUMBER (insn) >= 0)
break;
return insn;
}
/* Return true if all the BBs of the loop are empty except the
loop header. */
static bool
@ -831,16 +818,7 @@ loop_canon_p (struct loop *loop)
{
if (dump_file)
{
rtx line_note = find_line_note (BB_END (loop->header));
fprintf (dump_file, "SMS loop many exits ");
if (line_note)
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (dump_file, " %s %d (file, line)\n",
xloc.file, xloc.line);
}
}
return false;
}
@ -849,16 +827,7 @@ loop_canon_p (struct loop *loop)
{
if (dump_file)
{
rtx line_note = find_line_note (BB_END (loop->header));
fprintf (dump_file, "SMS loop many BBs. ");
if (line_note)
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (dump_file, " %s %d (file, line)\n",
xloc.file, xloc.line);
}
}
return false;
}
@ -986,15 +955,6 @@ sms_schedule (void)
{
if (dump_file)
{
rtx line_note = find_line_note (tail);
if (line_note)
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (dump_file, "SMS bb %s %d (file, line)\n",
xloc.file, xloc.line);
}
fprintf (dump_file, "SMS single-bb-loop\n");
if (profile_info && flag_branch_probabilities)
{
@ -1084,15 +1044,6 @@ sms_schedule (void)
if (dump_file)
{
rtx line_note = find_line_note (tail);
if (line_note)
{
expanded_location xloc;
NOTE_EXPANDED_LOCATION (xloc, line_note);
fprintf (dump_file, "SMS bb %s %d (file, line)\n",
xloc.file, xloc.line);
}
fprintf (dump_file, "SMS single-bb-loop\n");
if (profile_info && flag_branch_probabilities)
{

View File

@ -683,7 +683,6 @@ init_optimization_passes (void)
NEXT_PASS (pass_variable_tracking);
NEXT_PASS (pass_free_cfg);
NEXT_PASS (pass_machine_reorg);
NEXT_PASS (pass_purge_lineno_notes);
NEXT_PASS (pass_cleanup_barriers);
NEXT_PASS (pass_delay_slots);
NEXT_PASS (pass_split_for_shorten_branches);

View File

@ -1894,15 +1894,9 @@ fixup_match_1 (rtx insn, rtx set, rtx src, rtx src_subreg, rtx dst,
{
rtx notes = REG_NOTES (insn);
emit_insn_after_with_line_notes (pat, PREV_INSN (p), insn);
p = emit_insn_after_setloc (pat, PREV_INSN (p), INSN_LOCATOR (insn));
delete_insn (insn);
/* emit_insn_after_with_line_notes has no
return value, so search for the new insn. */
insn = p;
while (! INSN_P (insn) || PATTERN (insn) != pat)
insn = PREV_INSN (insn);
REG_NOTES (insn) = notes;
REG_NOTES (p) = notes;
}
}
/* Sometimes we'd generate src = const; src += n;

View File

@ -1553,7 +1553,6 @@ extern rtx emit_call_insn_after_setloc (rtx, rtx, int);
extern rtx emit_barrier_after (rtx);
extern rtx emit_label_after (rtx, rtx);
extern rtx emit_note_after (int, rtx);
extern rtx emit_note_copy_after (rtx, rtx);
extern rtx emit_insn (rtx);
extern rtx emit_jump_insn (rtx);
extern rtx emit_call_insn (rtx);
@ -2065,7 +2064,6 @@ extern void add_insn (rtx);
extern void add_insn_before (rtx, rtx);
extern void add_insn_after (rtx, rtx);
extern void remove_insn (rtx);
extern void emit_insn_after_with_line_notes (rtx, rtx, rtx);
extern rtx emit (rtx);
extern void renumber_insns (void);
extern rtx delete_insn (rtx);

View File

@ -482,7 +482,6 @@ schedule_ebb (rtx head, rtx tail)
if (write_symbols != NO_DEBUG)
{
save_line_notes (first_bb->index, head, tail);
rm_line_notes (head, tail);
}
/* rm_other_notes only removes notes which are _inside_ the
@ -681,9 +680,6 @@ schedule_ebbs (void)
if (reload_completed)
reposition_prologue_and_epilogue_notes (get_insns ());
if (write_symbols != NO_DEBUG)
rm_redundant_line_notes ();
sched_finish ();
}

View File

@ -634,10 +634,8 @@ 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 rm_line_notes (rtx, rtx);
extern void save_line_notes (int, rtx, rtx);
extern void restore_line_notes (rtx, rtx);
extern void rm_redundant_line_notes (void);
extern void rm_other_notes (rtx, rtx);
extern int insn_cost (rtx, rtx, rtx);

View File

@ -2787,7 +2787,6 @@ schedule_region (int rgn)
if (write_symbols != NO_DEBUG)
{
save_line_notes (b, head, tail);
rm_line_notes (head, tail);
}
/* rm_other_notes only removes notes which are _inside_ the
@ -3045,10 +3044,6 @@ schedule_insns (void)
if (reload_completed)
reposition_prologue_and_epilogue_notes (get_insns ());
/* Delete redundant line notes. */
if (write_symbols != NO_DEBUG)
rm_redundant_line_notes ();
if (sched_verbose)
{
if (reload_completed == 0 && flag_schedule_interblock)

View File

@ -386,7 +386,6 @@ extern struct tree_opt_pass pass_duplicate_computed_gotos;
extern struct tree_opt_pass pass_variable_tracking;
extern struct tree_opt_pass pass_free_cfg;
extern struct tree_opt_pass pass_machine_reorg;
extern struct tree_opt_pass pass_purge_lineno_notes;
extern struct tree_opt_pass pass_cleanup_barriers;
extern struct tree_opt_pass pass_delay_slots;
extern struct tree_opt_pass pass_split_for_shorten_branches;