diff options
author | Jeffrey A Law <law@cygnus.com> | 1999-10-10 05:30:28 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1999-10-09 23:30:28 -0600 |
commit | 55f7891bb79c49bca34c2866ca94fb754be30a88 (patch) | |
tree | 73d65cac827c1016f9fef47f276875dc6a6acec3 /gcc/gcse.c | |
parent | ba80674579d5de95a3b8d14187ceff27fc659b4b (diff) | |
download | gcc-55f7891bb79c49bca34c2866ca94fb754be30a88.zip gcc-55f7891bb79c49bca34c2866ca94fb754be30a88.tar.gz gcc-55f7891bb79c49bca34c2866ca94fb754be30a88.tar.bz2 |
gcse.c (gcse_main): Avoid global optimizations if we have a large number of basic blocks and the...
* gcse.c (gcse_main): Avoid global optimizations if we have a
large number of basic blocks and the ratio of edges to blocks
is high.
(delete_null_pointer_checks): Likewise.
From-SVN: r29882
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r-- | gcc/gcse.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -672,6 +672,21 @@ gcse_main (f, file) return 0; } + /* Trying to perform global optimizations on flow graphs which have + a high connectivity will take a long time and is unlikely to be + particularly useful. + + In normal circumstances a cfg should have about twice has many edges + as blocks. But we do not want to punish small functions which have + a couple switch statements. So we require a relatively large number + of basic blocks and the ratio of edges to blocks to be high. */ + if (n_basic_blocks > 1000 && n_edges / n_basic_blocks >= 20) + { + /* Free storage allocated by find_basic_blocks. */ + free_basic_block_vars (0); + return 0; + } + /* See what modes support reg/reg copy operations. */ if (! can_copy_init_p) { @@ -4908,6 +4923,21 @@ delete_null_pointer_checks (f) return; } + /* Trying to perform global optimizations on flow graphs which have + a high connectivity will take a long time and is unlikely to be + particularly useful. + + In normal circumstances a cfg should have about twice has many edges + as blocks. But we do not want to punish small functions which have + a couple switch statements. So we require a relatively large number + of basic blocks and the ratio of edges to blocks to be high. */ + if (n_basic_blocks > 1000 && n_edges / n_basic_blocks >= 20) + { + /* Free storage allocated by find_basic_blocks. */ + free_basic_block_vars (0); + return 0; + } + /* We need predecessor/successor lists as well as pred/succ counts for each basic block. */ s_preds = (int_list_ptr *) alloca (n_basic_blocks * sizeof (int_list_ptr)); |