function.c (thread_prologue_epilogue_insns): Don't move the line note at the head of the chain.
* function.c (thread_prologue_epilogue_insns): Don't move the line note at the head of the chain. Only force a lineno note before the end of block 0. From-SVN: r34207
This commit is contained in:
parent
892ecf921f
commit
30196c1ff4
2 changed files with 33 additions and 24 deletions
|
@ -1,3 +1,9 @@
|
|||
2000-05-27 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* function.c (thread_prologue_epilogue_insns): Don't move the
|
||||
line note at the head of the chain. Only force a lineno note
|
||||
before the end of block 0.
|
||||
|
||||
2000-05-27 Richard Henderson <rth@cygnus.com>
|
||||
|
||||
* gensupport.c (collect_insn_data): Record the maximum number
|
||||
|
|
|
@ -7038,10 +7038,11 @@ epilogue_done:
|
|||
rtx insn, prev;
|
||||
|
||||
/* GDB handles `break f' by setting a breakpoint on the first
|
||||
line note *after* the prologue. Which means (1) that if
|
||||
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) if there is no such
|
||||
note, then we should generate one at the prologue. */
|
||||
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. */
|
||||
|
||||
for (insn = prologue_end; insn ; insn = prev)
|
||||
{
|
||||
|
@ -7050,32 +7051,34 @@ epilogue_done:
|
|||
{
|
||||
/* Note that we cannot reorder the first insn in the
|
||||
chain, since rest_of_compilation relies on that
|
||||
remaining constant. Do the next best thing. */
|
||||
remaining constant. */
|
||||
if (prev == NULL)
|
||||
{
|
||||
emit_line_note_after (NOTE_SOURCE_FILE (insn),
|
||||
NOTE_LINE_NUMBER (insn),
|
||||
prologue_end);
|
||||
NOTE_LINE_NUMBER (insn) = NOTE_INSN_DELETED;
|
||||
}
|
||||
else
|
||||
reorder_insns (insn, insn, prologue_end);
|
||||
break;
|
||||
reorder_insns (insn, insn, prologue_end);
|
||||
}
|
||||
}
|
||||
|
||||
insn = NEXT_INSN (prologue_end);
|
||||
if (! insn || GET_CODE (insn) != NOTE || NOTE_LINE_NUMBER (insn) <= 0)
|
||||
/* Find the last line number note in the first block. */
|
||||
for (insn = BASIC_BLOCK (0)->end;
|
||||
insn != prologue_end;
|
||||
insn = PREV_INSN (insn))
|
||||
if (GET_CODE (insn) == NOTE && 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 (f); insn ; insn = PREV_INSN (insn))
|
||||
{
|
||||
if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
|
||||
{
|
||||
emit_line_note_after (NOTE_SOURCE_FILE (insn),
|
||||
NOTE_LINE_NUMBER (insn),
|
||||
prologue_end);
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (insn = next_active_insn (prologue_end);
|
||||
insn;
|
||||
insn = PREV_INSN (insn))
|
||||
if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) > 0)
|
||||
{
|
||||
emit_line_note_after (NOTE_SOURCE_FILE (insn),
|
||||
NOTE_LINE_NUMBER (insn),
|
||||
prologue_end);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue