diff options
author | Marek Polacek <polacek@redhat.com> | 2015-02-26 18:59:50 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2015-02-26 18:59:50 +0000 |
commit | 1cf06f1e2512b55a55f837b43c1ff235a9be1992 (patch) | |
tree | fe3483b94d6692eccdf8db3480c51ec8064163db /gcc/ipa-inline.c | |
parent | 3809f6458948459a466a559da99de6593bea1e83 (diff) | |
download | gcc-1cf06f1e2512b55a55f837b43c1ff235a9be1992.zip gcc-1cf06f1e2512b55a55f837b43c1ff235a9be1992.tar.gz gcc-1cf06f1e2512b55a55f837b43c1ff235a9be1992.tar.bz2 |
re PR ipa/65008 (ICE: in estimate_edge_growth, at ipa-inline.h:298 with -O2)
PR ipa/65008
* ipa-inline.c (early_inliner): Recompute inline parameters.
* g++.dg/ipa/pr65008.C: New test.
From-SVN: r221025
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 025f7fc..c445f0a 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -2559,6 +2559,19 @@ early_inliner (function *fun) { timevar_push (TV_INTEGRATION); todo |= optimize_inline_calls (current_function_decl); + /* optimize_inline_calls call above might have introduced new + statements that don't have inline parameters computed. */ + for (edge = node->callees; edge; edge = edge->next_callee) + { + if (inline_edge_summary_vec.length () > (unsigned) edge->uid) + { + struct inline_edge_summary *es = inline_edge_summary (edge); + es->call_stmt_size + = estimate_num_insns (edge->call_stmt, &eni_size_weights); + es->call_stmt_time + = estimate_num_insns (edge->call_stmt, &eni_time_weights); + } + } inline_update_overall_summary (node); inlined = false; timevar_pop (TV_INTEGRATION); |