aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2014-10-01 22:41:05 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2014-10-01 22:41:05 +0200
commit0aa789a7315d60c5b20b8caebd7717d4595f67cc (patch)
tree42d3661aac4c13bc049c2a39fffc78ea2ee8eb44 /gcc
parent7605d4dcdade606a9dd61801d700b92ac84ee05a (diff)
downloadgcc-0aa789a7315d60c5b20b8caebd7717d4595f67cc.zip
gcc-0aa789a7315d60c5b20b8caebd7717d4595f67cc.tar.gz
gcc-0aa789a7315d60c5b20b8caebd7717d4595f67cc.tar.bz2
i386.c (expand_vec_perm_vperm2f128): Canonicalize dfirst permutation.
* config/i386/i386.c (expand_vec_perm_vperm2f128): Canonicalize dfirst permutation. From-SVN: r215777
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/i386/i386.c5
2 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 04637b0..54b6b0b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
2014-10-01 Jakub Jelinek <jakub@redhat.com>
+ * config/i386/i386.c (expand_vec_perm_vperm2f128): Canonicalize
+ dfirst permutation.
+
PR target/63428
* config/i386/i386.c (expand_vec_perm_pshufb): Fix up rperm[0]
argument to avx2_permv2ti.
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 84484bb..b40852d 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -43874,15 +43874,16 @@ expand_vec_perm_vperm2f128 (struct expand_vec_perm_d *d)
dfirst.perm[i] = (i & (nelt2 - 1))
+ ((perm >> (2 * (i >= nelt2))) & 3) * nelt2;
+ canonicalize_perm (&dfirst);
ok = expand_vec_perm_1 (&dfirst);
gcc_assert (ok);
/* And dsecond is some single insn shuffle, taking
d->op0 and result of vperm2f128 (if perm < 16) or
d->op1 and result of vperm2f128 (otherwise). */
- dsecond.op1 = dfirst.target;
if (perm >= 16)
- dsecond.op0 = dfirst.op1;
+ dsecond.op0 = dsecond.op1;
+ dsecond.op1 = dfirst.target;
ok = expand_vec_perm_1 (&dsecond);
gcc_assert (ok);