diff options
author | Alexander Monakov <amonakov@ispras.ru> | 2010-12-24 17:19:23 +0300 |
---|---|---|
committer | Alexander Monakov <amonakov@gcc.gnu.org> | 2010-12-24 17:19:23 +0300 |
commit | eb277bf19cea73ab2ca031fdb650013d666529f6 (patch) | |
tree | b24772c1516cd7beda2445712e3eb95b215c1519 | |
parent | 07818af47b961b903aee005f6771e14730d3e003 (diff) | |
download | gcc-eb277bf19cea73ab2ca031fdb650013d666529f6.zip gcc-eb277bf19cea73ab2ca031fdb650013d666529f6.tar.gz gcc-eb277bf19cea73ab2ca031fdb650013d666529f6.tar.bz2 |
re PR rtl-optimization/47036 (ICE: in move_cond_jump, at sel-sched.c:4901 with -fschedule-insns -fselective-scheduling -fno-dce)
PR rtl-optimization/47036
* sel-sched-ir.c (fallthru_bb_of_jump): Remove special support for
unconditional jumps.
* sel-sched.c (moveup_expr): Ditto.
testsuite:
* g++.dg/opt/pr47036.C: New.
From-SVN: r168225
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/sel-sched-ir.c | 3 | ||||
-rw-r--r-- | gcc/sel-sched.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/opt/pr47036.C | 10 |
5 files changed, 24 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 83ad1a9..26762f2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-12-24 Alexander Monakov <amonakov@ispras.ru> + + PR rtl-optimization/47036 + * sel-sched-ir.c (fallthru_bb_of_jump): Remove special support for + unconditional jumps. + * sel-sched.c (moveup_expr): Ditto. + 2010-12-23 Sebastian Pop <sebastian.pop@amd.com> Richard Guenther <rguenther@suse.de> diff --git a/gcc/sel-sched-ir.c b/gcc/sel-sched-ir.c index 43619d9..b88dad1 100644 --- a/gcc/sel-sched-ir.c +++ b/gcc/sel-sched-ir.c @@ -4441,9 +4441,6 @@ fallthru_bb_of_jump (rtx jump) if (!JUMP_P (jump)) return NULL; - if (any_uncondjump_p (jump)) - return single_succ (BLOCK_FOR_INSN (jump)); - if (!any_condjump_p (jump)) return NULL; diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index edd6cb9..791adf1 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -2171,10 +2171,8 @@ moveup_expr (expr_t expr, insn_t through_insn, bool inside_insn_group, || ! in_current_region_p (fallthru_bb)) return MOVEUP_EXPR_NULL; - /* And it should be mutually exclusive with through_insn, or - be an unconditional jump. */ - if (! any_uncondjump_p (insn) - && ! sched_insns_conditions_mutex_p (insn, through_insn) + /* And it should be mutually exclusive with through_insn. */ + if (! sched_insns_conditions_mutex_p (insn, through_insn) && ! DEBUG_INSN_P (through_insn)) return MOVEUP_EXPR_NULL; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bd527d7..2cc045b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-12-24 Alexander Monakov <amonakov@ispras.ru> + + PR rtl-optimization/47036 + * g++.dg/opt/pr47036.C: New. + 2010-12-24 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/31821 diff --git a/gcc/testsuite/g++.dg/opt/pr47036.C b/gcc/testsuite/g++.dg/opt/pr47036.C new file mode 100644 index 0000000..d6d5adc --- /dev/null +++ b/gcc/testsuite/g++.dg/opt/pr47036.C @@ -0,0 +1,10 @@ +// { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } } +// { dg-options "-fschedule-insns -fselective-scheduling -fno-dce" } + + +void foo () +{ + for (;;) + for (;;({break;})); +} + |