From 6598bb55e90fe000eee237d3e7eb7b70c6d5d205 Mon Sep 17 00:00:00 2001 From: Andrey Belevantsev Date: Tue, 15 Mar 2016 18:42:07 +0300 Subject: [PATCH] re PR rtl-optimization/69032 (ICE: in cfg_preds_1, at sel-sched-ir.c:4809 with -fsched-pressure -fsel-sched-pipelining -fselective-scheduling) gcc/ PR rtl-optimization/69032 * sel-sched-ir.c (get_seqno_by_preds): Include both insn and head when looping backwards over basic block insns. testsuite/ PR rtl-optimization/69032 * gcc.dg/pr69032.c: New test. From-SVN: r234219 --- gcc/ChangeLog | 12 ++++++++++++ gcc/sel-sched-ir.c | 9 ++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr69032.c | 11 +++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr69032.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ac70e8ac8d9..de099d671b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2016-03-15 Andrey Belevantsev + + PR rtl-optimization/69032 + * sel-sched-ir.c (get_seqno_by_preds): Include both insn and head when + looping backwards over basic block insns. + +2016-03-15 Andrey Belevantsev + + PR target/66660 + * sel-sched-ir.c (merge_expr): Avoid changing the speculative pattern + to non-speculative when propagating trap bits. + 2016-03-15 Andrey Belevantsev PR rtl-optimization/63384 diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 9507853ba42..83f813aa571 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -4106,11 +4106,14 @@ get_seqno_by_preds (rtx_insn *insn) insn_t *preds; int n, i, seqno; - while (tmp != head) + /* Loop backwards from INSN to HEAD including both. */ + while (1) { - tmp = PREV_INSN (tmp); if (INSN_P (tmp)) - return INSN_SEQNO (tmp); + return INSN_SEQNO (tmp); + if (tmp == head) + break; + tmp = PREV_INSN (tmp); } cfg_preds (bb, &preds, &n); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9259910cb5e..44f57339d79 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-15 Andrey Belevantsev + + PR rtl-optimization/69032 + * gcc.dg/pr69032.c: New test. + 2016-03-15 Andrey Belevantsev PR rtl-optimization/63384 diff --git a/gcc/testsuite/gcc.dg/pr69032.c b/gcc/testsuite/gcc.dg/pr69032.c new file mode 100644 index 00000000000..e0925cd8c56 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr69032.c @@ -0,0 +1,11 @@ +/* { dg-do compile { target powerpc*-*-* ia64-*-* i?86-*-* x86_64-*-* } } */ +/* { dg-options "-O2 -fsched-pressure -fsel-sched-pipelining -fselective-scheduling" } */ + +void foo (long long i) +{ + while (i != -1) + { + ++i; + __asm__ (""); + } +} -- 2.30.2