Commit 59d9a0aa by Martin Jambor Committed by Martin Jambor

Zero local estimated benefit for cloning extern inline function

2019-03-07  Martin Jambor  <mjambor@suse.cz>

	PR lto/87525
	* ipa-cp.c (perform_estimation_of_a_value): Account zero time benefit
	for extern inline functions.

	testsuite/
	* gcc.dg/ipa/ipcp-5.c: New test.

From-SVN: r269464
parent ae9b2892
2019-03-07 Martin Jambor <mjambor@suse.cz> 2019-03-07 Martin Jambor <mjambor@suse.cz>
PR lto/87525
* ipa-cp.c (perform_estimation_of_a_value): Account zero time benefit
for extern inline functions.
2019-03-07 Martin Jambor <mjambor@suse.cz>
PR ipa/88235 PR ipa/88235
* cgraph.h (cgraph_node): New inline method former_thunk_p. * cgraph.h (cgraph_node): New inline method former_thunk_p.
* cgraph.c (cgraph_node::dump): Dump a note if node is a former thunk. * cgraph.c (cgraph_node::dump): Dump a note if node is a former thunk.
......
...@@ -2818,11 +2818,18 @@ perform_estimation_of_a_value (cgraph_node *node, vec<tree> known_csts, ...@@ -2818,11 +2818,18 @@ perform_estimation_of_a_value (cgraph_node *node, vec<tree> known_csts,
base_time -= time; base_time -= time;
if (base_time > 65535) if (base_time > 65535)
base_time = 65535; base_time = 65535;
time_benefit = base_time.to_int ()
+ devirtualization_time_bonus (node, known_csts, known_contexts, /* Extern inline functions have no cloning local time benefits because they
known_aggs_ptrs) will be inlined anyway. The only reason to clone them is if it enables
+ hint_time_bonus (hints) optimization in any of the functions they call. */
+ removable_params_cost + est_move_cost; if (DECL_EXTERNAL (node->decl) && DECL_DECLARED_INLINE_P (node->decl))
time_benefit = 0;
else
time_benefit = base_time.to_int ()
+ devirtualization_time_bonus (node, known_csts, known_contexts,
known_aggs_ptrs)
+ hint_time_bonus (hints)
+ removable_params_cost + est_move_cost;
gcc_checking_assert (size >=0); gcc_checking_assert (size >=0);
/* The inliner-heuristics based estimates may think that in certain /* The inliner-heuristics based estimates may think that in certain
......
2019-03-07 Martin Jambor <mjambor@suse.cz> 2019-03-07 Martin Jambor <mjambor@suse.cz>
PR lto/87525
* gcc.dg/ipa/ipcp-5.c: New test.
2019-03-07 Martin Jambor <mjambor@suse.cz>
PR ipa/88235 PR ipa/88235
* g++.dg/ipa/pr88235.C: New test. * g++.dg/ipa/pr88235.C: New test.
......
/* Test that estimated local cloning time benefit of extern inline functions is
zero. */
/* { dg-do compile } */
/* { dg-options "-O3 -fdump-ipa-cp -fno-early-inlining" } */
/* { dg-add-options bind_pic_locally } */
extern int get_int (void);
extern void use_stuff (int);
int arr[10];
inline void
f (int a)
{
arr[0] += a + 5;
arr[1] += a + 50;
arr[2] += a - 3;
arr[3] += a;
arr[4] += a + 21;
arr[5] += a + 900;
arr[6] += a + 2;
arr[7] += a + 3456;
arr[8] += a + 3;
arr[9] += a + 32;
use_stuff (a);
}
int
entry (void)
{
int i;
for (i = 0; i < 100; i++)
f (7);
for (i = 0; i < 100; i++)
f (get_int ());
return 0;
}
/* { dg-final { scan-ipa-dump "loc_time: 0" "cp" } } */
/* { dg-final { scan-ipa-dump-not "replacing param.*with const" "cp" } } */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment