re PR rtl-optimization/69102 (ICE: in move_op_ascend, at sel-sched.c:6138 with -fsele...
authorAndrey Belevantsev <abel@ispras.ru>
Mon, 21 Mar 2016 07:52:05 +0000 (10:52 +0300)
committerAndrey Belevantsev <abel@gcc.gnu.org>
Mon, 21 Mar 2016 07:52:05 +0000 (10:52 +0300)
gcc/
        PR rtl-optimization/69102
        * sched-deps.c (sched_analyze_insn): Do not set last_args_size field
        when we have a readonly dependency context.

testsuite/

        PR rtl-optimization/69102
        * gcc.c-torture/compile/pr69102.c: New test.

From-SVN: r234359

gcc/ChangeLog
gcc/sched-deps.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr69102.c [new file with mode: 0644]

index 6f52c2d2787d4972415c4060a3291db705bec15c..f4431a02bdb88b15397c9c172017ac6c10060011 100644 (file)
@@ -1,3 +1,9 @@
+2016-03-21  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/69102
+       * sched-deps.c (sched_analyze_insn): Do not set last_args_size field
+       when we have a readonly dependency context. 
+
 2016-03-18  Jeff Law  <law@redhat.com>
 
        PR rtl-optimization/70263
index 5cc8e634427cecb0e7d57e8a322c937776251438..8f3a124a8fad518b6920fb041f9a0b08fe848d3b 100644 (file)
@@ -3495,7 +3495,8 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
     {
       if (deps->last_args_size)
        add_dependence (insn, deps->last_args_size, REG_DEP_OUTPUT);
-      deps->last_args_size = insn;
+      if (!deps->readonly)
+       deps->last_args_size = insn;
     }
 }
 
index c043b4b8ec3d394d45debe4687674ff69390395f..ab1b25a876b0d1e83a7ce7965e62e2cf7afe023b 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-21  Andrey Belevantsev  <abel@ispras.ru>
+
+       PR rtl-optimization/69102
+       * gcc.c-torture/compile/pr69102.c: New test.
+
 2016-03-18  Jeff Law  <law@redhat.com>
 
        PR rtl-optimization/70263
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr69102.c b/gcc/testsuite/gcc.c-torture/compile/pr69102.c
new file mode 100644 (file)
index 0000000..b1328ca
--- /dev/null
@@ -0,0 +1,21 @@
+/* { dg-options "-Og -fPIC -fschedule-insns2 -fselective-scheduling2 -fno-tree-fre --param=max-sched-extend-regions-iters=10" } */
+void bar (unsigned int);
+
+void
+foo (void)
+{
+  char buf[1] = { 3 };
+  const char *p = buf;
+  const char **q = &p;
+  unsigned int ch;
+  switch (**q)
+    {
+    case 1:  ch = 5; break;
+    case 2:  ch = 4; break;
+    case 3:  ch = 3; break;
+    case 4:  ch = 2; break;
+    case 5:  ch = 1; break;
+    default: ch = 0; break;
+    }
+  bar (ch);
+}