From aa11163b181893ed79dc1c75547b0109b342372e Mon Sep 17 00:00:00 2001
From: Jan Hubicka <hubicka@ucw.cz>
Date: Fri, 16 Jun 2017 21:02:46 +0200
Subject: [PATCH] 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
---
 gcc/ChangeLog                  |  5 +++++
 gcc/gimple-ssa-isolate-paths.c | 13 +++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b22b567358ef..dfabe1752578 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/gimple-ssa-isolate-paths.c b/gcc/gimple-ssa-isolate-paths.c
index 7babe0923625..7ad39b4e09bb 100644
--- a/gcc/gimple-ssa-isolate-paths.c
+++ b/gcc/gimple-ssa-isolate-paths.c
@@ -137,6 +137,15 @@ isolate_path (basic_block bb, basic_block duplicate,
   gimple_stmt_iterator si, si2;
   edge_iterator ei;
   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
      the duplicate's outgoing edges as duplicate is going to unconditionally
@@ -145,10 +154,14 @@ isolate_path (basic_block bb, basic_block duplicate,
   if (!duplicate)
     {
       duplicate = duplicate_block (bb, NULL, NULL);
+      bb->frequency = 0;
+      bb->count = profile_count::zero ();
       if (!ret_zero)
 	for (ei = ei_start (duplicate->succs); (e2 = ei_safe_edge (ei)); )
 	  remove_edge (e2);
     }
+  bb->frequency += EDGE_FREQUENCY (e);
+  bb->count += e->count;
 
   /* Complete the isolation step by redirecting E to reach DUPLICATE.  */
   e2 = redirect_edge_and_branch (e, duplicate);
-- 
GitLab