summaryrefslogtreecommitdiff
path: root/gcc/sched-rgn.c
diff options
context:
space:
mode:
authorMaxim Kuvyrkov <maxim@codesourcery.com>2008-08-06 06:20:02 +0000
committerMaxim Kuvyrkov <mkuvyrkov@gcc.gnu.org>2008-08-06 06:20:02 +0000
commit07da1cfcf6b220900e88b457e2bb23ed9eeefac7 (patch)
treedb17d5ec271eddbf73c917519bc74a8090394ccb /gcc/sched-rgn.c
parent0f67bdf1cd15b11f00c1cc7476a33393ee77d938 (diff)
downloadgcc-07da1cfcf6b220900e88b457e2bb23ed9eeefac7.tar.gz
sched-rgn.c (new_ready): Check if instruction can be speculatively scheduled before attempting speculation.
* sched-rgn.c (new_ready): Check if instruction can be speculatively scheduled before attempting speculation. (debug_rgn_dependencies): Remove wrongful assert. From-SVN: r138757
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r--gcc/sched-rgn.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/gcc/sched-rgn.c b/gcc/sched-rgn.c
index 28f528302ff..9304536b580 100644
--- a/gcc/sched-rgn.c
+++ b/gcc/sched-rgn.c
@@ -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);