diff options
author | Josef Zlomek <zlomekj@suse.cz> | 2003-12-20 17:31:12 +0100 |
---|---|---|
committer | Josef Zlomek <zlomek@gcc.gnu.org> | 2003-12-20 16:31:12 +0000 |
commit | 6ae533cf8947fe7f6e536adf5431b13e28f844f3 (patch) | |
tree | 8002125c0b41568a066ba1a96222954da65a4ad6 /gcc/bb-reorder.c | |
parent | 5d7f899bb3fa4b02a499818563714df1d9c16721 (diff) | |
download | gcc-6ae533cf8947fe7f6e536adf5431b13e28f844f3.tar.gz |
PR optimization/13430, PR optimization/12322
PR optimization/13430, PR optimization/12322
* bb-reorder.c (copy_bb_p): Do not allow block with many successors to
be copied.
(find_traces_1_round): Surround check for fake edges by
#ifdef ENABLE_CHECKING #endif.
From-SVN: r74887
Diffstat (limited to 'gcc/bb-reorder.c')
-rw-r--r-- | gcc/bb-reorder.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/bb-reorder.c b/gcc/bb-reorder.c index 85e184dd719..fc50b6494d3 100644 --- a/gcc/bb-reorder.c +++ b/gcc/bb-reorder.c @@ -415,8 +415,10 @@ find_traces_1_round (int branch_th, int exec_th, gcov_type count_th, /* Select the successor that will be placed after BB. */ for (e = bb->succ; e; e = e->succ_next) { +#ifdef ENABLE_CHECKING if (e->flags & EDGE_FAKE) abort (); +#endif if (e->dest == EXIT_BLOCK_PTR) continue; @@ -1001,6 +1003,8 @@ copy_bb_p (basic_block bb, int code_may_grow) int size = 0; int max_size = uncond_jump_length; rtx insn; + int n_succ; + edge e; if (!bb->frequency) return false; @@ -1009,6 +1013,15 @@ copy_bb_p (basic_block bb, int code_may_grow) if (!cfg_layout_can_duplicate_bb_p (bb)) return false; + /* Avoid duplicating blocks which have many successors (PR/13430). */ + n_succ = 0; + for (e = bb->succ; e; e = e->succ_next) + { + n_succ++; + if (n_succ > 8) + return false; + } + if (code_may_grow && maybe_hot_bb_p (bb)) max_size *= 8; |