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>
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
* cgraph.h (cgraph_node): New inline method former_thunk_p.
* 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,
base_time -= time;
if (base_time > 65535)
base_time = 65535;
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;
/* Extern inline functions have no cloning local time benefits because they
will be inlined anyway. The only reason to clone them is if it enables
optimization in any of the functions they call. */
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);
/* The inliner-heuristics based estimates may think that in certain
......
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
* 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