OSDN Git Service

* sched-rgn.c (new_ready): Check if instruction can be
authormkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Aug 2008 06:20:02 +0000 (06:20 +0000)
committermkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 6 Aug 2008 06:20:02 +0000 (06:20 +0000)
speculatively scheduled before attempting speculation.
(debug_rgn_dependencies): Remove wrongful assert.

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

gcc/ChangeLog
gcc/sched-rgn.c

index b1c03e6..625b896 100644 (file)
@@ -1,3 +1,9 @@
+2008-08-06  Maxim Kuvyrkov  <maxim@codesourcery.com>
+
+       * sched-rgn.c (new_ready): Check if instruction can be
+       speculatively scheduled before attempting speculation.
+       (debug_rgn_dependencies): Remove wrongful assert.
+
 2008-08-05  Bob Wilson  <bob.wilson@acm.org>
 
        * config/xtensa/t-xtensa: Remove dependency for gt-xtensa.h.
index 28f5283..9304536 100644 (file)
@@ -2108,9 +2108,22 @@ new_ready (rtx next, ds_t ts)
                 But we possibly can handle that with control speculation.  */
              && (current_sched_info->flags & DO_SPECULATION)
              && (spec_info->mask & BEGIN_CONTROL))
-            /* Here we got new control-speculative instruction.  */
-            ts = set_dep_weak (ts, BEGIN_CONTROL, MAX_DEP_WEAK);
+           {
+             ds_t new_ds;
+
+             /* Add control speculation to NEXT's dependency type.  */
+             new_ds = set_dep_weak (ts, BEGIN_CONTROL, MAX_DEP_WEAK);
+
+             /* Check if NEXT can be speculated with new dependency type.  */
+             if (sched_insn_is_legitimate_for_speculation_p (next, new_ds))
+               /* Here we got new control-speculative instruction.  */
+               ts = new_ds;
+             else
+               /* NEXT isn't ready yet.  */
+               ts = (ts & ~SPECULATIVE) | HARD_DEP;
+           }
          else
+           /* NEXT isn't ready yet.  */
             ts = (ts & ~SPECULATIVE) | HARD_DEP;
        }
     }
@@ -2584,7 +2597,6 @@ debug_rgn_dependencies (int from_bb)
     {
       rtx head, tail;
 
-      gcc_assert (EBB_FIRST_BB (bb) == EBB_LAST_BB (bb));
       get_ebb_head_tail (EBB_FIRST_BB (bb), EBB_LAST_BB (bb), &head, &tail);
       fprintf (sched_dump, "\n;;   --- Region Dependences --- b %d bb %d \n",
               BB_TO_BLOCK (bb), bb);