* predict.c (maybe_hot_frequency_p): Break out of...
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Jun 2008 16:36:49 +0000 (16:36 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 2 Jun 2008 16:36:49 +0000 (16:36 +0000)
(maybe_hot_bb_p): ... here.
(maybe_hot_edge_p): New.
* tree-ssa-coalesce.c (coalesce_cost_edge): Compute cost based on edge.
* basic-block.h (maybe_hot_edge_p): Declare.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136282 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/basic-block.h
gcc/predict.c
gcc/tree-ssa-coalesce.c

index 0cc0223..d0235fa 100644 (file)
@@ -1,3 +1,11 @@
+2008-05-26  Jan Hubicka  <jh@suse.cz>
+
+       * predict.c (maybe_hot_frequency_p): Break out of...
+       (maybe_hot_bb_p): ... here.
+       (maybe_hot_edge_p): New.
+       * tree-ssa-coalesce.c (coalesce_cost_edge): Compute cost based on edge.
+       * basic-block.h (maybe_hot_edge_p): Declare.
+
 2008-05-31  Uros Bizjak  <ubizjak@gmail.com>
 
        * config/i386/i386.md (*cmpfp_<mode>): Enable for optimize_size.
index 53e8a8b..17ec338 100644 (file)
@@ -827,6 +827,7 @@ extern void compute_available (sbitmap *, sbitmap *, sbitmap *, sbitmap *);
 
 /* In predict.c */
 extern bool maybe_hot_bb_p (const_basic_block);
+extern bool maybe_hot_edge_p (edge);
 extern bool probably_cold_bb_p (const_basic_block);
 extern bool probably_never_executed_bb_p (const_basic_block);
 extern bool tree_predicted_by_p (const_basic_block, enum br_predictor);
index 4174333..42852dc 100644 (file)
@@ -107,6 +107,22 @@ static const struct predictor_info predictor_info[]= {
 };
 #undef DEF_PREDICTOR
 
+/* Return TRUE if frequency FREQ is considered to be hot.  */
+static bool
+maybe_hot_frequency_p (int freq)
+{
+  if (!profile_info || !flag_branch_probabilities)
+    {
+      if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
+        return false;
+      if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
+        return true;
+    }
+  if (freq < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
+    return false;
+  return true;
+}
+
 /* Return true in case BB can be CPU intensive and should be optimized
    for maximal performance.  */
 
@@ -117,16 +133,20 @@ maybe_hot_bb_p (const_basic_block bb)
       && (bb->count
          < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
     return false;
-  if (!profile_info || !flag_branch_probabilities)
-    {
-      if (cfun->function_frequency == FUNCTION_FREQUENCY_UNLIKELY_EXECUTED)
-        return false;
-      if (cfun->function_frequency == FUNCTION_FREQUENCY_HOT)
-        return true;
-    }
-  if (bb->frequency < BB_FREQ_MAX / PARAM_VALUE (HOT_BB_FREQUENCY_FRACTION))
+  return maybe_hot_frequency_p (bb->frequency);
+}
+
+/* Return true in case BB can be CPU intensive and should be optimized
+   for maximal performance.  */
+
+bool
+maybe_hot_edge_p (edge e)
+{
+  if (profile_info && flag_branch_probabilities
+      && (e->count
+         < profile_info->sum_max / PARAM_VALUE (HOT_BB_COUNT_FRACTION)))
     return false;
-  return true;
+  return maybe_hot_frequency_p (EDGE_FREQUENCY (e));
 }
 
 /* Return true in case BB is cold and should be optimized for size.  */
index ef1ebca..172f1a2 100644 (file)
@@ -114,7 +114,7 @@ coalesce_cost_edge (edge e)
     return MUST_COALESCE_COST;
 
   return coalesce_cost (EDGE_FREQUENCY (e), 
-                       maybe_hot_bb_p (e->src), 
+                       maybe_hot_edge_p (e), 
                        EDGE_CRITICAL_P (e));
 }