]> gcc.gnu.org Git - gcc.git/commitdiff
predict.c (estimate_probability): Avoid duplicated predictions.
authorJan Hubicka <jh@suse.cz>
Wed, 25 Jul 2001 22:23:09 +0000 (00:23 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 25 Jul 2001 22:23:09 +0000 (22:23 +0000)
* predict.c (estimate_probability): Avoid duplicated predictions.

* loop.c (find_and_verify_loops): Grok multiple barriers.

From-SVN: r44369

gcc/ChangeLog
gcc/loop.c
gcc/predict.c

index cd1ba35f768a0f2d283d6b71d719e222fb8f866b..52a3abdfeacb155709d0c14af1201bb6be68154b 100644 (file)
@@ -1,3 +1,9 @@
+Thu Jul 26 00:19:30 CEST 2001  Jan Hubicka  <jh@suse.cz>
+
+       * predict.c (estimate_probability): Avoid duplicated predictions.
+
+       * loop.c (find_and_verify_loops): Grok multiple barriers.
+
 Wed Jul 25 18:00:05 2001  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
        * config/alpha/alpha.c (print_operand, case '/'): Don't write '/'.
index db1ec9df7a35ba273e538a01da150e2168d724ab..3584fe4c91b769717aaeae14e5ee6d85c2743d55 100644 (file)
@@ -2676,6 +2676,14 @@ find_and_verify_loops (f, loops)
                  = JUMP_LABEL (insn) ? JUMP_LABEL (insn) : get_last_insn ();
                struct loop *target_loop = uid_loop[INSN_UID (target)];
                rtx loc, loc2;
+               rtx tmp;
+
+               /* Search for possible garbage past the conditional jumps
+                  and look for latest barrier.  */
+               for (tmp = last_insn_to_move;
+                    tmp && GET_CODE (tmp) != CODE_LABEL; tmp = NEXT_INSN (tmp))
+                 if (GET_CODE (tmp) == BARRIER)
+                   last_insn_to_move = tmp;
 
                for (loc = target; loc; loc = PREV_INSN (loc))
                  if (GET_CODE (loc) == BARRIER
index 9fed0c9820c9c049388c373d4ff5fdac028099c4..de1a1417503b2b13876e2d01dcf2c4309ae94ccd 100644 (file)
@@ -255,6 +255,7 @@ estimate_probability (loops_info)
 {
   sbitmap *dominators, *post_dominators;
   int i;
+  int found_noreturn = 0;
 
   dominators = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
   post_dominators = sbitmap_vector_alloc (n_basic_blocks, n_basic_blocks);
@@ -309,9 +310,15 @@ estimate_probability (loops_info)
       /* If block has no sucessor, predict all possible paths to
          it as improbable, as the block contains a call to a noreturn
         function and thus can be executed only once.  */
-      if (bb->succ == NULL)
+      if (bb->succ == NULL && !found_noreturn)
        {
          int y;
+
+         /* ??? Postdominator claims each noreturn block to be postdominated
+            by each, so we need to run only once.  This needs to be changed
+            once postdominace algorithm is updated to say something more sane.
+            */
+         found_noreturn = 1;
          for (y = 0; y < n_basic_blocks; y++)
            if (!TEST_BIT (post_dominators[y], i))
              {
This page took 0.094885 seconds and 5 git commands to generate.