cfgloopmanip.c (scale_bbs_frequencies): Use RDIV macro
authorJan Hubicka <jh@suse.cz>
Thu, 22 Apr 2004 21:46:48 +0000 (23:46 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 22 Apr 2004 21:46:48 +0000 (21:46 +0000)
      * cfgloopmanip.c (scale_bbs_frequencies): Use RDIV macro
      * cfgloopanal.c (expected_loop_iterations): Change the return value

From-SVN: r81058

gcc/ChangeLog
gcc/cfgloopanal.c
gcc/cfgloopmanip.c

index acde505da64c51907c1780c0befd773ab1d100fa..b13dc2352316067ba7916f3ffaaf4efb3dc5ad48 100644 (file)
@@ -1,3 +1,8 @@
+2004-04-22  Jan Hubicka  <jh@suse.cz>
+
+      * cfgloopmanip.c (scale_bbs_frequencies): Use RDIV macro
+      * cfgloopanal.c (expected_loop_iterations): Change the return value
+
 2004-04-22  Jakub Jelinek  <jakub@redhat.com>
 
        * cselib.h (struct elt_loc_list): Remove canon_loc field.
index 63d6f4121b0ee065bcfadb3d79dffb486fe3defa..358bfa765b82fb015fbe0dae15ee0a95309327cb 100644 (file)
@@ -431,9 +431,9 @@ expected_loop_iterations (const struct loop *loop)
          count_in += e->count;
 
       if (count_in == 0)
-       return 0;
-
-      expected = (count_latch + count_in - 1) / count_in;
+        expected = count_latch * 2;
+      else
+        expected = (count_latch + count_in - 1) / count_in;
 
       /* Avoid overflows.  */
       return (expected > REG_BR_PROB_BASE ? REG_BR_PROB_BASE : expected);
@@ -452,7 +452,7 @@ expected_loop_iterations (const struct loop *loop)
          freq_in += EDGE_FREQUENCY (e);
 
       if (freq_in == 0)
-       return 0;
+       return freq_latch * 2;
 
       return (freq_latch + freq_in - 1) / freq_in;
     }
index 2dc46432aa9de69307f35e989621bb705e2fb8d0..59ae4a1ed7a2caaf56f77d9cbf54939749669cdf 100644 (file)
@@ -50,6 +50,8 @@ static void scale_bbs_frequencies (basic_block *, int, int, int);
 static basic_block create_preheader (struct loop *, int);
 static void fix_irreducible_loops (basic_block);
 
+#define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
+
 /* Splits basic block BB after INSN, returns created edge.  Updates loops
    and dominators.  */
 edge
@@ -458,7 +460,7 @@ scale_bbs_frequencies (basic_block *bbs, int nbbs, int num, int den)
   for (i = 0; i < nbbs; i++)
     {
       bbs[i]->frequency = (bbs[i]->frequency * num) / den;
-      bbs[i]->count = (bbs[i]->count * num) / den;
+      bbs[i]->count = RDIV (bbs[i]->count * num, den);
       for (e = bbs[i]->succ; e; e = e->succ_next)
        e->count = (e->count * num) /den;
     }
@@ -812,7 +814,6 @@ can_duplicate_loop_p (struct loop *loop)
   return ret;
 }
 
-#define RDIV(X,Y) (((X) + (Y) / 2) / (Y))
 
 /* Duplicates body of LOOP to given edge E NDUPL times.  Takes care of updating
    LOOPS structure and dominators.  E's destination must be LOOP header for