i386.c (ix86_expand_vec_perm): In merge_two use mode SUBREG of operands[0] as target.
authorJakub Jelinek <jakub@redhat.com>
Tue, 18 Oct 2011 21:27:40 +0000 (23:27 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 18 Oct 2011 21:27:40 +0000 (23:27 +0200)
commitb6f9a04a80187b976b37bbf1afb0c8e2eefa943d
treede23d6e3c334ccca26f466c22e7d5d134ca8a089
parente9d662bb75152bb63ada99d46d30d98197a82160
i386.c (ix86_expand_vec_perm): In merge_two use mode SUBREG of operands[0] as target.

* config/i386/i386.c (ix86_expand_vec_perm): In merge_two use
mode SUBREG of operands[0] as target.
(valid_perm_using_mode_p): Don't ignore higher bits of d->perm.
(expand_vec_pshufb): For V8SImode vmode emit avx2_permvarv8si.
(expand_vec_perm_1): Handle identity and some broadcast
permutations.
(expand_vec_perm_interleave2): Handle also 32-byte modes, using
vperm2[fi]128 or vpunpck[lh]* followed by single insn permutation.
For d->testing_p return true earlier to avoid creating more GC
garbage.
(expand_vec_perm_vpermq_perm_1): New function.
(expand_vec_perm_vpshufb2_vpermq): For d->testing_p return true
earlier to avoid creating more GC garbage.  Fix handling of
V16HImode.  Avoid some SUBREGs in SET_DEST.
(expand_vec_perm_broadcast_1): Return false for 32-byte integer
vector modes.
(expand_vec_perm_vpshufb4_vpermq2): New function.
(ix86_expand_vec_perm_builtin_1): Call expand_vec_perm_vpermq_perm_1
and expand_vec_perm_vpshufb4_vpermq2.

From-SVN: r180169
gcc/ChangeLog
gcc/config/i386/i386.c