diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-03-05 12:53:01 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-03-05 12:53:01 +0100 |
commit | f9df6f16c70c51b09e68ceba001ec5671ee8adcf (patch) | |
tree | c37dd8582fc42451d8a5e899fd14424eb1d0ad09 /gcc | |
parent | 45c0175b882cef14c12fa0778a6d3226c87a8bb5 (diff) | |
download | gcc-f9df6f16c70c51b09e68ceba001ec5671ee8adcf.zip gcc-f9df6f16c70c51b09e68ceba001ec5671ee8adcf.tar.gz gcc-f9df6f16c70c51b09e68ceba001ec5671ee8adcf.tar.bz2 |
* cfgrtl.c (cfg_layout_merge_blocks): Cleanup.
From-SVN: r184925
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cfgrtl.c | 39 |
2 files changed, 18 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a7736fd..3d22178 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2012-03-05 Jakub Jelinek <jakub@redhat.com> + + * cfgrtl.c (cfg_layout_merge_blocks): Cleanup. + 2012-03-05 Richard Guenther <rguenther@suse.de> * tree.c (integer_zerop): Handle VECTOR_CSTs. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index 8283da0..b86cc74 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -2818,6 +2818,7 @@ static void cfg_layout_merge_blocks (basic_block a, basic_block b) { bool forwarder_p = (b->flags & BB_FORWARDER_BLOCK) != 0; + rtx insn; gcc_checking_assert (cfg_layout_can_merge_blocks_p (a, b)); @@ -2883,40 +2884,28 @@ cfg_layout_merge_blocks (basic_block a, basic_block b) /* In the case basic blocks are not adjacent, move them around. */ if (NEXT_INSN (BB_END (a)) != BB_HEAD (b)) { - rtx first = unlink_insn_chain (BB_HEAD (b), BB_END (b)); - - emit_insn_after_noloc (first, BB_END (a), a); - /* Skip possible DELETED_LABEL insn. */ - if (!NOTE_INSN_BASIC_BLOCK_P (first)) - first = NEXT_INSN (first); - gcc_assert (NOTE_INSN_BASIC_BLOCK_P (first)); - BB_HEAD (b) = NULL; - - /* emit_insn_after_noloc doesn't call df_insn_change_bb. - We need to explicitly call. */ - update_bb_for_insn_chain (NEXT_INSN (first), - BB_END (b), - a); + insn = unlink_insn_chain (BB_HEAD (b), BB_END (b)); - delete_insn (first); + emit_insn_after_noloc (insn, BB_END (a), a); } /* Otherwise just re-associate the instructions. */ else { - rtx insn; - - update_bb_for_insn_chain (BB_HEAD (b), BB_END (b), a); - insn = BB_HEAD (b); - /* Skip possible DELETED_LABEL insn. */ - if (!NOTE_INSN_BASIC_BLOCK_P (insn)) - insn = NEXT_INSN (insn); - gcc_assert (NOTE_INSN_BASIC_BLOCK_P (insn)); - BB_HEAD (b) = NULL; BB_END (a) = BB_END (b); - delete_insn (insn); } + /* emit_insn_after_noloc doesn't call df_insn_change_bb. + We need to explicitly call. */ + update_bb_for_insn_chain (insn, BB_END (b), a); + + /* Skip possible DELETED_LABEL insn. */ + if (!NOTE_INSN_BASIC_BLOCK_P (insn)) + insn = NEXT_INSN (insn); + gcc_assert (NOTE_INSN_BASIC_BLOCK_P (insn)); + BB_HEAD (b) = NULL; + delete_insn (insn); + df_bb_delete (b->index); /* Possible tablejumps and barriers should appear after the block. */ |