mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 20:11:06 +08:00
tree-tailcall.c (eliminate_tail_call): Be more careful about not disturbin profile of entry block.
* tree-tailcall.c (eliminate_tail_call): Be more careful about not disturbin profile of entry block. From-SVN: r254887
This commit is contained in:
parent
3860f31db1
commit
db16c1841a
@ -1,3 +1,8 @@
|
||||
2017-11-17 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* tree-tailcall.c (eliminate_tail_call): Be more careful about not
|
||||
disturbin profile of entry block.
|
||||
|
||||
2017-11-17 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* ipa-fnsummary.c (estimate_node_size_and_time): Be more tolerant for
|
||||
|
@ -889,10 +889,18 @@ eliminate_tail_call (struct tailcall *t)
|
||||
|
||||
/* Number of executions of function has reduced by the tailcall. */
|
||||
e = single_succ_edge (gsi_bb (t->call_gsi));
|
||||
decrease_profile (EXIT_BLOCK_PTR_FOR_FN (cfun), e->count ());
|
||||
decrease_profile (ENTRY_BLOCK_PTR_FOR_FN (cfun), e->count ());
|
||||
|
||||
profile_count count = e->count ();
|
||||
|
||||
/* When profile is inconsistent and the recursion edge is more frequent
|
||||
than number of executions of functions, scale it down, so we do not end
|
||||
up with 0 executions of entry block. */
|
||||
if (count >= ENTRY_BLOCK_PTR_FOR_FN (cfun)->count)
|
||||
count = ENTRY_BLOCK_PTR_FOR_FN (cfun)->count.apply_scale (7, 8);
|
||||
decrease_profile (EXIT_BLOCK_PTR_FOR_FN (cfun), count);
|
||||
decrease_profile (ENTRY_BLOCK_PTR_FOR_FN (cfun), count);
|
||||
if (e->dest != EXIT_BLOCK_PTR_FOR_FN (cfun))
|
||||
decrease_profile (e->dest, e->count ());
|
||||
decrease_profile (e->dest, count);
|
||||
|
||||
/* Replace the call by a jump to the start of function. */
|
||||
e = redirect_edge_and_branch (single_succ_edge (gsi_bb (t->call_gsi)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user