aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2001-07-14 03:06:42 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2001-07-14 01:06:42 +0000
commit1ed672dd7c9f547350e96259e013ed6a4bd4d6ed (patch)
tree7ebe8a09f2e053c88b2a24162827fccbad43b62d
parentc51f3aa110b4e8e1142668174576d12a0f443326 (diff)
downloadgcc-1ed672dd7c9f547350e96259e013ed6a4bd4d6ed.zip
gcc-1ed672dd7c9f547350e96259e013ed6a4bd4d6ed.tar.gz
gcc-1ed672dd7c9f547350e96259e013ed6a4bd4d6ed.tar.bz2
bb-reorder.c (skip_insn_after_block): Get past the line number notes.
* bb-reorder.c (skip_insn_after_block): Get past the line number notes. * flow.c (redirect_edge_and_branch_force, split_edge, try_crossjump_to_edge): Use set_block_for_new_insns. * bb-reorder.c (emit_jump_to_block_after): Call set_block_for_new_insns. From-SVN: r44002
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/bb-reorder.c14
-rw-r--r--gcc/flow.c8
3 files changed, 25 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e68b7af..7a365dc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+Sat Jul 14 02:58:38 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * bb-reorder.c (skip_insn_after_block): Get past the line number notes.
+
+ * flow.c (redirect_edge_and_branch_force, split_edge,
+ try_crossjump_to_edge): Use set_block_for_new_insns.
+ * bb-reorder.c (emit_jump_to_block_after): Call set_block_for_new_insns.
+
2001-07-13 H.J. Lu (hjl@gnu.org)
* config/elfos.h (UNIQUE_SECTION): Enable .bss section with
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c
index a6534d80..e2dc44c 100644
--- a/gcc/bb-reorder.c
+++ b/gcc/bb-reorder.c
@@ -211,7 +211,7 @@ skip_insns_after_block (bb)
if (bb->index + 1 != n_basic_blocks)
next_head = BASIC_BLOCK (bb->index + 1)->head;
- for (last_insn = bb->end; (insn = NEXT_INSN (last_insn)); last_insn = insn)
+ for (last_insn = insn = bb->end; (insn = NEXT_INSN (insn)); )
{
if (insn == next_head)
break;
@@ -219,6 +219,7 @@ skip_insns_after_block (bb)
switch (GET_CODE (insn))
{
case BARRIER:
+ last_insn = insn;
continue;
case NOTE:
@@ -226,11 +227,19 @@ skip_insns_after_block (bb)
{
case NOTE_INSN_LOOP_END:
case NOTE_INSN_BLOCK_END:
+ last_insn = insn;
+ continue;
case NOTE_INSN_DELETED:
case NOTE_INSN_DELETED_LABEL:
continue;
default:
+ /* Make line notes attached to the succesor block unless they
+ are followed by something attached to predecesor block.
+ These notes remained after removing code in the predecesor
+ block and thus should be kept together. */
+ if (NOTE_LINE_NUMBER (insn) >= 0)
+ continue;
break;
}
break;
@@ -242,6 +251,7 @@ skip_insns_after_block (bb)
|| GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_DIFF_VEC))
{
insn = NEXT_INSN (insn);
+ last_insn = insn;
continue;
}
break;
@@ -501,6 +511,8 @@ emit_jump_to_block_after (bb, after)
jump = emit_jump_insn_after (gen_jump (label), after);
JUMP_LABEL (jump) = label;
LABEL_NUSES (label) += 1;
+ if (basic_block_for_insn)
+ set_block_for_new_insns (jump, bb);
if (rtl_dump_file)
fprintf (rtl_dump_file, "Emitting jump to block %d (%d)\n",
diff --git a/gcc/flow.c b/gcc/flow.c
index 92f6309..652328f 100644
--- a/gcc/flow.c
+++ b/gcc/flow.c
@@ -1897,7 +1897,7 @@ redirect_edge_and_branch_force (e, target)
JUMP_LABEL (e->src->end) = label;
LABEL_NUSES (label)++;
if (basic_block_for_insn)
- set_block_for_insn (e->src->end, e->src);
+ set_block_for_new_insns (e->src->end, e->src);
emit_barrier_after (e->src->end);
if (rtl_dump_file)
fprintf (rtl_dump_file,
@@ -1971,7 +1971,7 @@ redirect_edge_and_branch_force (e, target)
JUMP_LABEL (new_bb->end) = label;
LABEL_NUSES (label)++;
if (basic_block_for_insn)
- set_block_for_insn (new_bb->end, new_bb);
+ set_block_for_new_insns (new_bb->end, new_bb);
emit_barrier_after (new_bb->end);
return new_bb;
}
@@ -2074,7 +2074,7 @@ split_edge (edge_in)
jump_block->end);
jump_block->end = pos;
if (basic_block_for_insn)
- set_block_for_insn (pos, jump_block);
+ set_block_for_new_insns (pos, jump_block);
emit_barrier_after (pos);
/* ... let jump know that label is in use, ... */
@@ -3555,7 +3555,7 @@ try_crossjump_to_edge (mode, e1, e2)
JUMP_LABEL (e1->src->end) = label;
LABEL_NUSES (label)++;
if (basic_block_for_insn)
- set_block_for_insn (e1->src->end, e1->src);
+ set_block_for_new_insns (e1->src->end, e1->src);
flow_delete_insn_chain (first, last);