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
This commit is contained in:
Alexander Ivchenko 2012-05-25 13:03:18 +00:00 committed by Kirill Yukhin
parent c7046906c3
commit 0ba89f9bb1
2 changed files with 12 additions and 10 deletions

View File

@ -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

View File

@ -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)