From 11b6a02e916d12fd619e97b5117211ab097394b2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 21 Mar 2016 22:04:32 +0100 Subject: [PATCH] re PR rtl-optimization/70326 (ICE: RTL check: expected elt 3 type 'e' or 'u', have '0' (rtx note) in PATTERN, at rtl.h:1440) PR middle-end/70326 * lra.c (restore_scratches): Ignore deleted insns. * gcc.dg/pr70326.c: New test. From-SVN: r234383 --- gcc/ChangeLog | 5 +++++ gcc/lra.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr70326.c | 20 ++++++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/pr70326.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ed26c14..c98a209 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-03-21 Jakub Jelinek + + PR middle-end/70326 + * lra.c (restore_scratches): Ignore deleted insns. + 2016-03-21 Marc Glisse Jakub Jelinek diff --git a/gcc/lra.c b/gcc/lra.c index a6ce365..a724ef7 100644 --- 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6e0ab0b..e05b897 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-21 Jakub Jelinek + + PR middle-end/70326 + * gcc.dg/pr70326.c: New test. + 2016-03-21 Marc Glisse Jakub Jelinek diff --git a/gcc/testsuite/gcc.dg/pr70326.c b/gcc/testsuite/gcc.dg/pr70326.c new file mode 100644 index 0000000..8332899 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr70326.c @@ -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}; +} -- 2.7.4