re PR target/91469 (ICE in extract_insn, at recog.c:2310 since r274481)
authorRichard Biener <rguenther@suse.de>
Fri, 16 Aug 2019 13:17:04 +0000 (13:17 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 16 Aug 2019 13:17:04 +0000 (13:17 +0000)
2019-08-16  Richard Biener  <rguenther@suse.de>

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
gcc/config/i386/i386-features.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr91469-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr91469-2.c [new file with mode: 0644]

index 6bd5e9b370ba8b9bf6adf15289a6475a124bee1b..e2e5efda7b28a9beeb1c3c3401486f2c96f9778e 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-16  Richard Biener  <rguenther@suse.de>
+
+       PR target/91469
+       * config/i386/i386-features.c
+       (general_scalar_chain::replace_with_subreg): Stop at memory operands.
+
 2019-08-16  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        PR other/91255
index cead2077e48286e804c9dbd9fce3c78ba69fd1a2..c4a3d302eef4ac1edf9469c61ec52fc5f94a134d 100644 (file)
@@ -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--)
index 08af213e05cdb0c1b3b63baf91989c5647d759ab..74afb3845112e108c16146d4e77de48c111f2fdd 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-16  Richard Biener  <rguenther@suse.de>
+
+       PR target/91469
+       * gcc.target/i386/pr91469-1.c: New testcase.
+       * gcc.target/i386/pr91469-2.c: Likewise.
+
 2019-08-16  Mark Eggleston <mark.eggleston@codethink.com>
 
        * 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 (file)
index 0000000..589b72d
--- /dev/null
@@ -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 (file)
index 0000000..4254aaa
--- /dev/null
@@ -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;
+}