aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2009-09-10 11:27:59 -0700
committerRichard Henderson <rth@gcc.gnu.org>2009-09-10 11:27:59 -0700
commit8e7c5fddbe7fd570fb7795843d2fda14fa9e5bfc (patch)
tree0c92b831c7b9969859aa255a6183d92337206997
parent07c358c60cd384bf048b842ad36a67dd0abab41b (diff)
downloadgcc-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/ChangeLog3
-rw-r--r--gcc/tree-cfg.c33
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;
}