diff options
author | Alexander Ivchenko <alexander.ivchenko@intel.com> | 2012-05-25 13:03:18 +0000 |
---|---|---|
committer | Kirill Yukhin <kyukhin@gcc.gnu.org> | 2012-05-25 13:03:18 +0000 |
commit | 0ba89f9bb102aaa94308a3a7ec266297fc9825ad (patch) | |
tree | dbe4b21d5b9bd86e6398740c1acb8df97de2c2e8 /gcc | |
parent | c7046906c3ae131726bd03f7841d4617425685d2 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | 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 <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) |