From 772a1b15d57f0c035188f85cf42641b217eef9eb Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Fri, 16 Aug 2019 13:17:04 +0000 Subject: [PATCH] re PR target/91469 (ICE in extract_insn, at recog.c:2310 since r274481) 2019-08-16 Richard Biener PR target/91469 * config/i386/i386-features.c (general_scalar_chain::replace_with_subreg): Stop at memory operands. * gcc.target/i386/pr91469-1.c: New testcase. * gcc.target/i386/pr91469-2.c: Likewise. From-SVN: r274570 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386-features.c | 4 ++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.target/i386/pr91469-1.c | 17 +++++++++++++++++ gcc/testsuite/gcc.target/i386/pr91469-2.c | 11 +++++++++++ 5 files changed, 44 insertions(+) create mode 100644 gcc/testsuite/gcc.target/i386/pr91469-1.c create mode 100644 gcc/testsuite/gcc.target/i386/pr91469-2.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6bd5e9b370b..e2e5efda7b2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-08-16 Richard Biener + + PR target/91469 + * config/i386/i386-features.c + (general_scalar_chain::replace_with_subreg): Stop at memory operands. + 2019-08-16 Kyrylo Tkachov PR other/91255 diff --git a/gcc/config/i386/i386-features.c b/gcc/config/i386/i386-features.c index cead2077e48..c4a3d302eef 100644 --- a/gcc/config/i386/i386-features.c +++ b/gcc/config/i386/i386-features.c @@ -613,6 +613,10 @@ general_scalar_chain::replace_with_subreg (rtx x, rtx reg, rtx new_reg) if (x == reg) return gen_rtx_SUBREG (vmode, new_reg, 0); + /* But not in memory addresses. */ + if (MEM_P (x)) + return x; + const char *fmt = GET_RTX_FORMAT (GET_CODE (x)); int i, j; for (i = GET_RTX_LENGTH (GET_CODE (x)) - 1; i >= 0; i--) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 08af213e05c..74afb384511 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2019-08-16 Richard Biener + + PR target/91469 + * gcc.target/i386/pr91469-1.c: New testcase. + * gcc.target/i386/pr91469-2.c: Likewise. + 2019-08-16 Mark Eggleston * gfortran.dg/auto_in_equiv_1.f90: New test. diff --git a/gcc/testsuite/gcc.target/i386/pr91469-1.c b/gcc/testsuite/gcc.target/i386/pr91469-1.c new file mode 100644 index 00000000000..589b72d441b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91469-1.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-funroll-loops -O2 -fno-gcse -mavx512vbmi -fno-ivopts -mstv" } */ + +int a, b, e; +long long c; +int d[6]; + +void fn1() { + int i; + unsigned f; + c = a; + f = i; + for (; i < b; i++) + if (d[i] > f) + f = d[i]; + e = f; +} diff --git a/gcc/testsuite/gcc.target/i386/pr91469-2.c b/gcc/testsuite/gcc.target/i386/pr91469-2.c new file mode 100644 index 00000000000..4254aaa4821 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr91469-2.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ +/* { dg-options "-Os --param scev-max-expr-size=0 -mavx512vnni -funroll-all-loops" } */ + +int a, b, c, d; +int *e; +void fn1() +{ + b = c > 0 ? c : 0; + d += e[b]; + a = d > 0 ? d : 0; +}