* config/i386/i386-builtin-types.awk (DEF_VECTOR_TYPE): Allow an
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Nov 2009 02:39:42 +0000 (02:39 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Nov 2009 02:39:42 +0000 (02:39 +0000)
commite2b814033a963d7d9ca00933279cd15839b473b9
tree18af8f6ccd41df4d0b36a54e7ef14f7def7b2c94
parent7e911808fabbf99d37336440470c43a13ac03496
* config/i386/i386-builtin-types.awk (DEF_VECTOR_TYPE): Allow an
optional 3rd argument to define the mode.
* config/i386/i386-builtin-types.def (UQI, UHI, USI, UDI): New.
(V2UDI, V4USI, V8UHI, V16UQI): New.
(V4SF_FTYPE_V4SF_V4SF_V4SI, V2UDI_FTYPE_V2UDI_V2UDI_V2UDI,
V4USI_FTYPE_V4USI_V4USI_V4USI, V8UHI_FTYPE_V8UHI_V8UHI_V8UHI,
V16UQI_FTYPE_V16UQI_V16UQI_V16UQI): New.
* config/i386/i386-modes.def: Rearrange for double-wide AVX.
* config/i386/i386-protos.h (ix86_expand_vec_extract_even_odd): New.
* config/i386/i386.c (IX86_BUILTIN_VEC_PERM_*): New.
(bdesc_args): Add the builtin definitions to match.
(ix86_expand_builtin): Expand them.
(ix86_builtin_vectorization_cost): Rename from
x86_builtin_vectorization_cost.
(ix86_vectorize_builtin_vec_perm, struct expand_vec_perm_d,
doublesize_vector_mode, expand_vselect, expand_vselect_vconcat,
expand_vec_perm_blend, expand_vec_perm_vpermil,
expand_vec_perm_pshufb, expand_vec_perm_1,
expand_vec_perm_pshuflw_pshufhw, expand_vec_perm_palignr,
expand_vec_perm_interleave2, expand_vec_perm_pshufb2,
expand_vec_perm_even_odd_1, expand_vec_perm_even_odd,
ix86_expand_vec_perm_builtin_1, extract_vec_perm_cst,
ix86_expand_vec_perm_builtin, ix86_vectorize_builtin_vec_perm_ok,
ix86_expand_vec_extract_even_odd, TARGET_VECTORIZE_BUILTIN_VEC_PERM,
TARGET_VECTORIZE_BUILTIN_VEC_PERM_OK): New.
* sse.md (SSEMODE_EO): New.
(vec_extract_even<mode>): Use SSEMODE_EO and
ix86_expand_vec_extract_even_odd.
(vec_extract_odd<mode>): Likewise.
(mulv16qi3, vec_pack_trunc_v8hi, vec_pack_trunc_v4si,
vec_pack_trunc_v2di): Use ix86_expand_vec_extract_even_odd.

testsuite/
* gcc.dg/vect/slp-21.c: Succeed with vect_extract_even_odd too.

* lib/target-supports.exp
(check_effective_target_vect_extract_even_odd): Add x86.

* gcc.target/i386/isa-check.h: New.
* gcc.target/i386/vperm-2-2.inc, gcc.target/i386/vperm-4-1.inc,
gcc.target/i386/vperm-4-2.inc, gcc.target/i386/vperm-v2df.c,
gcc.target/i386/vperm-v2di.c, gcc.target/i386/vperm-v4sf-1.c,
gcc.target/i386/vperm-v4sf-2.c, gcc.target/i386/vperm-v4si-1.c,
gcc.target/i386/vperm-v4si-2.c, gcc.target/i386/vperm-v4si-2x.c,
gcc.target/i386/vperm.pl: New files.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154667 138bc75d-0d04-0410-961f-82ee72b054a4
22 files changed:
gcc/ChangeLog
gcc/config/i386/i386-builtin-types.awk
gcc/config/i386/i386-builtin-types.def
gcc/config/i386/i386-modes.def
gcc/config/i386/i386-protos.h
gcc/config/i386/i386.c
gcc/config/i386/sse.md
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vect/slp-21.c
gcc/testsuite/gcc.target/i386/isa-check.h [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-2-2.inc [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-4-1.inc [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-4-2.inc [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v2df.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v2di.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v4sf-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v4sf-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v4si-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v4si-2.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm-v4si-2x.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/vperm.pl [new file with mode: 0755]
gcc/testsuite/lib/target-supports.exp