diff options
author | Richard Guenther <rguenther@suse.de> | 2010-09-22 14:44:13 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-09-22 14:44:13 +0000 |
commit | 5d7b099c0a22ecc85218a99ef0df58b9240fdd4e (patch) | |
tree | 81fd9fa9af57c0df9a156c97930d408557c285c8 /gcc | |
parent | 27d5e204ca7d3fa62230529cad888df0d866a10f (diff) | |
download | gcc-5d7b099c0a22ecc85218a99ef0df58b9240fdd4e.zip gcc-5d7b099c0a22ecc85218a99ef0df58b9240fdd4e.tar.gz gcc-5d7b099c0a22ecc85218a99ef0df58b9240fdd4e.tar.bz2 |
tree-inline.c (optimize_inline_calls): Schedule cleanups only if we inlined something.
2010-09-22 Richard Guenther <rguenther@suse.de>
* tree-inline.c (optimize_inline_calls): Schedule cleanups
only if we inlined something. Block compaction and conditional
folding are done by cfg cleanup. Schedule update-address-taken.
(tree_function_versioning): Remove redundant call to number_blocks.
* tree-optimize.c (execute_cleanup_cfg_post_optimizing): Conditional
folding is done by cfg cleanup.
* passes.c (init_optimization_passes): Remove update-address-taken
pass after IPA inlining.
From-SVN: r164525
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/passes.c | 1 | ||||
-rw-r--r-- | gcc/tree-inline.c | 16 | ||||
-rw-r--r-- | gcc/tree-optimize.c | 1 |
4 files changed, 19 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4baeaa9..cff05f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2010-09-22 Richard Guenther <rguenther@suse.de> + + * tree-inline.c (optimize_inline_calls): Schedule cleanups + only if we inlined something. Block compaction and conditional + folding are done by cfg cleanup. Schedule update-address-taken. + (tree_function_versioning): Remove redundant call to number_blocks. + * tree-optimize.c (execute_cleanup_cfg_post_optimizing): Conditional + folding is done by cfg cleanup. + * passes.c (init_optimization_passes): Remove update-address-taken + pass after IPA inlining. + 2010-09-22 Chung-Lin Tang <cltang@codesourcery.com> * postreload.c (move2add_note_store): Add reg_symbol_ref[] checks diff --git a/gcc/passes.c b/gcc/passes.c index c14ed28..c61a1d2 100644 --- a/gcc/passes.c +++ b/gcc/passes.c @@ -836,7 +836,6 @@ init_optimization_passes (void) /* Initial scalar cleanups before alias computation. They ensure memory accesses are not indirect wherever possible. */ NEXT_PASS (pass_strip_predict_hints); - NEXT_PASS (pass_update_address_taken); NEXT_PASS (pass_rename_ssa_copies); NEXT_PASS (pass_complete_unrolli); NEXT_PASS (pass_ccp); diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index ec7aacf..8a53d5e 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -4162,6 +4162,7 @@ optimize_inline_calls (tree fn) basic_block bb; int last = n_basic_blocks; struct gimplify_ctx gctx; + bool inlined_p = false; /* There is no point in performing inlining if errors have already occurred -- and we might crash if we try to inline invalid @@ -4201,7 +4202,7 @@ optimize_inline_calls (tree fn) follow it; we'll trudge through them, processing their CALL_EXPRs along the way. */ FOR_EACH_BB (bb) - gimple_expand_calls_inline (bb, &id); + inlined_p |= gimple_expand_calls_inline (bb, &id); pop_gimplify_context (NULL); @@ -4217,18 +4218,19 @@ optimize_inline_calls (tree fn) } #endif - /* Fold the statements before compacting/renumbering the basic blocks. */ + /* Fold queued statements. */ fold_marked_statements (last, id.statements_to_fold); pointer_set_destroy (id.statements_to_fold); gcc_assert (!id.debug_stmts); - /* Renumber the (code) basic_blocks consecutively. */ - compact_blocks (); + /* If we didn't inline into the function there is nothing to do. */ + if (!inlined_p) + return 0; + /* Renumber the lexical scoping (non-code) blocks consecutively. */ number_blocks (fn); - fold_cond_expr_cond (); delete_unreachable_blocks_update_callgraph (&id); #ifdef ENABLE_CHECKING verify_cgraph_node (id.dst_node); @@ -4241,6 +4243,7 @@ optimize_inline_calls (tree fn) return (TODO_update_ssa | TODO_cleanup_cfg | (gimple_in_ssa_p (cfun) ? TODO_remove_unused_locals : 0) + | (gimple_in_ssa_p (cfun) ? TODO_update_address_taken : 0) | (profile_status != PROFILE_ABSENT ? TODO_rebuild_frequencies : 0)); } @@ -5118,9 +5121,6 @@ tree_function_versioning (tree old_decl, tree new_decl, DECL_INITIAL (new_decl) = remap_blocks (DECL_INITIAL (id.src_fn), &id); - /* Renumber the lexical scoping (non-code) blocks consecutively. */ - number_blocks (id.dst_fn); - declare_inline_vars (DECL_INITIAL (new_decl), vars); if (!VEC_empty (tree, DECL_STRUCT_FUNCTION (old_decl)->local_decls)) diff --git a/gcc/tree-optimize.c b/gcc/tree-optimize.c index 9487741..9b4973f 100644 --- a/gcc/tree-optimize.c +++ b/gcc/tree-optimize.c @@ -158,7 +158,6 @@ struct gimple_opt_pass pass_all_early_optimizations = static unsigned int execute_cleanup_cfg_post_optimizing (void) { - fold_cond_expr_cond (); cleanup_tree_cfg (); cleanup_dead_labels (); group_case_labels (); |