]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/90187 (ICE in extract_insn, at recog.c:2304 x86_64)
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 12:39:50 +0000 (14:39 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 12:39:50 +0000 (14:39 +0200)
Backported from mainline
2019-04-24  Jakub Jelinek  <jakub@redhat.com>

PR target/90187
* config/i386/i386.c (ix86_expand_sse_fp_minmax): Force if_true into
a register if both if_true and if_false are MEMs.

* g++.dg/opt/pr90187.C: New test.

From-SVN: r275152

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/opt/pr90187.C [new file with mode: 0644]

index 7b21d88fdecb68537be2d4315d9ecdd3100cd94c..3662abf12c514255f9ded7f9c65c544a4515cdd5 100644 (file)
@@ -3,6 +3,10 @@
        Backported from mainline
        2019-04-24  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/90187
+       * config/i386/i386.c (ix86_expand_sse_fp_minmax): Force if_true into
+       a register if both if_true and if_false are MEMs.
+
        PR tree-optimization/90208
        * tree-cfg.c (remove_bb): Move forced labels from removed bbs
        after labels of new_bb, not before them.
index 1f4029c7a6cd1ed5d96ac38a7a91ebbd607e570c..3658759a62e9f1d2270314817e3e9b8677b6eb3d 100644 (file)
@@ -24147,6 +24147,8 @@ ix86_expand_sse_fp_minmax (rtx dest, enum rtx_code code, rtx cmp_op0,
   else
     {
       code = is_min ? SMIN : SMAX;
+      if (MEM_P (if_true) && MEM_P (if_false))
+       if_true = force_reg (mode, if_true);
       tmp = gen_rtx_fmt_ee (code, mode, if_true, if_false);
     }
 
index 4bbe0235378022f0389636e5c061f2651678806a..0a714e3102929acd870ba8914bb04983bbf41bbb 100644 (file)
@@ -3,6 +3,9 @@
        Backported from mainline
        2019-04-24  Jakub Jelinek  <jakub@redhat.com>
 
+       PR target/90187
+       * g++.dg/opt/pr90187.C: New test.
+
        PR tree-optimization/90208
        * gcc.dg/tsan/pr90208-2.c: New test.
 
diff --git a/gcc/testsuite/g++.dg/opt/pr90187.C b/gcc/testsuite/g++.dg/opt/pr90187.C
new file mode 100644 (file)
index 0000000..ed9e9fe
--- /dev/null
@@ -0,0 +1,15 @@
+// PR target/90187
+// { dg-do compile }
+// { dg-options "-Ofast -ffloat-store" }
+
+double a[64];
+double *foo (void);
+
+void
+bar (int x, const double *y)
+{
+  int i;
+  for (i = 0; i < x; i++)
+    if (y[i] < a[i])
+      a[i] = y[i];
+}