gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path as unlikely;...
authorJan Hubicka <hubicka@ucw.cz>
Fri, 16 Jun 2017 19:02:46 +0000 (21:02 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Fri, 16 Jun 2017 19:02:46 +0000 (19:02 +0000)
* gimple-ssa-isolate-paths.c (isolate_path): Set edge leading to path
as unlikely; update profile.

From-SVN: r249277

gcc/ChangeLog
gcc/gimple-ssa-isolate-paths.c

index b22b567358efa826d79eae214c93de77f2d5d31e..dfabe1752578002c6aa8cb8581c9224096724ada 100644 (file)
@@ -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
index 7babe0923625782e8d4e55681d92a2ee3154b234..7ad39b4e09bb9f69189ba3d40c270bb116725709 100644 (file)
@@ -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);