From e8b33739f8ce01ae1e8733d3f19ac5501d297edd Mon Sep 17 00:00:00 2001 From: jakub Date: Thu, 16 Jan 2014 19:27:28 +0000 Subject: [PATCH] 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@206684 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 ++++++++- gcc/config/i386/i386.c | 4 +++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/gcc.target/i386/pr59839.c | 12 ++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr59839.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f901d895e4..b52ea8b58de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,11 @@ -2014-01-16 Richard Henderson +2014-01-16 Jakub Jelinek + + 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 Richard Henderson PR debug/54694 * reginfo.c (global_regs_decl): Globalize. diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index cc53a6262d1..8e0185623a3 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -29772,7 +29772,9 @@ rdrand_step: 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 c009bf8a0c2..5dbd1ea8781 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2014-01-16 Jakub Jelinek + 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 00000000000..dfb89456f9d --- /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 + +void +test (const float *x) +{ + __m256i i = _mm256_set1_epi32 (1); + __m256 d = _mm256_i32gather_ps (x, i, 1); +} -- 2.11.0