From 79b57d18c65e5b182055e8475aab98296dafc5c6 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 14 Mar 2016 23:19:32 +0100 Subject: [PATCH] re PR middle-end/70219 (ICE: in delete_move_and_clobber, at lra-constraints.c:5864 with -O2) PR middle-end/70219 * lra-constraints.c (delete_move_and_clobber): Change assertion to also allow dregno == 0. * gcc.dg/pr70219.c: New test. From-SVN: r234201 --- gcc/ChangeLog | 6 ++++++ gcc/lra-constraints.c | 2 +- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr70219.c | 18 ++++++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/pr70219.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b9fba23890a..a5ada00bbc3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-03-14 Jakub Jelinek + + PR middle-end/70219 + * lra-constraints.c (delete_move_and_clobber): Change assertion + to also allow dregno == 0. + 2016-03-14 Richard Henderson PR tree-opt/68714 diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 171ed657c85..ced9e12b0f1 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -5868,7 +5868,7 @@ delete_move_and_clobber (rtx_insn *insn, int dregno) rtx_insn *prev_insn = PREV_INSN (insn); lra_set_insn_deleted (insn); - lra_assert (dregno > 0); + lra_assert (dregno >= 0); if (prev_insn != NULL && NONDEBUG_INSN_P (prev_insn) && GET_CODE (PATTERN (prev_insn)) == CLOBBER && dregno == get_regno (XEXP (PATTERN (prev_insn), 0))) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b2fdd0b2383..f5af12b809c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-03-14 Jakub Jelinek + + PR middle-end/70219 + * gcc.dg/pr70219.c: New test. + 2016-03-14 Bernd Schmidt PR target/70083 diff --git a/gcc/testsuite/gcc.dg/pr70219.c b/gcc/testsuite/gcc.dg/pr70219.c new file mode 100644 index 00000000000..bbdbe67c735 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr70219.c @@ -0,0 +1,18 @@ +/* PR middle-end/70219 */ +/* { dg-do compile { target int128 } } */ +/* { dg-options "-O1 -w -Wno-psabi" } */ + +typedef int B __attribute__ ((vector_size (32))); +typedef int D __attribute__ ((vector_size (32))); +typedef long E __attribute__ ((vector_size (32))); +typedef __int128 F; +typedef __int128 G __attribute__ ((vector_size (32))); + +F +foo (int a, unsigned b, F c, B d, G e, B f, D g, E h, G i) +{ + b /= c; + e /= (G) ~d; + h -= (E){ g[4], e[1], 64, ~f[1] }; + return b + e[1] + h[0] + h[1] + i[1]; +}