Skip to content
Snippets Groups Projects
Commit 908a1a16 authored by Richard Sandiford's avatar Richard Sandiford Committed by Richard Sandiford
Browse files

Use vec<> for constant permute masks


This patch makes can_vec_perm_p & co. take a vec<>, wrapped in new
typedefs vec_perm_indices and auto_vec_perm_indices.  There are two
reasons for doing this for SVE:

(1) it means that the number of elements is bundled with the elements
    themselves, and is obviously constant.

(2) it makes it easier to change the "unsigned char" element type to
    something wider.

Changing the target hook is left as follow-on work.

2017-09-14  Richard Sandiford  <richard.sandiford@linaro.org>
	    Alan Hayward  <alan.hayward@arm.com>
	    David Sherwood  <david.sherwood@arm.com>

gcc/
	* target.h (vec_perm_indices): New typedef.
	(auto_vec_perm_indices): Likewise.
	* optabs-query.h: Include target.h
	(can_vec_perm_p): Take a vec_perm_indices *.
	* optabs-query.c (can_vec_perm_p): Likewise.
	(can_mult_highpart_p): Update accordingly.  Use auto_vec_perm_indices.
	* tree-ssa-forwprop.c (simplify_vector_constructor): Likewise.
	* tree-vect-generic.c (lower_vec_perm): Likewise.
	* tree-vect-data-refs.c (vect_grouped_store_supported): Likewise.
	(vect_grouped_load_supported): Likewise.
	(vect_shift_permute_load_chain): Likewise.
	(vect_permute_store_chain): Use auto_vec_perm_indices.
	(vect_permute_load_chain): Likewise.
	* fold-const.c (fold_vec_perm): Take vec_perm_indices.
	(fold_ternary_loc): Update accordingly.  Use auto_vec_perm_indices.
	Update uses of can_vec_perm_p.
	* tree-vect-loop.c (calc_vec_perm_mask_for_shift): Replace the
	mode with a number of elements.  Take a vec_perm_indices *.
	(vect_create_epilog_for_reduction): Update accordingly.
	Use auto_vec_perm_indices.
	(have_whole_vector_shift): Likewise.  Update call to can_vec_perm_p.
	* tree-vect-slp.c (vect_build_slp_tree_1): Likewise.
	(vect_transform_slp_perm_load): Likewise.
	(vect_schedule_slp_instance): Use auto_vec_perm_indices.
	* tree-vectorizer.h (vect_gen_perm_mask_any): Take a vec_perm_indices.
	(vect_gen_perm_mask_checked): Likewise.
	* tree-vect-stmts.c (vect_gen_perm_mask_any): Take a vec_perm_indices.
	(vect_gen_perm_mask_checked): Likewise.
	(vectorizable_mask_load_store): Use auto_vec_perm_indices.
	(vectorizable_store): Likewise.
	(vectorizable_load): Likewise.
	(perm_mask_for_reverse): Likewise.  Update call to can_vec_perm_p.
	(vectorizable_bswap): Likewise.

Co-Authored-By: default avatarAlan Hayward <alan.hayward@arm.com>
Co-Authored-By: default avatarDavid Sherwood <david.sherwood@arm.com>

From-SVN: r252761
parent 794e3180
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment