diff options
author | Jan Hubicka <jh@suse.cz> | 2004-09-25 12:05:09 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2004-09-25 10:05:09 +0000 |
commit | 70f3cc30aa04ab2f57f156c16a7f1db33084f04e (patch) | |
tree | 7e0fabeafbba7b2dbafffbeed8cf36595efdeef3 /gcc | |
parent | 20319d321a0add192498083daefc7d0cc7cb90a2 (diff) | |
download | gcc-70f3cc30aa04ab2f57f156c16a7f1db33084f04e.zip gcc-70f3cc30aa04ab2f57f156c16a7f1db33084f04e.tar.gz gcc-70f3cc30aa04ab2f57f156c16a7f1db33084f04e.tar.bz2 |
passes.c (rest_of_handle_cfg): Disable const/pure function detection when doing tree based profiling.
* passes.c (rest_of_handle_cfg): Disable const/pure function
detection when doing tree based profiling.
* tree-inline.c (expand_call_inline): Fix incorrectly reversed
conditional.
From-SVN: r88092
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/passes.c | 11 | ||||
-rw-r--r-- | gcc/tree-inline.c | 2 |
3 files changed, 18 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bcfe591..db70344 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2004-09-25 Jan Hubicka <jh@suse.cz> + + * passes.c (rest_of_handle_cfg): Disable const/pure function + detection when doing tree based profiling. + + * tree-inline.c (expand_call_inline): Fix incorrectly reversed + conditional. + 2004-09-25 Richard Sandiford <rsandifo@redhat.com> * config/mips/mips.h (struct mips_args): Clarify comments. diff --git a/gcc/passes.c b/gcc/passes.c index c62f2e9..5488981 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -880,8 +880,15 @@ rest_of_handle_cfg (void) it as constant, otherwise -fbranch-probabilities will not read data back. life_analysis rarely eliminates modification of external memory. - */ - if (optimize) + + FIXME: now with tree based profiling we are in the trap described above + again. It seems to be easiest to disable the optimization for time + being before the problem is either solved by moving the transformation + to the IPA level (we need the CFG for this) or the very early optimization + passes are made to ignore the const/pure flags so code does not change. */ + if (optimize + && (!flag_tree_based_profiling + || (!profile_arc_flag && !flag_branch_probabilities))) { /* Alias analysis depends on this information and mark_constant_function depends on alias analysis. */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index d026dca..38fa455 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1458,7 +1458,7 @@ expand_call_inline (tree *tp, int *walk_subtrees, void *data) where previous inlining turned indirect call into direct call by constant propagating arguments. In all other cases we hit a bug (incorrect node sharing is most common reason for missing edges. */ - gcc_assert (dest->needed || flag_unit_at_a_time); + gcc_assert (dest->needed || !flag_unit_at_a_time); cgraph_create_edge (id->node, dest, t)->inline_failed = N_("originally indirect function call not considered for inlining"); goto egress; |