This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Update profile in gimple-ssa-isolate-paths.c


Hi,
while separating an impossible path, we shoud make sure it is seen as cold
by profile.

Bootstrapped/regtested x86_64-linux, will commit it later today.

Honza

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

Index: gimple-ssa-isolate-paths.c
===================================================================
--- gimple-ssa-isolate-paths.c	(revision 249244)
+++ gimple-ssa-isolate-paths.c	(working copy)
@@ -137,6 +137,15 @@ isolate_path (basic_block bb, basic_bloc
   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_bloc
   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);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]