aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Ivchenko <alexander.ivchenko@intel.com>2012-05-25 13:03:18 +0000
committerKirill Yukhin <kyukhin@gcc.gnu.org>2012-05-25 13:03:18 +0000
commit0ba89f9bb102aaa94308a3a7ec266297fc9825ad (patch)
treedbe4b21d5b9bd86e6398740c1acb8df97de2c2e8
parentc7046906c3ae131726bd03f7841d4617425685d2 (diff)
downloadgcc-0ba89f9bb102aaa94308a3a7ec266297fc9825ad.zip
gcc-0ba89f9bb102aaa94308a3a7ec266297fc9825ad.tar.gz
gcc-0ba89f9bb102aaa94308a3a7ec266297fc9825ad.tar.bz2
re PR target/53435 ((ix86_expand_vec_perm) and (ix86_expand_vec_perm) do not pass arguments to avx2_permvar8s[f,i] correctly)
2012-05-21 Alexander Ivchenko <alexander.ivchenko@intel.com> PR target/53435 * config/i386/i386.c (ix86_expand_vec_perm): Use correct op. (ix86_expand_vec_perm): Use int mode instead of float. (expand_vec_perm_pshufb): Remove handling of useseless type conversion. From-SVN: r187881
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/i386/i386.c14
2 files changed, 12 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 772d897..677dcac 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2012-05-25 Alexander Ivchenko <alexander.ivchenko@intel.com>
+
+ PR target/53435
+ * config/i386/i386.c (ix86_expand_vec_perm): Use correct op.
+ (ix86_expand_vec_perm): Use int mode instead of float.
+ (expand_vec_perm_pshufb): Remove handling of useseless type
+ conversion.
+
2012-05-25 Eric Botcazou <ebotcazou@adacore.com>
PR ada/52362
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index e6f2b7e..51deb1a 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -19921,7 +19921,7 @@ ix86_expand_vec_perm (rtx operands[])
t1 = gen_reg_rtx (V8SImode);
t2 = gen_reg_rtx (V8SImode);
emit_insn (gen_avx2_permvarv8si (t1, op0, mask));
- emit_insn (gen_avx2_permvarv8si (t2, op0, mask));
+ emit_insn (gen_avx2_permvarv8si (t2, op1, mask));
goto merge_two;
}
return;
@@ -19954,10 +19954,10 @@ ix86_expand_vec_perm (rtx operands[])
case V4SFmode:
t1 = gen_reg_rtx (V8SFmode);
- t2 = gen_reg_rtx (V8SFmode);
- mask = gen_lowpart (V4SFmode, mask);
+ t2 = gen_reg_rtx (V8SImode);
+ mask = gen_lowpart (V4SImode, mask);
emit_insn (gen_avx_vec_concatv8sf (t1, op0, op1));
- emit_insn (gen_avx_vec_concatv8sf (t2, mask, mask));
+ emit_insn (gen_avx_vec_concatv8si (t2, mask, mask));
emit_insn (gen_avx2_permvarv8sf (t1, t1, t2));
emit_insn (gen_avx_vextractf128v8sf (target, t1, const0_rtx));
return;
@@ -36474,12 +36474,6 @@ expand_vec_perm_pshufb (struct expand_vec_perm_d *d)
gen_rtvec_v (GET_MODE_NUNITS (vmode), rperm));
vperm = force_reg (vmode, vperm);
- if (vmode == V8SImode && d->vmode == V8SFmode)
- {
- vmode = V8SFmode;
- vperm = gen_lowpart (vmode, vperm);
- }
-
target = gen_lowpart (vmode, d->target);
op0 = gen_lowpart (vmode, d->op0);
if (d->one_operand_p)