diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2015-02-03 00:46:31 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2015-02-02 23:46:31 +0000 |
commit | d67bce7ce8500397d0f8a8109d6026961f99c87a (patch) | |
tree | 4c2422df208e99dff694860c414a8756065c70ba /gcc/ipa-inline.c | |
parent | a4bb6959b818841e232449c9d092c3df3630ea5c (diff) | |
download | gcc-d67bce7ce8500397d0f8a8109d6026961f99c87a.zip gcc-d67bce7ce8500397d0f8a8109d6026961f99c87a.tar.gz gcc-d67bce7ce8500397d0f8a8109d6026961f99c87a.tar.bz2 |
ipa-inline.c (early_inliner): Skip inlining only in always_inlined...
* ipa-inline.c (early_inliner): Skip inlining only in always_inlined;
if some always_inline was inlined, apply changes before inlining
heuristically.
* g++.dg/ipa/devirt-37.C: Disable early inlining.
From-SVN: r220359
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index be22890..d9ab56a 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -2528,7 +2528,9 @@ early_inliner (function *fun) cycles of edges to be always inlined in the callgraph. We might want to be smarter and just avoid this type of inlining. */ - || DECL_DISREGARD_INLINE_LIMITS (node->decl)) + || (DECL_DISREGARD_INLINE_LIMITS (node->decl) + && lookup_attribute ("always_inline", + DECL_ATTRIBUTES (node->decl)))) ; else if (lookup_attribute ("flatten", DECL_ATTRIBUTES (node->decl)) != NULL) @@ -2543,6 +2545,18 @@ early_inliner (function *fun) } else { + /* If some always_inline functions was inlined, apply the changes. + This way we will not account always inline into growth limits and + moreover we will inline calls from always inlines that we skipped + previously becuase of conditional above. */ + if (inlined) + { + timevar_push (TV_INTEGRATION); + todo |= optimize_inline_calls (current_function_decl); + inline_update_overall_summary (node); + inlined = false; + timevar_pop (TV_INTEGRATION); + } /* We iterate incremental inlining to get trivial cases of indirect inlining. */ while (iterations < PARAM_VALUE (PARAM_EARLY_INLINER_MAX_ITERATIONS) |