On Tue, Dec 4, 2012 at 2:31 AM, James Greenhalgh <james.greenha...@arm.com> wrote: > > Hi, > > This patch adds support for Vector Shuffle style operations > through support for TARGET_VECTORIZE_VEC_PERM_CONST_OK and > the vec_perm and vec_perm_const standard patterns. > > In this patch we add the framework and support for the > generic tbl instruction. This can be used to handle any > vector permute operation, but we can do a better job for > some special cases. The second patch of this series does > that better job for the ZIP, UZP and TRN instructions. > > Is this OK to commit?
This breaks big-endian aarch64 in a very bad way. vec_perm<mode> is enabled for big-endian but aarch64_expand_vec_perm will ICE right away. Can you please test big-endian also next time? Here is the shortest testcase which fails at -O3: void fill_window(unsigned short *p, unsigned wsize) { unsigned n, m; do { m = *--p; *p = (unsigned short)(m >= wsize ? m-wsize : 0); } while (--n); } This comes from zlib and it blocks my building of the trunk. Thanks, Andrew Pinski > > Thanks, > James Greenhalgh > > --- > gcc/ > > 2012-12-04 James Greenhalgh <james.greenha...@arm.com> > > * config/aarch64/aarch64-protos.h > (aarch64_split_combinev16qi): New. > (aarch64_expand_vec_perm): Likewise. > (aarch64_expand_vec_perm_const): Likewise. > * config/aarch64/aarch64-simd.md (vec_perm_const<mode>): New. > (vec_perm<mode>): Likewise. > (aarch64_tbl1<mode>): Likewise. > (aarch64_tbl2v16qi): Likewise. > (aarch64_combinev16qi): New. > * config/aarch64/aarch64.c > (aarch64_vectorize_vec_perm_const_ok): New. > (aarch64_split_combinev16qi): Likewise. > (MAX_VECT_LEN): Define. > (expand_vec_perm_d): New. > (aarch64_expand_vec_perm_1): Likewise. > (aarch64_expand_vec_perm): Likewise. > (aarch64_evpc_tbl): Likewise. > (aarch64_expand_vec_perm_const_1): Likewise. > (aarch64_expand_vec_perm_const): Likewise. > (aarch64_vectorize_vec_perm_const_ok): Likewise. > (TARGET_VECTORIZE_VEC_PERM_CONST_OK): Likewise. > * config/aarch64/iterators.md > (unspec): Add UNSPEC_TBL, UNSPEC_CONCAT. > (V_cmp_result): Add mapping for V2DF. > > gcc/testsuite/ > > 2012-12-04 James Greenhalgh <james.greenha...@arm.com> > > * lib/target-supports.exp > (check_effective_target_vect_perm): Allow aarch64*-*-*. > (check_effective_target_vect_perm_byte): Likewise. > (check_effective_target_vect_perm_short): Likewise. > (check_effective_target_vect_char_mult): Likewise. > (check_effective_target_vect_extract_even_odd): Likewise. > (check_effective_target_vect_interleave): Likewise.