tree-inline.c (expand_call_inline): Do not check that destination node is analyzed.
authorMartin Jambor <mjambor@suse.cz>
Mon, 28 Mar 2011 12:15:44 +0000 (14:15 +0200)
committerMartin Jambor <jamborm@gcc.gnu.org>
Mon, 28 Mar 2011 12:15:44 +0000 (14:15 +0200)
2011-03-28  Martin Jambor  <mjambor@suse.cz>

* tree-inline.c (expand_call_inline): Do not check that destination
node is analyzed.
(optimize_inline_calls): Assert that destination node is analyzed.
* cgraph.c (cgraph_add_new_function): Call cgraph_analyze_function, do
not call tree_lowering_passes.
* cgraph.h (cgraph_analyze_function): Declare.
* cgraphunit.c (cgraph_analyze_function): Make public.

From-SVN: r171602

gcc/ChangeLog
gcc/cgraph.c
gcc/cgraph.h
gcc/cgraphunit.c
gcc/tree-inline.c

index da0fa52c03bccd205a11498596a258b67ef20247..dcc5e1ce15025b9e93b7c2ce2df34fcfddf42b71 100644 (file)
@@ -1,3 +1,13 @@
+2011-03-28  Martin Jambor  <mjambor@suse.cz>
+
+       * tree-inline.c (expand_call_inline): Do not check that destination
+       node is analyzed.
+       (optimize_inline_calls): Assert that destination node is analyzed.
+       * cgraph.c (cgraph_add_new_function): Call cgraph_analyze_function, do
+       not call tree_lowering_passes.
+       * cgraph.h (cgraph_analyze_function): Declare.
+       * cgraphunit.c (cgraph_analyze_function): Make public.
+
 2011-03-28  Joseph Myers  <joseph@codesourcery.com>
 
        * config/sparc/sparc-opts.h: New.
index 64d278f94c1cf5052be7d457fdcb7f3292c55583..3cf75f293c9fc6c7cc8030e5644664f8163e9913 100644 (file)
@@ -2495,11 +2495,13 @@ cgraph_add_new_function (tree fndecl, bool lowered)
       case CGRAPH_STATE_FINISHED:
        /* At the very end of compilation we have to do all the work up
           to expansion.  */
+       node = cgraph_node (fndecl);
+       if (lowered)
+         node->lowered = true;
+       cgraph_analyze_function (node);
        push_cfun (DECL_STRUCT_FUNCTION (fndecl));
        current_function_decl = fndecl;
        gimple_register_cfg_hooks ();
-       if (!lowered)
-          tree_lowering_passes (fndecl);
        bitmap_obstack_initialize (NULL);
        if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (fndecl)))
          execute_pass_list (pass_early_local_passes.pass.sub);
index e2d2f50ca3e9e661ea091f83bce123fbf0a5af45..e774c00eb3850157de3629399e543dfc45773667 100644 (file)
@@ -618,6 +618,7 @@ bool varpool_used_from_object_file_p (struct varpool_node *node);
 extern FILE *cgraph_dump_file;
 void cgraph_finalize_function (tree, bool);
 void cgraph_mark_if_needed (tree);
+void cgraph_analyze_function (struct cgraph_node *);
 void cgraph_finalize_compilation_unit (void);
 void cgraph_optimize (void);
 void cgraph_mark_needed_node (struct cgraph_node *);
index e6a0ea65b2634b6954a0ba301b5815370c365072..c397fe53f6c8a0eff480b007e3d556e8fa655bef 100644 (file)
@@ -143,7 +143,6 @@ static void cgraph_expand_all_functions (void);
 static void cgraph_mark_functions_to_output (void);
 static void cgraph_expand_function (struct cgraph_node *);
 static void cgraph_output_pending_asms (void);
-static void cgraph_analyze_function (struct cgraph_node *);
 
 FILE *cgraph_dump_file;
 
@@ -773,7 +772,7 @@ cgraph_output_pending_asms (void)
 }
 
 /* Analyze the function scheduled to be output.  */
-static void
+void
 cgraph_analyze_function (struct cgraph_node *node)
 {
   tree save = current_function_decl;
index fd8edb4a2e64ca7d28a8f3381edccf3e24da914c..8c8aef662942d14dd47f731c604f27205aec7738 100644 (file)
@@ -3766,11 +3766,6 @@ expand_call_inline (basic_block bb, gimple stmt, copy_body_data *id)
   if (gimple_code (stmt) != GIMPLE_CALL)
     goto egress;
 
-  /* Objective C and fortran still calls tree_rest_of_compilation directly.
-     Kill this check once this is fixed.  */
-  if (!id->dst_node->analyzed)
-    goto egress;
-
   cg_edge = cgraph_edge (id->dst_node, stmt);
   gcc_checking_assert (cg_edge);
   /* First, see if we can figure out what function is being called.
@@ -4203,6 +4198,7 @@ optimize_inline_calls (tree fn)
   memset (&id, 0, sizeof (id));
 
   id.src_node = id.dst_node = cgraph_node (fn);
+  gcc_assert (id.dst_node->analyzed);
   id.dst_fn = fn;
   /* Or any functions that aren't finished yet.  */
   if (current_function_decl)