* tree-cfg.c (thread_jumps): Fix updating of the profile.
authorJan Hubicka <jh@suse.cz>
Sat, 18 Sep 2004 21:54:53 +0000 (23:54 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Sat, 18 Sep 2004 21:54:53 +0000 (21:54 +0000)
From-SVN: r87709

gcc/ChangeLog
gcc/tree-cfg.c

index 64a20e65d9a2f814de4071d20df28759eb440a19..36183a7d5a5048ee4475d0d8daafdbbefedf8f3f 100644 (file)
@@ -1,5 +1,7 @@
 2004-09-18  Jan Hubicka  <jh@suse.cz>
 
+       * tree-cfg.c (thread_jumps):  Fix updating of the profile.
+
        * tree-optimize.c (tree_rest_of_compilation): Kill forgotten
        verify_cgraph call.
 
index 69c8b2587f766ab1729fe9427331247c57a15bd4..37b57102f63aa0fbbfad8ddada19120c5748c1b7 100644 (file)
@@ -3832,7 +3832,7 @@ static bool
 thread_jumps (void)
 {
   edge e, next, last, old;
-  basic_block bb, dest, tmp, old_dest, dom;
+  basic_block bb, dest, tmp, old_dest, curr, dom;
   tree phi;
   int arg;
   bool retval = false;
@@ -3891,15 +3891,6 @@ thread_jumps (void)
                break;
 
              bb_ann (dest)->forwardable = 0;
-             dest->frequency -= freq;
-             if (dest->frequency < 0)
-               dest->frequency = 0;
-             dest->count -= count;
-             if (dest->count < 0)
-               dest->count = 0;
-             dest->succ->count -= count;
-             if (dest->succ->count < 0)
-               dest->succ->count = 0;
            }
 
          /* Reset the forwardable marks to 1.  */
@@ -3936,6 +3927,21 @@ thread_jumps (void)
          old_dest = e->dest;
          e = redirect_edge_and_branch (e, dest);
 
+         /* Update the profile.  */
+         if (profile_status != PROFILE_ABSENT)
+           for (curr = old_dest; curr != dest; curr = curr->succ->dest)
+             {
+               curr->frequency -= freq;
+               if (curr->frequency < 0)
+                 curr->frequency = 0;
+               curr->count -= count;
+               if (curr->count < 0)
+                 curr->count = 0;
+               curr->succ->count -= count;
+               if (curr->succ->count < 0)
+                 curr->succ->count = 0;
+             }
+
          if (!old)
            {
              /* Update PHI nodes.   We know that the new argument should