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/cgraph.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/cgraph.c')
-rw-r--r-- | gcc/cgraph.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/gcc/cgraph.c b/gcc/cgraph.c index 3105aec..782cb52 100644 --- a/gcc/cgraph.c +++ b/gcc/cgraph.c @@ -859,9 +859,15 @@ symbol_table::create_edge (cgraph_node *caller, cgraph_node *callee, && callee && callee->decl && !gimple_check_call_matching_types (call_stmt, callee->decl, false)) - edge->call_stmt_cannot_inline_p = true; + { + edge->inline_failed = CIF_MISMATCHED_ARGUMENTS; + edge->call_stmt_cannot_inline_p = true; + } else - edge->call_stmt_cannot_inline_p = false; + { + edge->inline_failed = CIF_FUNCTION_NOT_CONSIDERED; + edge->call_stmt_cannot_inline_p = false; + } edge->indirect_info = NULL; edge->indirect_inlining_edge = 0; @@ -1240,10 +1246,12 @@ cgraph_edge::make_direct (cgraph_node *callee) /* Insert to callers list of the new callee. */ edge->set_callee (callee); - if (call_stmt) - call_stmt_cannot_inline_p - = !gimple_check_call_matching_types (call_stmt, callee->decl, - false); + if (call_stmt + && !gimple_check_call_matching_types (call_stmt, callee->decl, false)) + { + call_stmt_cannot_inline_p = true; + inline_failed = CIF_MISMATCHED_ARGUMENTS; + } /* We need to re-determine the inlining status of the edge. */ initialize_inline_failed (edge); @@ -1996,6 +2004,8 @@ cgraph_edge::dump_edge_flags (FILE *f) fprintf (f, "(speculative) "); if (!inline_failed) fprintf (f, "(inlined) "); + if (call_stmt_cannot_inline_p) + fprintf (f, "(call_stmt_cannot_inline_p) "); if (indirect_inlining_edge) fprintf (f, "(indirect_inlining) "); if (count) |