diff options
author | Richard Henderson <rth@redhat.com> | 2009-09-10 11:27:59 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2009-09-10 11:27:59 -0700 |
commit | 8e7c5fddbe7fd570fb7795843d2fda14fa9e5bfc (patch) | |
tree | 0c92b831c7b9969859aa255a6183d92337206997 | |
parent | 07c358c60cd384bf048b842ad36a67dd0abab41b (diff) | |
download | gcc-8e7c5fddbe7fd570fb7795843d2fda14fa9e5bfc.zip gcc-8e7c5fddbe7fd570fb7795843d2fda14fa9e5bfc.tar.gz gcc-8e7c5fddbe7fd570fb7795843d2fda14fa9e5bfc.tar.bz2 |
tree-cfg.c (gimple_can_merge_blocks_p): Move label and loop latch tests earlier.
* tree-cfg.c (gimple_can_merge_blocks_p): Move label and
loop latch tests earlier.
From-SVN: r151604
-rw-r--r-- | gcc/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 33 |
2 files changed, 21 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9b91445..c110d53 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,8 @@ 2009-09-10 Richard Henderson <rth@redhat.com> + * tree-cfg.c (gimple_can_merge_blocks_p): Move label and + loop latch tests earlier. + * gimple-iterator.c (gimple_find_edge_insert_loc): Insert before GIMPLE_RETURN, not after its predecessor; insert before GIMPLE_RESX. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 1357064..b834943 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -1354,6 +1354,24 @@ gimple_can_merge_blocks_p (basic_block a, basic_block b) && DECL_NONLOCAL (gimple_label_label (stmt))) return false; + /* Examine the labels at the beginning of B. */ + for (gsi = gsi_start_bb (b); !gsi_end_p (gsi); gsi_next (&gsi)) + { + tree lab; + stmt = gsi_stmt (gsi); + if (gimple_code (stmt) != GIMPLE_LABEL) + break; + lab = gimple_label_label (stmt); + + /* Do not remove user labels. */ + if (!DECL_ARTIFICIAL (lab)) + return false; + } + + /* Protect the loop latches. */ + if (current_loops && b->loop_father->latch == b) + return false; + /* It must be possible to eliminate all phi nodes in B. If ssa form is not up-to-date, we cannot eliminate any phis; however, if only some symbols as whole are marked for renaming, this is not a problem, @@ -1377,21 +1395,6 @@ gimple_can_merge_blocks_p (basic_block a, basic_block b) } } - /* Do not remove user labels. */ - for (gsi = gsi_start_bb (b); !gsi_end_p (gsi); gsi_next (&gsi)) - { - stmt = gsi_stmt (gsi); - if (gimple_code (stmt) != GIMPLE_LABEL) - break; - if (!DECL_ARTIFICIAL (gimple_label_label (stmt))) - return false; - } - - /* Protect the loop latches. */ - if (current_loops - && b->loop_father->latch == b) - return false; - return true; } |