Commit 1bd5196c by Richard Sandiford Committed by Richard Sandiford

Pass a vec_info to get_mask_type_for_scalar_type

2019-10-21  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
	* tree-vectorizer.h (get_mask_type_for_scalar_type): Take a vec_info.
	* tree-vect-stmts.c (get_mask_type_for_scalar_type): Likewise.
	(vect_check_load_store_mask): Update call accordingly.
	(vect_get_mask_type_for_stmt): Likewise.
	* tree-vect-patterns.c (check_bool_pattern): Likewise.
	(search_type_for_mask_1, vect_recog_mask_conversion_pattern): Likewise.
	(vect_convert_mask_for_vectype): Likewise.

From-SVN: r277226
parent dcab2a0d
2019-10-21 Richard Sandiford <richard.sandiford@arm.com> 2019-10-21 Richard Sandiford <richard.sandiford@arm.com>
* tree-vectorizer.h (get_mask_type_for_scalar_type): Take a vec_info.
* tree-vect-stmts.c (get_mask_type_for_scalar_type): Likewise.
(vect_check_load_store_mask): Update call accordingly.
(vect_get_mask_type_for_stmt): Likewise.
* tree-vect-patterns.c (check_bool_pattern): Likewise.
(search_type_for_mask_1, vect_recog_mask_conversion_pattern): Likewise.
(vect_convert_mask_for_vectype): Likewise.
2019-10-21 Richard Sandiford <richard.sandiford@arm.com>
* tree-vect-patterns.c (vect_supportable_direct_optab_p): Take * tree-vect-patterns.c (vect_supportable_direct_optab_p): Take
a vec_info. a vec_info.
(vect_recog_dot_prod_pattern): Update call accordingly. (vect_recog_dot_prod_pattern): Update call accordingly.
......
...@@ -3616,7 +3616,8 @@ check_bool_pattern (tree var, vec_info *vinfo, hash_set<gimple *> &stmts) ...@@ -3616,7 +3616,8 @@ check_bool_pattern (tree var, vec_info *vinfo, hash_set<gimple *> &stmts)
if (comp_vectype == NULL_TREE) if (comp_vectype == NULL_TREE)
return false; return false;
tree mask_type = get_mask_type_for_scalar_type (TREE_TYPE (rhs1)); tree mask_type = get_mask_type_for_scalar_type (vinfo,
TREE_TYPE (rhs1));
if (mask_type if (mask_type
&& expand_vec_cmp_expr_p (comp_vectype, mask_type, rhs_code)) && expand_vec_cmp_expr_p (comp_vectype, mask_type, rhs_code))
return false; return false;
...@@ -3943,7 +3944,7 @@ search_type_for_mask_1 (tree var, vec_info *vinfo, ...@@ -3943,7 +3944,7 @@ search_type_for_mask_1 (tree var, vec_info *vinfo,
break; break;
} }
mask_type = get_mask_type_for_scalar_type (TREE_TYPE (rhs1)); mask_type = get_mask_type_for_scalar_type (vinfo, TREE_TYPE (rhs1));
if (!mask_type if (!mask_type
|| !expand_vec_cmp_expr_p (comp_vectype, mask_type, rhs_code)) || !expand_vec_cmp_expr_p (comp_vectype, mask_type, rhs_code))
{ {
...@@ -4275,7 +4276,7 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out) ...@@ -4275,7 +4276,7 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out)
tree mask_arg_type = search_type_for_mask (mask_arg, vinfo); tree mask_arg_type = search_type_for_mask (mask_arg, vinfo);
if (!mask_arg_type) if (!mask_arg_type)
return NULL; return NULL;
vectype2 = get_mask_type_for_scalar_type (mask_arg_type); vectype2 = get_mask_type_for_scalar_type (vinfo, mask_arg_type);
if (!vectype1 || !vectype2 if (!vectype1 || !vectype2
|| known_eq (TYPE_VECTOR_SUBPARTS (vectype1), || known_eq (TYPE_VECTOR_SUBPARTS (vectype1),
...@@ -4352,7 +4353,7 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out) ...@@ -4352,7 +4353,7 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out)
else else
return NULL; return NULL;
vectype2 = get_mask_type_for_scalar_type (rhs1_type); vectype2 = get_mask_type_for_scalar_type (vinfo, rhs1_type);
if (!vectype1 || !vectype2) if (!vectype1 || !vectype2)
return NULL; return NULL;
...@@ -4442,14 +4443,14 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out) ...@@ -4442,14 +4443,14 @@ vect_recog_mask_conversion_pattern (stmt_vec_info stmt_vinfo, tree *type_out)
if (TYPE_PRECISION (rhs1_type) < TYPE_PRECISION (rhs2_type)) if (TYPE_PRECISION (rhs1_type) < TYPE_PRECISION (rhs2_type))
{ {
vectype1 = get_mask_type_for_scalar_type (rhs1_type); vectype1 = get_mask_type_for_scalar_type (vinfo, rhs1_type);
if (!vectype1) if (!vectype1)
return NULL; return NULL;
rhs2 = build_mask_conversion (rhs2, vectype1, stmt_vinfo); rhs2 = build_mask_conversion (rhs2, vectype1, stmt_vinfo);
} }
else else
{ {
vectype1 = get_mask_type_for_scalar_type (rhs2_type); vectype1 = get_mask_type_for_scalar_type (vinfo, rhs2_type);
if (!vectype1) if (!vectype1)
return NULL; return NULL;
rhs1 = build_mask_conversion (rhs1, vectype1, stmt_vinfo); rhs1 = build_mask_conversion (rhs1, vectype1, stmt_vinfo);
...@@ -4520,7 +4521,7 @@ vect_convert_mask_for_vectype (tree mask, tree vectype, ...@@ -4520,7 +4521,7 @@ vect_convert_mask_for_vectype (tree mask, tree vectype,
tree mask_type = search_type_for_mask (mask, vinfo); tree mask_type = search_type_for_mask (mask, vinfo);
if (mask_type) if (mask_type)
{ {
tree mask_vectype = get_mask_type_for_scalar_type (mask_type); tree mask_vectype = get_mask_type_for_scalar_type (vinfo, mask_type);
if (mask_vectype if (mask_vectype
&& maybe_ne (TYPE_VECTOR_SUBPARTS (vectype), && maybe_ne (TYPE_VECTOR_SUBPARTS (vectype),
TYPE_VECTOR_SUBPARTS (mask_vectype))) TYPE_VECTOR_SUBPARTS (mask_vectype)))
......
...@@ -2558,6 +2558,7 @@ vect_check_load_store_mask (stmt_vec_info stmt_info, tree mask, ...@@ -2558,6 +2558,7 @@ vect_check_load_store_mask (stmt_vec_info stmt_info, tree mask,
vect_def_type *mask_dt_out, vect_def_type *mask_dt_out,
tree *mask_vectype_out) tree *mask_vectype_out)
{ {
vec_info *vinfo = stmt_info->vinfo;
if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (mask))) if (!VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (mask)))
{ {
if (dump_enabled_p ()) if (dump_enabled_p ())
...@@ -2586,7 +2587,7 @@ vect_check_load_store_mask (stmt_vec_info stmt_info, tree mask, ...@@ -2586,7 +2587,7 @@ vect_check_load_store_mask (stmt_vec_info stmt_info, tree mask,
tree vectype = STMT_VINFO_VECTYPE (stmt_info); tree vectype = STMT_VINFO_VECTYPE (stmt_info);
if (!mask_vectype) if (!mask_vectype)
mask_vectype = get_mask_type_for_scalar_type (TREE_TYPE (vectype)); mask_vectype = get_mask_type_for_scalar_type (vinfo, TREE_TYPE (vectype));
if (!mask_vectype || !VECTOR_BOOLEAN_TYPE_P (mask_vectype)) if (!mask_vectype || !VECTOR_BOOLEAN_TYPE_P (mask_vectype))
{ {
...@@ -11156,7 +11157,7 @@ get_vectype_for_scalar_type (tree scalar_type) ...@@ -11156,7 +11157,7 @@ get_vectype_for_scalar_type (tree scalar_type)
of vectors of specified SCALAR_TYPE as supported by target. */ of vectors of specified SCALAR_TYPE as supported by target. */
tree tree
get_mask_type_for_scalar_type (tree scalar_type) get_mask_type_for_scalar_type (vec_info *, tree scalar_type)
{ {
tree vectype = get_vectype_for_scalar_type (scalar_type); tree vectype = get_vectype_for_scalar_type (scalar_type);
...@@ -11986,6 +11987,7 @@ vect_get_vector_types_for_stmt (stmt_vec_info stmt_info, ...@@ -11986,6 +11987,7 @@ vect_get_vector_types_for_stmt (stmt_vec_info stmt_info,
opt_tree opt_tree
vect_get_mask_type_for_stmt (stmt_vec_info stmt_info) vect_get_mask_type_for_stmt (stmt_vec_info stmt_info)
{ {
vec_info *vinfo = stmt_info->vinfo;
gimple *stmt = stmt_info->stmt; gimple *stmt = stmt_info->stmt;
tree mask_type = NULL; tree mask_type = NULL;
tree vectype, scalar_type; tree vectype, scalar_type;
...@@ -11995,7 +11997,7 @@ vect_get_mask_type_for_stmt (stmt_vec_info stmt_info) ...@@ -11995,7 +11997,7 @@ vect_get_mask_type_for_stmt (stmt_vec_info stmt_info)
&& !VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (stmt)))) && !VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (gimple_assign_rhs1 (stmt))))
{ {
scalar_type = TREE_TYPE (gimple_assign_rhs1 (stmt)); scalar_type = TREE_TYPE (gimple_assign_rhs1 (stmt));
mask_type = get_mask_type_for_scalar_type (scalar_type); mask_type = get_mask_type_for_scalar_type (vinfo, scalar_type);
if (!mask_type) if (!mask_type)
return opt_tree::failure_at (stmt, return opt_tree::failure_at (stmt,
......
...@@ -1591,7 +1591,7 @@ extern bool vect_can_advance_ivs_p (loop_vec_info); ...@@ -1591,7 +1591,7 @@ extern bool vect_can_advance_ivs_p (loop_vec_info);
extern poly_uint64 current_vector_size; extern poly_uint64 current_vector_size;
extern tree get_vectype_for_scalar_type (tree); extern tree get_vectype_for_scalar_type (tree);
extern tree get_vectype_for_scalar_type_and_size (tree, poly_uint64); extern tree get_vectype_for_scalar_type_and_size (tree, poly_uint64);
extern tree get_mask_type_for_scalar_type (tree); extern tree get_mask_type_for_scalar_type (vec_info *, tree);
extern tree get_same_sized_vectype (tree, tree); extern tree get_same_sized_vectype (tree, tree);
extern bool vect_get_loop_mask_type (loop_vec_info); extern bool vect_get_loop_mask_type (loop_vec_info);
extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *, extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment