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
This commit is contained in:
Jeffrey A Law 1999-10-10 05:30:28 +00:00 committed by Jeff Law
parent ba80674579
commit 55f7891bb7
2 changed files with 37 additions and 0 deletions

View File

@ -1,3 +1,10 @@
Sat Oct 9 23:26:55 1999 Jeffrey A Law (law@cygnus.com)
* 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.
Sat Oct 9 23:16:01 1999 Ken Raeburn <raeburn@mit.edu> Sat Oct 9 23:16:01 1999 Ken Raeburn <raeburn@mit.edu>
* c-common.c (check_format_info): Warn if format string isn't a * c-common.c (check_format_info): Warn if format string isn't a

View File

@ -672,6 +672,21 @@ gcse_main (f, file)
return 0; 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. */ /* See what modes support reg/reg copy operations. */
if (! can_copy_init_p) if (! can_copy_init_p)
{ {
@ -4908,6 +4923,21 @@ delete_null_pointer_checks (f)
return; 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 /* We need predecessor/successor lists as well as pred/succ counts for
each basic block. */ each basic block. */
s_preds = (int_list_ptr *) alloca (n_basic_blocks * sizeof (int_list_ptr)); s_preds = (int_list_ptr *) alloca (n_basic_blocks * sizeof (int_list_ptr));