aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl@gcc.gnu.org>2010-02-26 05:18:17 -0800
committerH.J. Lu <hjl@gcc.gnu.org>2010-02-26 05:18:17 -0800
commit7ce321b3e30e47927e1b25bcc132a5c329fd7de3 (patch)
treed980a58d6ab174fac3c32f8a69ace333ef86355e
parentb55b184a4ac073855ba3637e59fe23a4c7e6ff45 (diff)
downloadgcc-7ce321b3e30e47927e1b25bcc132a5c329fd7de3.zip
gcc-7ce321b3e30e47927e1b25bcc132a5c329fd7de3.tar.gz
gcc-7ce321b3e30e47927e1b25bcc132a5c329fd7de3.tar.bz2
Correct expand_vec_perm_blend in i386.c for V8HImode merge.
gcc/ 2010-02-26 Uros Bizjak <ubizjak@gmail.com> PR target/43175 * config/i386/i386.c (expand_vec_perm_blend): Use correct operands in V8HImode subregs. Fix operand order in VEC_MERGE rtx. gcc/testsuite/ 2010-02-26 H.J. Lu <hongjiu.lu@intel.com> PR target/43175 * gcc.target/i386/vperm-v4si-2-sse4.c: New. From-SVN: r157087
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/i386/i386.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/vperm-v4si-2-sse4.c4
4 files changed, 19 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6374791..5c889ad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-02-26 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/43175
+ * config/i386/i386.c (expand_vec_perm_blend): Use correct
+ operands in V8HImode subregs. Fix operand order in VEC_MERGE
+ rtx.
+
2010-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
* doc/invoke.texi (-fvar-tracking-assignments): Fix typo.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index bb03cba..3a3b2ac 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -29144,8 +29144,8 @@ expand_vec_perm_blend (struct expand_vec_perm_d *d)
do_subreg:
vmode = V8HImode;
target = gen_lowpart (vmode, target);
- op0 = gen_lowpart (vmode, target);
- op1 = gen_lowpart (vmode, target);
+ op0 = gen_lowpart (vmode, op0);
+ op1 = gen_lowpart (vmode, op1);
break;
default:
@@ -29153,7 +29153,7 @@ expand_vec_perm_blend (struct expand_vec_perm_d *d)
}
/* This matches five different patterns with the different modes. */
- x = gen_rtx_VEC_MERGE (vmode, op0, op1, GEN_INT (mask));
+ x = gen_rtx_VEC_MERGE (vmode, op1, op0, GEN_INT (mask));
x = gen_rtx_SET (VOIDmode, target, x);
emit_insn (x);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f738c32..8c78047 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-02-26 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/43175
+ * gcc.target/i386/vperm-v4si-2-sse4.c: New.
+
2010-02-25 Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/abi/packed1.C: Expect warning on the SPARC.
diff --git a/gcc/testsuite/gcc.target/i386/vperm-v4si-2-sse4.c b/gcc/testsuite/gcc.target/i386/vperm-v4si-2-sse4.c
new file mode 100644
index 0000000..1f35b82
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/vperm-v4si-2-sse4.c
@@ -0,0 +1,4 @@
+/* { dg-do run } */
+/* { dg-require-effective-target sse4 } */
+/* { dg-options "-O -msse4" } */
+#include "vperm-v4si-2.c"