Hi,
this is another bug I noticed while looking into Itanium rgression.
There is no profile attached to recovery blocks in scheduler.
I made them very unlikely, but I wonder if we can do better? After all
we probably know the probability of path that will lead for speculation
to suceed?

Honza

        * haifa-sched.c (sched_create_recovery_edges): Update profile after
        creating recovery edges.
Index: haifa-sched.c
===================================================================
--- haifa-sched.c       (revision 249928)
+++ haifa-sched.c       (working copy)
@@ -8302,7 +8302,15 @@ sched_create_recovery_edges (basic_block
   else
     edge_flags = 0;
 
-  make_edge (first_bb, rec, edge_flags);
+  edge e2 = single_succ_edge (first_bb);
+  edge e = make_edge (first_bb, rec, edge_flags);
+  e->probability = profile_probability::very_unlikely ();
+  e->count = first_bb->count.apply_probability (e->probability);
+  rec->count = e->count;
+  rec->frequency = EDGE_FREQUENCY (e);
+  e2->probability = e->probability.invert ();
+  e2->count = first_bb->count - e2->count;
+
   rtx_code_label *label = block_label (second_bb);
   rtx_jump_insn *jump = emit_jump_insn_after (targetm.gen_jump (label),
                                              BB_END (rec));

Reply via email to