Commit f70b22c9 by Maxim Kuvyrkov Committed by Maxim Kuvyrkov

re PR target/27863 (ICE in check_cfg, at haifa-sched.c:4615)

2006-06-08  Maxim Kuvyrkov  <mkuvyrkov@ispras.ru>

	PR target/27863
	* haifa-sched.c (unlink_other_notes, unlink_line_notes): Update basic
	block boundaries.

From-SVN: r114484
parent 960f80d1
2006-06-08 Maxim Kuvyrkov <mkuvyrkov@ispras.ru>
PR target/27863
* haifa-sched.c (unlink_other_notes, unlink_line_notes): Update basic
block boundaries.
2006-06-08 Richard Guenther <rguenther@suse.de> 2006-06-08 Richard Guenther <rguenther@suse.de>
PR middle-end/27116 PR middle-end/27116
......
...@@ -1243,12 +1243,22 @@ unlink_other_notes (rtx insn, rtx tail) ...@@ -1243,12 +1243,22 @@ unlink_other_notes (rtx insn, rtx tail)
while (insn != tail && NOTE_NOT_BB_P (insn)) while (insn != tail && NOTE_NOT_BB_P (insn))
{ {
rtx next = NEXT_INSN (insn); rtx next = NEXT_INSN (insn);
basic_block bb = BLOCK_FOR_INSN (insn);
/* Delete the note from its current position. */ /* Delete the note from its current position. */
if (prev) if (prev)
NEXT_INSN (prev) = next; NEXT_INSN (prev) = next;
if (next) if (next)
PREV_INSN (next) = prev; PREV_INSN (next) = prev;
/* 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;
/* See sched_analyze to see how these are handled. */ /* See sched_analyze to see how these are handled. */
if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG if (NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_BEG
&& NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_END) && NOTE_LINE_NUMBER (insn) != NOTE_INSN_EH_REGION_END)
...@@ -1279,12 +1289,22 @@ unlink_line_notes (rtx insn, rtx tail) ...@@ -1279,12 +1289,22 @@ unlink_line_notes (rtx insn, rtx tail)
if (write_symbols != NO_DEBUG && NOTE_LINE_NUMBER (insn) > 0) if (write_symbols != NO_DEBUG && NOTE_LINE_NUMBER (insn) > 0)
{ {
basic_block bb = BLOCK_FOR_INSN (insn);
/* Delete the note from its current position. */ /* Delete the note from its current position. */
if (prev) if (prev)
NEXT_INSN (prev) = next; NEXT_INSN (prev) = next;
if (next) if (next)
PREV_INSN (next) = prev; PREV_INSN (next) = prev;
/* 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. */ /* Record line-number notes so they can be reused. */
LINE_NOTE (insn) = insn; LINE_NOTE (insn) = insn;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment