diff options
author | Jan Hubicka <jh@suse.cz> | 2007-01-16 22:30:54 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2007-01-16 21:30:54 +0000 |
commit | 873aa8f5480598231174d8781bc60614815dd71d (patch) | |
tree | 804fa8f1f32288cbe6d17f5732d75a433109a589 /gcc/tree-inline.c | |
parent | 2797f081d474a208a74af9684d2c5c3dc0ff282d (diff) | |
download | gcc-873aa8f5480598231174d8781bc60614815dd71d.zip gcc-873aa8f5480598231174d8781bc60614815dd71d.tar.gz gcc-873aa8f5480598231174d8781bc60614815dd71d.tar.bz2 |
cgraph.h (cgraph_decide_inlining_incrementally): Kill.
* cgraph.h (cgraph_decide_inlining_incrementally): Kill.
* tree-pass.h: Reorder to make IPA passes appear toegher.
(pass_early_inline, pass_inline_parameters, pass_apply_inline): Declare.
* cgraphunit.c (cgraph_finalize_function): Do not compute inling
parameters, do not call early inliner.
* ipa-inline.c: Update comments. Include tree-flow.h
(cgraph_decide_inlining): Do not compute inlining parameters.
(cgraph_decide_inlining_incrementally): Return TODOs; assume to
be called with function context set up.
(pass_ipa_inline): Remove unreachable functions before pass.
(cgraph_early_inlining): Simplify assuming to be called from the
PM as local pass.
(pass_early_inline): New pass.
(cgraph_gate_ipa_early_inlining): New gate.
(pass_ipa_early_inline): Turn into simple wrapper.
(compute_inline_parameters): New function.
(gate_inline_passes): New gate.
(pass_inline_parameters): New pass.
(apply_inline): Move here from tree-optimize.c
(pass_apply_inline): New pass.
* ipa.c (cgraph_remove_unreachable_nodes): Verify cgraph after
transforming.
* tree-inline.c (optimize_inline_calls): Return TODOs rather than
doing them by hand.
(tree_function_versioning): Do not allocate dummy struct function.
* tree-inline.h (optimize_inline_calls): Update prototype.
* tree-optimize.c (execute_fixup_cfg): Export.
(pass_fixup_cfg): Remove
(tree_rest_of_compilation): Do not apply inlines.
* tree-flow.h (execute_fixup_cfg): Declare.
* Makefile.in (gt-passes.c): New.
* passes.c: Include gt-passes.h
(init_optimization_passes): New passes.
(nnodes, order): New static vars.
(do_per_function_toporder): New function.
(execute_one_pass): Dump current pass here.
(execute_ipa_pass_list): Don't dump current pass here.
From-SVN: r120835
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 3da2cc2..813f18d 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -2613,7 +2613,7 @@ fold_marked_statements (int first, struct pointer_set_t *statements) /* Expand calls to inline functions in the body of FN. */ -void +unsigned int optimize_inline_calls (tree fn) { copy_body_data id; @@ -2624,7 +2624,7 @@ optimize_inline_calls (tree fn) occurred -- and we might crash if we try to inline invalid code. */ if (errorcount || sorrycount) - return; + return 0; /* Clear out ID. */ memset (&id, 0, sizeof (id)); @@ -2679,25 +2679,22 @@ optimize_inline_calls (tree fn) if (ENTRY_BLOCK_PTR->count) counts_to_freqs (); + /* We are not going to maintain the cgraph edges up to date. + Kill it so it won't confuse us. */ + cgraph_node_remove_callees (id.dst_node); + fold_marked_statements (last, id.statements_to_fold); pointer_set_destroy (id.statements_to_fold); - if (gimple_in_ssa_p (cfun)) - { - /* We make no attempts to keep dominance info up-to-date. */ - free_dominance_info (CDI_DOMINATORS); - free_dominance_info (CDI_POST_DOMINATORS); - delete_unreachable_blocks (); - update_ssa (TODO_update_ssa); - fold_cond_expr_cond (); - if (need_ssa_update_p ()) - update_ssa (TODO_update_ssa); - } - else - fold_cond_expr_cond (); + fold_cond_expr_cond (); + /* We make no attempts to keep dominance info up-to-date. */ + free_dominance_info (CDI_DOMINATORS); + free_dominance_info (CDI_POST_DOMINATORS); /* It would be nice to check SSA/CFG/statement consistency here, but it is not possible yet - the IPA passes might make various functions to not throw and they don't care to proactively update local EH info. This is done later in fixup_cfg pass that also execute the verification. */ + return (TODO_update_ssa | TODO_cleanup_cfg + | (gimple_in_ssa_p (cfun) ? TODO_remove_unused_locals : 0)); } /* FN is a function that has a complete body, and CLONE is a function whose @@ -3194,6 +3191,7 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map, struct ipa_replace_map *replace_info; basic_block old_entry_block; tree t_step; + tree old_current_function_decl = current_function_decl; gcc_assert (TREE_CODE (old_decl) == FUNCTION_DECL && TREE_CODE (new_decl) == FUNCTION_DECL); @@ -3202,10 +3200,6 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map, old_version_node = cgraph_node (old_decl); new_version_node = cgraph_node (new_decl); - allocate_struct_function (new_decl); - /* Cfun points to the new allocated function struct at this point. */ - cfun->function_end_locus = DECL_SOURCE_LOCATION (new_decl); - DECL_ARTIFICIAL (new_decl) = 1; DECL_ABSTRACT_ORIGIN (new_decl) = DECL_ORIGIN (old_decl); @@ -3322,7 +3316,9 @@ tree_function_versioning (tree old_decl, tree new_decl, varray_type tree_map, free_dominance_info (CDI_DOMINATORS); free_dominance_info (CDI_POST_DOMINATORS); pop_cfun (); - current_function_decl = NULL; + current_function_decl = old_current_function_decl; + gcc_assert (!current_function_decl + || DECL_STRUCT_FUNCTION (current_function_decl) == cfun); return; } |