passes.c (rest_of_handle_cfg): Disable const/pure function detection when doing tree...
authorJan Hubicka <jh@suse.cz>
Sat, 25 Sep 2004 10:05:09 +0000 (12:05 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 25 Sep 2004 10:05:09 +0000 (10:05 +0000)
* 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

gcc/ChangeLog
gcc/passes.c
gcc/tree-inline.c

index bcfe5915df38434bf72315ea366a6d01f087f83a..db7034463da2b9c7b5aa53adf883a4065c88b762 100644 (file)
@@ -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.
index c62f2e9d4804ffa4494b788185b35fda42532e39..5488981c013a96142046c5a1fcb80b6323d2006b 100644 (file)
@@ -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.  */
index d026dca18ecf7687b744befc64dd6d2f1d149f0d..38fa455aa10eaabaf1d133dd8eda9faaeb2882e8 100644 (file)
@@ -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;