From 897c92c36ba0efd6ab07e5ace3d8eedd0dbbe97f Mon Sep 17 00:00:00 2001 From: mpolacek Date: Thu, 26 Feb 2015 18:59:50 +0000 Subject: [PATCH] PR ipa/65008 * ipa-inline.c (early_inliner): Recompute inline parameters. * g++.dg/ipa/pr65008.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221025 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/ipa-inline.c | 13 +++++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/ipa/pr65008.C | 19 +++++++++++++++++++ 4 files changed, 42 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ipa/pr65008.C diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f651903..4fa8ad6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2015-02-26 Marek Polacek + + PR ipa/65008 + * ipa-inline.c (early_inliner): Recompute inline parameters. + 2015-02-26 Bill Schmidt PR target/65171 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c9789d9..be82a66 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-02-26 Marek Polacek + + PR ipa/65008 + * g++.dg/ipa/pr65008.C: New test. + 2015-02-26 Tom de Vries * lib/profopt.exp (profopt-target-cleanup): New proc. diff --git a/gcc/testsuite/g++.dg/ipa/pr65008.C b/gcc/testsuite/g++.dg/ipa/pr65008.C new file mode 100644 index 0000000..29b3a2f --- /dev/null +++ b/gcc/testsuite/g++.dg/ipa/pr65008.C @@ -0,0 +1,19 @@ +// PR ipa/65008 +// { dg-do compile } +// { dg-options "-O2" } + +struct A +{ + A (); + virtual void foo () {} +}; + +static inline int __attribute__ ((always_inline)) call_foo (A *a) +{ + a->foo (); +} + +A::A () +{ + call_foo (this); +} -- 2.7.4