* profile.c (compute_branch_probabilities): Use REG_BR_PROB notes
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Sep 2004 23:21:07 +0000 (23:21 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 25 Sep 2004 23:21:07 +0000 (23:21 +0000)
when re-constructing profile previously invalidated by loop.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@88115 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/profile.c

index 0ba761f..7cd05ad 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-26  Jan Hubicka  <jh@suse.cz>
+
+       * profile.c (compute_branch_probabilities): Use REG_BR_PROB notes
+       when re-constructing profile previously invalidated by loop.
+
 2004-09-25  Dale Johannesen  <dalej@apple.com>
 
        * tree-gimple.c:  Move GIMPLE definition...
index 3f48be6..39d0493 100644 (file)
@@ -557,12 +557,24 @@ compute_branch_probabilities (void)
              num_branches++;
            }
        }
-      /* Otherwise distribute the probabilities evenly so we get sane
-        sum.  Use simple heuristics that if there are normal edges,
+      /* Otherwise try to preserve the existing REG_BR_PROB probabilities
+         tree based profile guessing put into code.  */
+      else if (profile_status == PROFILE_ABSENT
+              && !ir_type ()
+              && bb->succ && bb->succ->succ_next
+              && (note = find_reg_note (BB_END (bb), REG_BR_PROB, 0)))
+       {
+         int prob = INTVAL (XEXP (note, 0));
+
+         BRANCH_EDGE (bb)->probability = prob;
+         FALLTHRU_EDGE (bb)->probability = REG_BR_PROB_BASE - prob;
+       }
+      /* As a last resolt, distribute the probabilities evenly.
+        Use simple heuristics that if there are normal edges,
         give all abnormals frequency of 0, otherwise distribute the
         frequency over abnormals (this is the case of noreturn
         calls).  */
-      else
+      else if (profile_status == PROFILE_ABSENT)
        {
          int total = 0;