bb-reorder.c (better_edge_p): Do not build traces across abnormal/eh edges...
authorJan Hubicka <hubicka@ucw.cz>
Thu, 6 Jul 2017 16:12:01 +0000 (18:12 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 6 Jul 2017 16:12:01 +0000 (16:12 +0000)
* bb-reorder.c (better_edge_p): Do not build traces across abnormal/eh
edges; zero probability is not better than uninitialized.

From-SVN: r250033

gcc/ChangeLog
gcc/bb-reorder.c

index e0fe1a63858657d5755209219c84b62238fb2602..f2a15a186a8d5e0ea31eb4a46f79d048010b4e81 100644 (file)
@@ -1,3 +1,8 @@
+2017-07-06  Jan Hubicka  <hubicka@ucw.cz>
+
+       * bb-reorder.c (better_edge_p): Do not build traces across abnormal/eh
+       edges; zero probability is not better than uninitialized.
+
 2017-07-06  Maxim Ostapenko  <m.ostapenko@samsung.com>
 
        * asan.h (asan_sanitize_allocas_p): Declare.
index 1994c1f7a5f29241c4a4ac076ac334bba60c02b3..a421f6b3c713e6f95f4fe05ac2b16b47d67c44df 100644 (file)
@@ -957,7 +957,14 @@ better_edge_p (const_basic_block bb, const_edge e, profile_probability prob,
     return !cur_best_edge
           || cur_best_edge->dest->index > e->dest->index;
 
-  if (prob > best_prob + diff_prob || !best_prob.initialized_p ())
+  /* Those edges are so expensive that continuing a trace is not useful
+     performance wise.  */
+  if (e->flags & (EDGE_ABNORMAL | EDGE_EH))
+    return false;
+
+  if (prob > best_prob + diff_prob
+      || (!best_prob.initialized_p ()
+         && prob > profile_probability::guessed_never ()))
     /* The edge has higher probability than the temporary best edge.  */
     is_better_edge = true;
   else if (prob < best_prob - diff_prob)