From 895d18ba71a17008eef39e6ad78e5ad25c4648a5 Mon Sep 17 00:00:00 2001 From: kazu Date: Fri, 8 Oct 2004 13:20:39 +0000 Subject: [PATCH] * tree-cfg.c (tree_forwarder_block_p): Reorder checks so that common cases will be caught earlier than others. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88752 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/tree-cfg.c | 30 ++++++++++++++++-------------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 341b9fe..5bb44a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2004-10-08 Kazu Hirata + + * tree-cfg.c (tree_forwarder_block_p): Reorder checks so that + common cases will be caught earlier than others. + 2004-10-08 Michael Matz * loop-doloop.c (doloop_optimize): Extend count. diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index 5aaad4a..c1d40d5 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -3694,7 +3694,10 @@ tree_make_forwarder_block (edge fallthru) /* Return true if basic block BB does nothing except pass control flow to another block and that we can safely insert a label at - the start of the successor block. */ + the start of the successor block. + + As a precondition, we require that BB be not equal to + ENTRY_BLOCK_PTR. */ static bool tree_forwarder_block_p (basic_block bb) @@ -3708,17 +3711,25 @@ tree_forwarder_block_p (basic_block bb) if (! bb_ann (bb)->forwardable) return false; - /* BB must have a single outgoing normal edge. Otherwise it can not be - a forwarder block. */ + /* BB must have a single outgoing edge. */ if (EDGE_COUNT (bb->succs) != 1 + /* BB can not have any PHI nodes. This could potentially be + relaxed early in compilation if we re-rewrote the variables + appearing in any PHI nodes in forwarder blocks. */ + || phi_nodes (bb) + /* BB may not be a predecessor of EXIT_BLOCK_PTR. */ || EDGE_SUCC (bb, 0)->dest == EXIT_BLOCK_PTR - || (EDGE_SUCC (bb, 0)->flags & EDGE_ABNORMAL) - || bb == ENTRY_BLOCK_PTR) + /* BB may not have an abnormal outgoing edge. */ + || (EDGE_SUCC (bb, 0)->flags & EDGE_ABNORMAL)) { bb_ann (bb)->forwardable = 0; return false; } +#if ENABLE_CHECKING + gcc_assert (bb != ENTRY_BLOCK_PTR); +#endif + /* Successors of the entry block are not forwarders. */ FOR_EACH_EDGE (e, ei, ENTRY_BLOCK_PTR->succs) if (e->dest == bb) @@ -3727,15 +3738,6 @@ tree_forwarder_block_p (basic_block bb) return false; } - /* BB can not have any PHI nodes. This could potentially be relaxed - early in compilation if we re-rewrote the variables appearing in - any PHI nodes in forwarder blocks. */ - if (phi_nodes (bb)) - { - bb_ann (bb)->forwardable = 0; - return false; - } - /* Now walk through the statements. We can ignore labels, anything else means this is not a forwarder block. */ for (bsi = bsi_start (bb); !bsi_end_p (bsi); bsi_next (&bsi)) -- 2.7.4