aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Law <law@gcc.gnu.org>2019-03-25 17:33:36 -0600
committerJeff Law <law@gcc.gnu.org>2019-03-25 17:33:36 -0600
commitb9b0386a3e64702fe19180707613fbb6187a27b8 (patch)
tree19da2bc05717221c2748d84150167c1a782aec09
parent0c9992c8b5e07e7295c8be65586a2a82e7f191e5 (diff)
downloadgcc-b9b0386a3e64702fe19180707613fbb6187a27b8.zip
gcc-b9b0386a3e64702fe19180707613fbb6187a27b8.tar.gz
gcc-b9b0386a3e64702fe19180707613fbb6187a27b8.tar.bz2
re PR rtl-optimization/88347 (ICE in begin_move_insn, at sched-ebb.c:175)
PR rtl-optimization/88347 PR rtl-optimization/88423 * sched-deps.c (sched_analyze_insn): Take into account that for tablejumps the barrier appears after a label and a jump_table_data. * gcc.c-torture/compile/pr88347.c: New test. * gcc.c-torture/compile/pr88423.c: New test. From-SVN: r269928
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/sched-deps.c5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr88347.c4
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr88423.c5
5 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 18682f3..457b598 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2019-03-25 Alexander Monakov <amonakov@ispras.ru>
+
+ PR rtl-optimization/88347
+ PR rtl-optimization/88423
+ * sched-deps.c (sched_analyze_insn): Take into account that for
+ tablejumps the barrier appears after a label and a jump_table_data.
+
2019-03-25 Martin Sebor <msebor@redhat.com>
PR c/89812
diff --git a/gcc/sched-deps.c b/gcc/sched-deps.c
index 6cf4caf..eda0c66 100644
--- a/gcc/sched-deps.c
+++ b/gcc/sched-deps.c
@@ -3005,6 +3005,11 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
if (JUMP_P (insn))
{
rtx_insn *next = next_nonnote_nondebug_insn (insn);
+ /* ??? For tablejumps, the barrier may appear not immediately after
+ the jump, but after a label and a jump_table_data insn. */
+ if (next && LABEL_P (next) && NEXT_INSN (next)
+ && JUMP_TABLE_DATA_P (NEXT_INSN (next)))
+ next = NEXT_INSN (NEXT_INSN (next));
if (next && BARRIER_P (next))
reg_pending_barrier = MOVE_BARRIER;
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b4b1159..ddd5f50 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2019-03-25 David Malcolm <dmalcolm@redhat.com>
+
+ PR rtl-optimization/88347
+ PR rtl-optimization/88423
+ * gcc.c-torture/compile/pr88347.c: New test.
+ * gcc.c-torture/compile/pr88423.c: New test.
+
2019-03-25 Martin Sebor <msebor@redhat.com>
PR c/89812
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr88347.c b/gcc/testsuite/gcc.c-torture/compile/pr88347.c
new file mode 100644
index 0000000..4e9b438
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr88347.c
@@ -0,0 +1,4 @@
+/* { dg-do compile { target { powerpc-*-* powerpcle-*-* } } } */
+/* { dg-options "-mcpu=603e -fsched-stalled-insns -fsched2-use-superblocks -fschedule-insns2 -fno-dce -fno-guess-branch-probability --param max-cse-insns=4" } */
+
+#include "../../gcc.target/powerpc/ppc-switch-2.c"
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr88423.c b/gcc/testsuite/gcc.c-torture/compile/pr88423.c
new file mode 100644
index 0000000..4948817
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/compile/pr88423.c
@@ -0,0 +1,5 @@
+/* { dg-do compile { target { i?86-*-* x86_64-*-* } } } */
+/* { dg-options "-march=skylake -fPIC -fsched2-use-superblocks -fno-if-conversion" } */
+/* { dg-require-effective-target fpic } */
+
+#include "../../gcc.dg/20030309-1.c"