aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-01-16 20:24:07 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2014-01-16 20:24:07 +0100
commita611d7cb08d5b44fd0f2f8118f8083263a6a06df (patch)
tree55eea340d0568b1c6e05681399862e077b21fe12 /gcc
parent2af4ea89e5630063b961c4d026412bb7d5aa8832 (diff)
downloadgcc-a611d7cb08d5b44fd0f2f8118f8083263a6a06df.zip
gcc-a611d7cb08d5b44fd0f2f8118f8083263a6a06df.tar.gz
gcc-a611d7cb08d5b44fd0f2f8118f8083263a6a06df.tar.bz2
re PR target/59839 (i686 AVX2 gather intrinsic not compiling with -O0 on mingw w64)
PR target/59839 * config/i386/i386.c (ix86_expand_builtin): If target doesn't satisfy operand 0 predicate for gathers, use a new pseudo as subtarget. * gcc.target/i386/pr59839.c: New test. From-SVN: r206682
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c4
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/gcc.target/i386/pr59839.c12
4 files changed, 25 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ca1f85c..098e0c1 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2014-01-16 Jakub Jelinek <jakub@redhat.com>
+
+ PR target/59839
+ * config/i386/i386.c (ix86_expand_builtin): If target doesn't
+ satisfy operand 0 predicate for gathers, use a new pseudo as
+ subtarget.
+
2014-01-16 Vladimir Makarov <vmakarov@redhat.com>
PR middle-end/59609
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 73c5a86..df408ae 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -35511,7 +35511,9 @@ addcarryx:
mode4 = insn_data[icode].operand[5].mode;
if (target == NULL_RTX
- || GET_MODE (target) != insn_data[icode].operand[0].mode)
+ || GET_MODE (target) != insn_data[icode].operand[0].mode
+ || !insn_data[icode].operand[0].predicate (target,
+ GET_MODE (target)))
subtarget = gen_reg_rtx (insn_data[icode].operand[0].mode);
else
subtarget = target;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b874c57..6482650 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2014-01-16 Jakub Jelinek <jakub@redhat.com>
+ PR target/59839
+ * gcc.target/i386/pr59839.c: New test.
+
PR debug/54694
* gcc.target/i386/pr9771-1.c (main): Rename to...
(real_main): ... this. Add __asm name "main".
diff --git a/gcc/testsuite/gcc.target/i386/pr59839.c b/gcc/testsuite/gcc.target/i386/pr59839.c
new file mode 100644
index 0000000..dfb8945
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr59839.c
@@ -0,0 +1,12 @@
+/* PR target/59839 */
+/* { dg-do compile } */
+/* { dg-options "-O0 -mavx2" } */
+
+#include <x86intrin.h>
+
+void
+test (const float *x)
+{
+ __m256i i = _mm256_set1_epi32 (1);
+ __m256 d = _mm256_i32gather_ps (x, i, 1);
+}