summaryrefslogtreecommitdiff
path: root/gcc/sel-sched.c
diff options
context:
space:
mode:
authorAndrey Belevantsev <abel@ispras.ru>2013-12-23 10:43:49 +0400
committerAndrey Belevantsev <abel@gcc.gnu.org>2013-12-23 10:43:49 +0400
commitc64476f15cea8856399295708bdbe44992beaf55 (patch)
treea768f37f242ec769d165c6d0873297c50455006b /gcc/sel-sched.c
parentd0381b3719ab73ef31cc3903d4aff7f81828585e (diff)
downloadgcc-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.c10
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,