aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2019-04-24 11:27:14 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2019-04-24 11:27:14 +0200
commitde6ae2ce078798024e647b8cc8afeca9d337817a (patch)
tree5f4786b7a004f2990e99bc2d61d73567d5bcb29b /gcc
parent4a475b3fbbf21bc7facaacb11051a832a5085733 (diff)
downloadgcc-de6ae2ce078798024e647b8cc8afeca9d337817a.zip
gcc-de6ae2ce078798024e647b8cc8afeca9d337817a.tar.gz
gcc-de6ae2ce078798024e647b8cc8afeca9d337817a.tar.bz2
re PR target/90187 (ICE in extract_insn, at recog.c:2304 x86_64)
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++.target/i386/pr90187.C: New test. From-SVN: r270537
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/i386/i386.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.target/i386/pr90187.C15
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e098504..ba06d65 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
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.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 498a35d..191f570 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -23712,6 +23712,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);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 19972ed..42e7516 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-04-24 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/90187
+ * g++.target/i386/pr90187.C: New test.
+
2019-04-24 Iain Buclaw <ibuclaw@gdcproject.org>
* gdc.test/README.gcc: New file.
diff --git a/gcc/testsuite/g++.target/i386/pr90187.C b/gcc/testsuite/g++.target/i386/pr90187.C
new file mode 100644
index 0000000..ed9e9fe
--- /dev/null
+++ b/gcc/testsuite/g++.target/i386/pr90187.C
@@ -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];
+}