On Fri, Mar 11, 2011 at 10:58 AM, Martin Jambor <mjam...@suse.cz> wrote: > Hi, > > after I simply moved id->dst_node->analyzed check from > expand_call_inline to optimize_inline_calls I tried asserting it there > instead. When running testsuite I found out this works for everything > but mudflap which adds new nodes late with cgraph_add_new_function > which runs the inliner on nodes which do not have their analyzed flag > set. I believe that we can "fix" that by running > cgraph_analyze_function on these new functions and test results seem > to agree. Does the idea look sane? > > I have bootstrapped and tested the following patch on x86_64-linux on > both trunk and pretty-ipa. Can I commit it now to pretty-ipa and to > trunk once stage1 opens?
Looks good to me. Thanks, Richard. > Thanks, > > Martin > > > > Index: src/gcc/tree-inline.c > =================================================================== > --- src.orig/gcc/tree-inline.c > +++ src/gcc/tree-inline.c > @@ -3766,11 +3766,6 @@ expand_call_inline (basic_block bb, gimp > 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) > Index: src/gcc/cgraph.c > =================================================================== > --- src.orig/gcc/cgraph.c > +++ src/gcc/cgraph.c > @@ -2495,11 +2495,11 @@ cgraph_add_new_function (tree fndecl, bo > case CGRAPH_STATE_FINISHED: > /* At the very end of compilation we have to do all the work up > to expansion. */ > + node = cgraph_node (fndecl); > + 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: src/gcc/cgraph.h > =================================================================== > --- src.orig/gcc/cgraph.h > +++ src/gcc/cgraph.h > @@ -618,6 +618,7 @@ bool varpool_used_from_object_file_p (st > 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: src/gcc/cgraphunit.c > =================================================================== > --- src.orig/gcc/cgraphunit.c > +++ src/gcc/cgraphunit.c > @@ -143,7 +143,6 @@ static void cgraph_expand_all_functions > 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; >