diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2016-05-03 21:05:31 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2016-05-03 19:05:31 +0000 |
commit | 1a0bf5e11baddeb3b12e02d85b5e2504ce151abd (patch) | |
tree | fa1518ec23a4f9f2df062d54c970f14311ba7cbc /gcc/ipa-inline-analysis.c | |
parent | 8b38916ad4fe0b878b12c9a42d6983ac09440485 (diff) | |
download | gcc-1a0bf5e11baddeb3b12e02d85b5e2504ce151abd.zip gcc-1a0bf5e11baddeb3b12e02d85b5e2504ce151abd.tar.gz gcc-1a0bf5e11baddeb3b12e02d85b5e2504ce151abd.tar.bz2 |
cgraph.c (symbol_table::create_edge): Set inline_failed.
* cgraph.c (symbol_table::create_edge): Set inline_failed.
(cgraph_edge::make_direct): Likewise.
(cgraph_edge::dump_edge_flags): Dump call_stmt_cannot_inline_p.
* cgraphclones.c (duplicate_thunk_for_node): Set inline_failed.
* cif-code.def (CIF_LTO_MISMATCHED_DECLARATIONS): New code
(CIF_THUNK): New code.
* ipa-inline-analysis.c (initialize_inline_failed): Preserve
CIF_FINAL_ERROR codes; do not deal with call_stmt_cannot_inline_p.
(compute_inline_parameters): Set inline_failed for thunks.
(inline_analyze_function): Cleanup.
* ipa-inline.c (can_inline_edge_p): Do not deal with
call_stmt_cannot_inline_p.
(can_early_inline_edge_p): Likewise.
(early_inliner): Initialize inline_failed.
* lto-cgraph.c (lto_output_edge): Sanity check inline_failed.
* lto-symtab.c (lto_cgraph_replace_node): Initialize inline_failed.
From-SVN: r235839
Diffstat (limited to 'gcc/ipa-inline-analysis.c')
-rw-r--r-- | gcc/ipa-inline-analysis.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 4fbc2ed..47b5b96 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -1490,19 +1490,23 @@ initialize_inline_failed (struct cgraph_edge *e) { struct cgraph_node *callee = e->callee; - if (e->indirect_unknown_callee) + if (e->inline_failed && e->inline_failed != CIF_BODY_NOT_AVAILABLE + && cgraph_inline_failed_type (e->inline_failed) == CIF_FINAL_ERROR) + ; + else if (e->indirect_unknown_callee) e->inline_failed = CIF_INDIRECT_UNKNOWN_CALL; else if (!callee->definition) e->inline_failed = CIF_BODY_NOT_AVAILABLE; else if (callee->local.redefined_extern_inline) e->inline_failed = CIF_REDEFINED_EXTERN_INLINE; - else if (e->call_stmt_cannot_inline_p) - e->inline_failed = CIF_MISMATCHED_ARGUMENTS; else if (cfun && fn_contains_cilk_spawn_p (cfun)) /* We can't inline if the function is spawing a function. */ - e->inline_failed = CIF_FUNCTION_NOT_INLINABLE; + e->inline_failed = CIF_CILK_SPAWN; else e->inline_failed = CIF_FUNCTION_NOT_CONSIDERED; + gcc_checking_assert (!e->call_stmt_cannot_inline_p + || cgraph_inline_failed_type (e->inline_failed) + == CIF_FINAL_ERROR); } /* Callback of walk_aliased_vdefs. Flags that it has been invoked to the @@ -2925,7 +2929,7 @@ compute_inline_parameters (struct cgraph_node *node, bool early) struct predicate t = true_predicate (); info->inlinable = 0; - node->callees->call_stmt_cannot_inline_p = true; + node->callees->inline_failed = CIF_THUNK; node->local.can_change_signature = false; es->call_stmt_time = 1; es->call_stmt_size = 1; @@ -4107,17 +4111,9 @@ inline_analyze_function (struct cgraph_node *node) { struct cgraph_edge *e; for (e = node->callees; e; e = e->next_callee) - { - if (e->inline_failed == CIF_FUNCTION_NOT_CONSIDERED) - e->inline_failed = CIF_FUNCTION_NOT_OPTIMIZED; - e->call_stmt_cannot_inline_p = true; - } + e->inline_failed = CIF_FUNCTION_NOT_OPTIMIZED; for (e = node->indirect_calls; e; e = e->next_callee) - { - if (e->inline_failed == CIF_FUNCTION_NOT_CONSIDERED) - e->inline_failed = CIF_FUNCTION_NOT_OPTIMIZED; - e->call_stmt_cannot_inline_p = true; - } + e->inline_failed = CIF_FUNCTION_NOT_OPTIMIZED; } pop_cfun (); |