diff options
author | Andrey Belevantsev <abel@ispras.ru> | 2013-12-23 10:43:49 +0400 |
---|---|---|
committer | Andrey Belevantsev <abel@gcc.gnu.org> | 2013-12-23 10:43:49 +0400 |
commit | c64476f15cea8856399295708bdbe44992beaf55 (patch) | |
tree | a768f37f242ec769d165c6d0873297c50455006b /gcc/sel-sched.c | |
parent | d0381b3719ab73ef31cc3903d4aff7f81828585e (diff) | |
download | gcc-c64476f15cea8856399295708bdbe44992beaf55.tar.gz |
re PR rtl-optimization/57422 (ICE: SIGSEGV in dominated_by_p with custom flags)
PR rtl-optimization/57422
* sel-sched.c (fill_vec_av_set): Assert that the fence insn
can always be scheduled in its current form.
From-SVN: r206174
Diffstat (limited to 'gcc/sel-sched.c')
-rw-r--r-- | gcc/sel-sched.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 5a94fda5783..29a5f1fa1f8 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -3801,6 +3801,7 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence, signed char target_available; bool is_orig_reg_p = true; int need_cycles, new_prio; + bool fence_insn_p = INSN_UID (insn) == INSN_UID (FENCE_INSN (fence)); /* Don't allow any insns other than from SCHED_GROUP if we have one. */ if (FENCE_SCHED_NEXT (fence) && insn != FENCE_SCHED_NEXT (fence)) @@ -3855,9 +3856,16 @@ fill_vec_av_set (av_set_t av, blist_t bnds, fence_t fence, if (sched_verbose >= 4) sel_print ("Expr %d has no suitable target register\n", INSN_UID (insn)); - continue; + + /* A fence insn should not get here. */ + gcc_assert (!fence_insn_p); + continue; } + /* At this point a fence insn should always be available. */ + gcc_assert (!fence_insn_p + || INSN_UID (FENCE_INSN (fence)) == INSN_UID (EXPR_INSN_RTX (expr))); + /* Filter expressions that need to be renamed or speculated when pipelining, because compensating register copies or speculation checks are likely to be placed near the beginning of the loop, |