diff options
author | mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-08-06 06:20:02 +0000 |
---|---|---|
committer | mkuvyrkov <mkuvyrkov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-08-06 06:20:02 +0000 |
commit | 42de5f34d66faf2fab489a9beb4058256bf72fe7 (patch) | |
tree | db17d5ec271eddbf73c917519bc74a8090394ccb /gcc/sched-rgn.c | |
parent | 9dc9ee8208587894de4bb7377f8a89d24b99e1a9 (diff) | |
download | gcc-42de5f34d66faf2fab489a9beb4058256bf72fe7.tar.gz |
* sched-rgn.c (new_ready): Check if instruction can be
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
Diffstat (limited to 'gcc/sched-rgn.c')
-rw-r--r-- | gcc/sched-rgn.c | 18 |
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); |