* tree-ssa-loop-manip.c
authorJan Hubicka <hubicka@ucw.cz>
Thu, 16 Nov 2017 11:06:49 +0000 (12:06 +0100)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 16 Nov 2017 11:06:49 +0000 (11:06 +0000)
(scale_dominated_blocks_in_loop): Update to profile counts.
(tree_transform_and_unroll_loop): Likewise.

From-SVN: r254811

gcc/ChangeLog
gcc/tree-ssa-loop-manip.c

index 872ca086308ed29b830dd500139107b64856c27e..9211a8b33c5bd15b326df99dca93f49ac7c04a2d 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-14  Jan Hubicka  <hubicka@ucw.cz>
+
+       * tree-ssa-loop-manip.c
+       (scale_dominated_blocks_in_loop): Update to profile counts.
+       (tree_transform_and_unroll_loop): Likewise.
+
 2017-11-14  Jan Hubicka  <hubicka@ucw.cz>
 
        * tree-vect-loop-manip.c (vect_do_peeling): Do not use
index 1efcd272241486e5c6128c28ac7eed30e5b67605..12c49d7cfd4a98c5869cd84d0e1426b75878e367 100644 (file)
@@ -1091,11 +1091,11 @@ determine_exit_conditions (struct loop *loop, struct tree_niter_desc *desc,
 
 static void
 scale_dominated_blocks_in_loop (struct loop *loop, basic_block bb,
-                               int num, int den)
+                               profile_count num, profile_count den)
 {
   basic_block son;
 
-  if (den == 0)
+  if (!den.nonzero_p () && !(num == profile_count::zero ()))
     return;
 
   for (son = first_dom_son (CDI_DOMINATORS, bb);
@@ -1104,7 +1104,7 @@ scale_dominated_blocks_in_loop (struct loop *loop, basic_block bb,
     {
       if (!flow_bb_inside_loop_p (loop, son))
        continue;
-      scale_bbs_frequencies_int (&son, 1, num, den);
+      scale_bbs_frequencies_profile_count (&son, 1, num, den);
       scale_dominated_blocks_in_loop (loop, son, num, den);
     }
 }
@@ -1281,9 +1281,10 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor,
     scale_dominated_blocks_in_loop (loop, exit->src,
                                    /* We are scaling up here so probability
                                       does not fit.  */
-                                   REG_BR_PROB_BASE,
-                                   REG_BR_PROB_BASE
-                                   - exit->probability.to_reg_br_prob_base ());
+                                   loop->header->count,
+                                   loop->header->count
+                                   - loop->header->count.apply_probability
+                                        (exit->probability));
 
   bsi = gsi_last_bb (exit_bb);
   exit_if = gimple_build_cond (EQ_EXPR, integer_zero_node,
@@ -1377,8 +1378,7 @@ tree_transform_and_unroll_loop (struct loop *loop, unsigned factor,
     {
       /* Avoid dropping loop body profile counter to 0 because of zero count
         in loop's preheader.  */
-      if (freq_e == profile_count::zero ())
-        freq_e = profile_count::from_gcov_type (1);
+      freq_e = freq_e.force_nonzero ();
       scale_loop_frequencies (loop, freq_e.probability_in (freq_h));
     }