tree-cfg.c (tree_forwarder_block_p): Reorder checks so that common cases will be caught earlier than others.

* tree-cfg.c (tree_forwarder_block_p): Reorder checks so that
	common cases will be caught earlier than others.

From-SVN: r88752
This commit is contained in:
Kazu Hirata 2004-10-08 13:20:39 +00:00 committed by Kazu Hirata
parent c054bc3d7a
commit 10a5233517
2 changed files with 21 additions and 14 deletions

View file

@ -1,3 +1,8 @@
2004-10-08 Kazu Hirata <kazu@cs.umass.edu>
* tree-cfg.c (tree_forwarder_block_p): Reorder checks so that
common cases will be caught earlier than others.
2004-10-08 Michael Matz <matz@suse.de>
* loop-doloop.c (doloop_optimize): Extend count.

View file

@ -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))