diff options
author | Kazu Hirata <kazu@cs.umass.edu> | 2005-01-22 16:13:40 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2005-01-22 16:13:40 +0000 |
commit | 28773f15a892f9a4a954e1195a4290c972013e02 (patch) | |
tree | 8e31c857e90331506fa48127c03f8acc8615ee57 /gcc/tree-cfg.c | |
parent | 0dd973dd9710115f96420505591f65c5ab2445b4 (diff) | |
download | gcc-28773f15a892f9a4a954e1195a4290c972013e02.zip gcc-28773f15a892f9a4a954e1195a4290c972013e02.tar.gz gcc-28773f15a892f9a4a954e1195a4290c972013e02.tar.bz2 |
tree-cfg.c (remove_forwarder_block_with_phi): Look at the first label to see if it is a nonlocal label.
* tree-cfg.c (remove_forwarder_block_with_phi): Look at the
first label to see if it is a nonlocal label.
From-SVN: r94067
Diffstat (limited to 'gcc/tree-cfg.c')
-rw-r--r-- | gcc/tree-cfg.c | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 93dfc34..b69ec0c 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -4130,8 +4130,8 @@ remove_forwarder_block_with_phi (basic_block bb) { edge succ = EDGE_SUCC (bb, 0); basic_block dest = succ->dest; + tree label; basic_block dombb, domdest, dom; - block_stmt_iterator bsi; /* We check for infinite loops already in tree_forwarder_block_p. However it may happen that the infinite loop is created @@ -4141,16 +4141,11 @@ remove_forwarder_block_with_phi (basic_block bb) /* If the destination block consists of a nonlocal label, do not merge it. */ - for (bsi = bsi_start (dest); !bsi_end_p (bsi); bsi_next (&bsi)) - { - tree stmt = bsi_stmt (bsi); - - if (TREE_CODE (stmt) != LABEL_EXPR) - break; - - if (DECL_NONLOCAL (LABEL_EXPR_LABEL (stmt))) - return; - } + label = first_stmt (dest); + if (label + && TREE_CODE (label) == LABEL_EXPR + && DECL_NONLOCAL (LABEL_EXPR_LABEL (label))) + return; /* Redirect each incoming edge to BB to DEST. */ while (EDGE_COUNT (bb->preds) > 0) |