From c64476f15cea8856399295708bdbe44992beaf55 Mon Sep 17 00:00:00 2001 From: Andrey Belevantsev Date: Mon, 23 Dec 2013 10:43:49 +0400 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/sel-sched.c | 10 +++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index dd3232d5a683..1e502d19f973 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-12-23 Andrey Belevantsev + + PR rtl-optimization/57422 + * sel-sched.c (fill_vec_av_set): Assert that the fence insn + can always be scheduled in its current form. + 2013-12-23 Andrey Belevantsev PR rtl-optimization/57422 diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 5a94fda5783d..29a5f1fa1f88 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, -- 2.47.2