re PR tree-optimization/85964 (compile time hog w/ -O3 -ftracer -fno-guess-branch...
authorRichard Biener <rguenther@suse.de>
Wed, 30 May 2018 14:55:04 +0000 (14:55 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 30 May 2018 14:55:04 +0000 (14:55 +0000)
2018-05-30  Richard Biener  <rguenther@suse.de>

PR tree-optimization/85964
* tracer.c (better_p): Drop initialized count check, we only
call the function with initialized counts now.
(find_best_successor): Do find a best edge if one
has uninitialized count.
(find_best_predecessor): Likewise.  Do BB frequency check only
if count is initialized.

From-SVN: r260954

gcc/ChangeLog
gcc/tracer.c

index 9b89baa67320d13d5c8adccf1b3b01d04bd2ebb3..ff61ca585f7b13b4bb7f491b44e3dbee4182e550 100644 (file)
@@ -1,3 +1,13 @@
+2018-05-30  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/85964
+       * tracer.c (better_p): Drop initialized count check, we only
+       call the function with initialized counts now.
+       (find_best_successor): Do find a best edge if one
+       has uninitialized count.
+       (find_best_predecessor): Likewise.  Do BB frequency check only
+       if count is initialized.
+
 2017-05-30  Jackson Woodruff  <jackson.woodruff@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_host_wide_int_compare): New.
index 58f4ec1d72c5b9615e21d366af86f15b9ae6dbd2..61815130802f9e27cbfe6b50781742b62e83985d 100644 (file)
@@ -132,8 +132,7 @@ count_insns (basic_block bb)
 static bool
 better_p (const_edge e1, const_edge e2)
 {
-  if (e1->count ().initialized_p () && e2->count ().initialized_p ()
-      && ((e1->count () > e2->count ()) || (e1->count () < e2->count  ())))
+  if ((e1->count () > e2->count ()) || (e1->count () < e2->count ()))
     return e1->count () > e2->count ();
   /* This is needed to avoid changes in the decision after
      CFG is modified.  */
@@ -152,12 +151,15 @@ find_best_successor (basic_block bb)
   edge_iterator ei;
 
   FOR_EACH_EDGE (e, ei, bb->succs)
-    if (!best || better_p (e, best))
-      best = e;
+    {
+      if (!e->count ().initialized_p ())
+       return NULL;
+      if (!best || better_p (e, best))
+       best = e;
+    }
   if (!best || ignore_bb_p (best->dest))
     return NULL;
-  if (best->probability.initialized_p ()
-      && best->probability.to_reg_br_prob_base () <= probability_cutoff)
+  if (best->probability.to_reg_br_prob_base () <= probability_cutoff)
     return NULL;
   return best;
 }
@@ -172,12 +174,17 @@ find_best_predecessor (basic_block bb)
   edge_iterator ei;
 
   FOR_EACH_EDGE (e, ei, bb->preds)
-    if (!best || better_p (e, best))
-      best = e;
+    {
+      if (!e->count ().initialized_p ())
+       return NULL;
+      if (!best || better_p (e, best))
+       best = e;
+    }
   if (!best || ignore_bb_p (best->src))
     return NULL;
-  if (EDGE_FREQUENCY (best) * REG_BR_PROB_BASE
-      < bb->count.to_frequency (cfun) * branch_ratio_cutoff)
+  if (bb->count.initialized_p ()
+      && (best->count ().to_frequency (cfun) * REG_BR_PROB_BASE
+         < bb->count.to_frequency (cfun) * branch_ratio_cutoff))
     return NULL;
   return best;
 }