aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2004-09-25 12:05:09 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2004-09-25 10:05:09 +0000
commit70f3cc30aa04ab2f57f156c16a7f1db33084f04e (patch)
tree7e0fabeafbba7b2dbafffbeed8cf36595efdeef3 /gcc
parent20319d321a0add192498083daefc7d0cc7cb90a2 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/passes.c11
-rw-r--r--gcc/tree-inline.c2
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;