From 0ba89f9bb102aaa94308a3a7ec266297fc9825ad Mon Sep 17 00:00:00 2001 From: Alexander Ivchenko Date: Fri, 25 May 2012 13:03:18 +0000 Subject: [PATCH] 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 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 --- gcc/ChangeLog | 8 ++++++++ gcc/config/i386/i386.c | 14 ++++---------- 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 + + 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 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) -- 2.7.4