aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2010-12-24 17:19:23 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2010-12-24 17:19:23 +0300
commiteb277bf19cea73ab2ca031fdb650013d666529f6 (patch)
treeb24772c1516cd7beda2445712e3eb95b215c1519
parent07818af47b961b903aee005f6771e14730d3e003 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/sel-sched-ir.c3
-rw-r--r--gcc/sel-sched.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/pr47036.C10
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;}));
+}
+