re PR rtl-optimization/70326 (ICE: RTL check: expected elt 3 type 'e' or 'u', have...
authorJakub Jelinek <jakub@redhat.com>
Mon, 21 Mar 2016 21:04:32 +0000 (22:04 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 21 Mar 2016 21:04:32 +0000 (22:04 +0100)
PR middle-end/70326
* lra.c (restore_scratches): Ignore deleted insns.

* gcc.dg/pr70326.c: New test.

From-SVN: r234383

gcc/ChangeLog
gcc/lra.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr70326.c [new file with mode: 0644]

index ed26c14..c98a209 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/70326
+       * lra.c (restore_scratches): Ignore deleted insns.
+
 2016-03-21  Marc Glisse  <marc.glisse@inria.fr>
            Jakub Jelinek  <jakub@redhat.com>
 
index a6ce365..a724ef7 100644 (file)
--- a/gcc/lra.c
+++ b/gcc/lra.c
@@ -1967,6 +1967,10 @@ restore_scratches (void)
 
   for (i = 0; scratches.iterate (i, &loc); i++)
     {
+      /* Ignore already deleted insns.  */
+      if (NOTE_P (loc->insn)
+         && NOTE_KIND (loc->insn) == NOTE_INSN_DELETED)
+       continue;
       if (last != loc->insn)
        {
          last = loc->insn;
index 6e0ab0b..e05b897 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-21  Jakub Jelinek  <jakub@redhat.com>
+
+       PR middle-end/70326
+       * gcc.dg/pr70326.c: New test.
+
 2016-03-21  Marc Glisse  <marc.glisse@inria.fr>
            Jakub Jelinek  <jakub@redhat.com>
 
diff --git a/gcc/testsuite/gcc.dg/pr70326.c b/gcc/testsuite/gcc.dg/pr70326.c
new file mode 100644 (file)
index 0000000..8332899
--- /dev/null
@@ -0,0 +1,20 @@
+/* PR middle-end/70326 */
+/* { dg-do compile { target int128 } } */
+/* { dg-options "-Og -fno-dce -fno-guess-branch-probability -fschedule-insns -fno-tree-coalesce-vars -fno-tree-dce -w -Wno-psabi" } */
+
+typedef unsigned int A __attribute__ ((vector_size (32)));
+typedef unsigned __int128 B;
+typedef unsigned __int128 C __attribute__ ((vector_size (32)));
+typedef unsigned __int128 D __attribute__ ((vector_size (32)));
+
+void
+foo (B a, D b, A c, A d, C e)
+{
+  b /= (D) {11} | 1;
+  a ^= a <= 10;
+  e *= (C) d;
+  e += (C) ~b;
+  c[0] ^= c[0] <= 0x1234;
+  a = (a >> 1) | (a << 127);
+  b += (D) {45, 123};
+}