Commit aa11163b by Jan Hubicka Committed by Jan Hubicka

gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path as unlikely; update profile.


	* gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path
	as unlikely; update profile.

From-SVN: r249277
parent 8d71d7cd
2017-06-16 Jan Hubicka <hubicka@ucw.cz> 2017-06-16 Jan Hubicka <hubicka@ucw.cz>
* gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path
as unlikely; update profile.
2017-06-16 Jan Hubicka <hubicka@ucw.cz>
* predict.c (force_edge_cold): Handle declaring edges impossible * predict.c (force_edge_cold): Handle declaring edges impossible
more aggresively. more aggresively.
......
...@@ -137,6 +137,15 @@ isolate_path (basic_block bb, basic_block duplicate, ...@@ -137,6 +137,15 @@ isolate_path (basic_block bb, basic_block duplicate,
gimple_stmt_iterator si, si2; gimple_stmt_iterator si, si2;
edge_iterator ei; edge_iterator ei;
edge e2; edge e2;
bool impossible = true;
for (si = gsi_start_bb (bb); gsi_stmt (si) != stmt; gsi_next (&si))
if (stmt_can_terminate_bb_p (gsi_stmt (si)))
{
impossible = false;
break;
}
force_edge_cold (e, impossible);
/* First duplicate BB if we have not done so already and remove all /* First duplicate BB if we have not done so already and remove all
the duplicate's outgoing edges as duplicate is going to unconditionally the duplicate's outgoing edges as duplicate is going to unconditionally
...@@ -145,10 +154,14 @@ isolate_path (basic_block bb, basic_block duplicate, ...@@ -145,10 +154,14 @@ isolate_path (basic_block bb, basic_block duplicate,
if (!duplicate) if (!duplicate)
{ {
duplicate = duplicate_block (bb, NULL, NULL); duplicate = duplicate_block (bb, NULL, NULL);
bb->frequency = 0;
bb->count = profile_count::zero ();
if (!ret_zero) if (!ret_zero)
for (ei = ei_start (duplicate->succs); (e2 = ei_safe_edge (ei)); ) for (ei = ei_start (duplicate->succs); (e2 = ei_safe_edge (ei)); )
remove_edge (e2); remove_edge (e2);
} }
bb->frequency += EDGE_FREQUENCY (e);
bb->count += e->count;
/* Complete the isolation step by redirecting E to reach DUPLICATE. */ /* Complete the isolation step by redirecting E to reach DUPLICATE. */
e2 = redirect_edge_and_branch (e, duplicate); e2 = redirect_edge_and_branch (e, duplicate);
......
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