aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog26
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-typeck.c4
-rw-r--r--gcc/config/aarch64/aarch64-sve-builtins.cc2
-rw-r--r--gcc/config/rs6000/rs6000-call.c2
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/cp/typeck.c2
-rw-r--r--gcc/d/ChangeLog5
-rw-r--r--gcc/d/d-codegen.cc2
-rw-r--r--gcc/tree-vect-generic.c2
-rw-r--r--gcc/tree-vect-loop.c9
-rw-r--r--gcc/tree-vect-patterns.c2
-rw-r--r--gcc/tree-vect-slp.c3
-rw-r--r--gcc/tree-vect-stmts.c26
-rw-r--r--gcc/tree.c30
-rw-r--r--gcc/tree.h2
17 files changed, 77 insertions, 54 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 79c8042..2b307b7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,31 @@
2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
+ * tree.h (build_truth_vector_type): Delete.
+ (build_same_sized_truth_vector_type): Likewise.
+ * tree.c (build_truth_vector_type): Rename to...
+ (build_truth_vector_type_for): ...this. Make static and take
+ a vector type as argument.
+ (truth_type_for): Update accordingly.
+ (build_same_sized_truth_vector_type): Delete.
+ * tree-vect-generic.c (expand_vector_divmod): Use truth_type_for
+ instead of build_same_sized_truth_vector_type.
+ * tree-vect-loop.c (vect_create_epilog_for_reduction): Likewise.
+ (vect_record_loop_mask, vect_get_loop_mask): Likewise.
+ * tree-vect-patterns.c (build_mask_conversion): Likeise.
+ * tree-vect-slp.c (vect_get_constant_vectors): Likewise.
+ * tree-vect-stmts.c (vect_get_vec_def_for_operand): Likewise.
+ (vect_build_gather_load_calls, vectorizable_call): Likewise.
+ (scan_store_can_perm_p, vectorizable_scan_store): Likewise.
+ (vectorizable_store, vectorizable_condition): Likewise.
+ (get_mask_type_for_scalar_type, get_same_sized_vectype): Likewise.
+ (vect_get_mask_type_for_stmt): Use truth_type_for instead of
+ build_truth_vector_type.
+ * config/aarch64/aarch64-sve-builtins.cc (gimple_folder::convert_pred):
+ Use truth_type_for instead of build_same_sized_truth_vector_type.
+ * config/rs6000/rs6000-call.c (fold_build_vec_cmp): Likewise.
+
+2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
+
* tree.h (build_truth_vector_type_for_mode): Declare.
* tree.c (build_truth_vector_type_for_mode): New function,
split out from...
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index c19cf2f..04dce4b 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
+
+ * c-typeck.c (build_conditional_expr): Use truth_type_for instead
+ of build_same_sized_truth_vector_type.
+ (build_vec_cmp): Likewise.
+
2019-11-14 Jakub Jelinek <jakub@redhat.com>
* c-parser.c (c_parser_omp_context_selector): Don't require score
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 793d10e..5f74a3b 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -5431,7 +5431,7 @@ build_conditional_expr (location_t colon_loc, tree ifexp, bool ifexp_bcp,
tree elem_type = TREE_TYPE (vectype);
tree zero = build_int_cst (elem_type, 0);
tree zero_vec = build_vector_from_val (vectype, zero);
- tree cmp_type = build_same_sized_truth_vector_type (vectype);
+ tree cmp_type = truth_type_for (vectype);
ifexp = build2 (NE_EXPR, cmp_type, ifexp, zero_vec);
}
@@ -11340,7 +11340,7 @@ build_vec_cmp (tree_code code, tree type,
{
tree zero_vec = build_zero_cst (type);
tree minus_one_vec = build_minus_one_cst (type);
- tree cmp_type = build_same_sized_truth_vector_type (type);
+ tree cmp_type = truth_type_for (type);
tree cmp = build2 (code, cmp_type, arg0, arg1);
return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec);
}
diff --git a/gcc/config/aarch64/aarch64-sve-builtins.cc b/gcc/config/aarch64/aarch64-sve-builtins.cc
index 2dc2cea..63d903d 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins.cc
@@ -2240,7 +2240,7 @@ tree
gimple_folder::convert_pred (gimple_seq &stmts, tree vectype,
unsigned int argno)
{
- tree predtype = build_same_sized_truth_vector_type (vectype);
+ tree predtype = truth_type_for (vectype);
tree pred = gimple_call_arg (call, argno);
return gimple_build (&stmts, VIEW_CONVERT_EXPR, predtype, pred);
}
diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c
index 7280a4e..00ba745 100644
--- a/gcc/config/rs6000/rs6000-call.c
+++ b/gcc/config/rs6000/rs6000-call.c
@@ -5195,7 +5195,7 @@ static tree
fold_build_vec_cmp (tree_code code, tree type,
tree arg0, tree arg1)
{
- tree cmp_type = build_same_sized_truth_vector_type (type);
+ tree cmp_type = truth_type_for (type);
tree zero_vec = build_zero_cst (type);
tree minus_one_vec = build_minus_one_cst (type);
tree cmp = fold_build2 (code, cmp_type, arg0, arg1);
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c836859..f45b59b 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
+
+ * call.c (build_conditional_expr_1): Use truth_type_for instead
+ of build_same_sized_truth_vector_type.
+ * typeck.c (build_vec_cmp): Likewise.
+
2019-11-14 Jakub Jelinek <jakub@redhat.com>
* parser.c (cp_parser_omp_context_selector): Don't require score
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 0034c1c..e9ab30d 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -5198,7 +5198,7 @@ build_conditional_expr_1 (const op_location_t &loc,
if (!COMPARISON_CLASS_P (arg1))
{
- tree cmp_type = build_same_sized_truth_vector_type (arg1_type);
+ tree cmp_type = truth_type_for (arg1_type);
arg1 = build2 (NE_EXPR, cmp_type, arg1, build_zero_cst (arg1_type));
}
return build3_loc (loc, VEC_COND_EXPR, arg2_type, arg1, arg2, arg3);
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index ba94c54..3144b7e 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -4325,7 +4325,7 @@ build_vec_cmp (tree_code code, tree type,
{
tree zero_vec = build_zero_cst (type);
tree minus_one_vec = build_minus_one_cst (type);
- tree cmp_type = build_same_sized_truth_vector_type(type);
+ tree cmp_type = truth_type_for (type);
tree cmp = build2 (code, cmp_type, arg0, arg1);
return build3 (VEC_COND_EXPR, type, cmp, minus_one_vec, zero_vec);
}
diff --git a/gcc/d/ChangeLog b/gcc/d/ChangeLog
index 012d495..046f283 100644
--- a/gcc/d/ChangeLog
+++ b/gcc/d/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-14 Richard Sandiford <richard.sandiford@arm.com>
+
+ * d-codegen.cc (build_boolop): Use truth_type_for instead of
+ build_same_sized_truth_vector_type.
+
2019-11-13 Joseph Myers <joseph@codesourcery.com>
* d-target.cc (define_float_constants): Update call to
diff --git a/gcc/d/d-codegen.cc b/gcc/d/d-codegen.cc
index cf50693..01e6916 100644
--- a/gcc/d/d-codegen.cc
+++ b/gcc/d/d-codegen.cc
@@ -1399,7 +1399,7 @@ build_boolop (tree_code code, tree arg0, tree arg1)
/* Build a vector comparison.
VEC_COND_EXPR <e1 op e2, { -1, -1, -1, -1 }, { 0, 0, 0, 0 }>; */
tree type = TREE_TYPE (arg0);
- tree cmptype = build_same_sized_truth_vector_type (type);
+ tree cmptype = truth_type_for (type);
tree cmp = fold_build2_loc (input_location, code, cmptype, arg0, arg1);
return fold_build3_loc (input_location, VEC_COND_EXPR, type, cmp,
diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
index 5855653..0912265 100644
--- a/gcc/tree-vect-generic.c
+++ b/gcc/tree-vect-generic.c
@@ -694,7 +694,7 @@ expand_vector_divmod (gimple_stmt_iterator *gsi, tree type, tree op0,
tree zero, cst, cond, mask_type;
gimple *stmt;
- mask_type = build_same_sized_truth_vector_type (type);
+ mask_type = truth_type_for (type);
zero = build_zero_cst (type);
cond = build2 (LT_EXPR, mask_type, op0, zero);
tree_vector_builder vec (type, nunits, 1);
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 5cc2f8a..8319cb1 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -4603,8 +4603,7 @@ vect_create_epilog_for_reduction (stmt_vec_info stmt_info,
tree index_vec_type = TREE_TYPE (induction_index);
gcc_checking_assert (TYPE_UNSIGNED (index_vec_type));
tree index_scalar_type = TREE_TYPE (index_vec_type);
- tree index_vec_cmp_type = build_same_sized_truth_vector_type
- (index_vec_type);
+ tree index_vec_cmp_type = truth_type_for (index_vec_type);
/* Get an unsigned integer version of the type of the data vector. */
int scalar_precision
@@ -4831,7 +4830,7 @@ vect_create_epilog_for_reduction (stmt_vec_info stmt_info,
tree index = build_index_vector (vectype, 0, 1);
tree index_type = TREE_TYPE (index);
tree index_elt_type = TREE_TYPE (index_type);
- tree mask_type = build_same_sized_truth_vector_type (index_type);
+ tree mask_type = truth_type_for (index_type);
/* Create a vector that, for each element, identifies which of
the REDUC_GROUP_SIZE results should use it. */
@@ -7948,7 +7947,7 @@ vect_record_loop_mask (loop_vec_info loop_vinfo, vec_loop_masks *masks,
if (rgm->max_nscalars_per_iter < nscalars_per_iter)
{
rgm->max_nscalars_per_iter = nscalars_per_iter;
- rgm->mask_type = build_same_sized_truth_vector_type (vectype);
+ rgm->mask_type = truth_type_for (vectype);
}
}
@@ -7993,7 +7992,7 @@ vect_get_loop_mask (gimple_stmt_iterator *gsi, vec_loop_masks *masks,
gcc_assert (multiple_p (TYPE_VECTOR_SUBPARTS (mask_type),
TYPE_VECTOR_SUBPARTS (vectype)));
gimple_seq seq = NULL;
- mask_type = build_same_sized_truth_vector_type (vectype);
+ mask_type = truth_type_for (vectype);
mask = gimple_build (&seq, VIEW_CONVERT_EXPR, mask_type, mask);
if (seq)
gsi_insert_seq_before (gsi, seq, GSI_SAME_STMT);
diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c
index 8ebbcd7..86c3abf 100644
--- a/gcc/tree-vect-patterns.c
+++ b/gcc/tree-vect-patterns.c
@@ -4214,7 +4214,7 @@ build_mask_conversion (tree mask, tree vectype, stmt_vec_info stmt_vinfo)
gimple *stmt;
tree masktype, tmp;
- masktype = build_same_sized_truth_vector_type (vectype);
+ masktype = truth_type_for (vectype);
tmp = vect_recog_temp_ssa_var (TREE_TYPE (masktype), NULL);
stmt = gimple_build_assign (tmp, CONVERT_EXPR, mask);
append_pattern_def_seq (stmt_vinfo, stmt, masktype);
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index a2c70ec..61a864e 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -3497,8 +3497,7 @@ vect_get_constant_vectors (slp_tree op_node, slp_tree slp_node,
tree stmt_vectype = STMT_VINFO_VECTYPE (stmt_vinfo);
if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op))
&& vect_mask_constant_operand_p (stmt_vinfo))
- vector_type
- = build_same_sized_truth_vector_type (stmt_vectype);
+ vector_type = truth_type_for (stmt_vectype);
else
vector_type = get_vectype_for_scalar_type (vinfo, TREE_TYPE (op));
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 9668643..19984b5 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -1605,7 +1605,7 @@ vect_get_vec_def_for_operand (tree op, stmt_vec_info stmt_vinfo, tree vectype)
vector_type = vectype;
else if (VECT_SCALAR_BOOLEAN_TYPE_P (TREE_TYPE (op))
&& VECTOR_BOOLEAN_TYPE_P (stmt_vectype))
- vector_type = build_same_sized_truth_vector_type (stmt_vectype);
+ vector_type = truth_type_for (stmt_vectype);
else
vector_type = get_vectype_for_scalar_type (loop_vinfo, TREE_TYPE (op));
@@ -2734,7 +2734,7 @@ vect_build_gather_load_calls (stmt_vec_info stmt_info,
|| TREE_CODE (masktype) == INTEGER_TYPE
|| types_compatible_p (srctype, masktype)));
if (mask && TREE_CODE (masktype) == INTEGER_TYPE)
- masktype = build_same_sized_truth_vector_type (srctype);
+ masktype = truth_type_for (srctype);
tree mask_halftype = masktype;
tree perm_mask = NULL_TREE;
@@ -2780,8 +2780,7 @@ vect_build_gather_load_calls (stmt_vec_info stmt_info,
mask_perm_mask = vect_gen_perm_mask_checked (masktype, indices);
}
else if (mask)
- mask_halftype
- = build_same_sized_truth_vector_type (gs_info->offset_vectype);
+ mask_halftype = truth_type_for (gs_info->offset_vectype);
}
else
gcc_unreachable ();
@@ -3524,8 +3523,7 @@ vectorizable_call (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
if (mask_opno >= 0 && !vectypes[mask_opno])
{
gcc_assert (modifier != WIDEN);
- vectypes[mask_opno]
- = build_same_sized_truth_vector_type (vectype_in);
+ vectypes[mask_opno] = truth_type_for (vectype_in);
}
for (i = 0; i < nargs; i++)
@@ -6581,7 +6579,7 @@ scan_store_can_perm_p (tree vectype, tree init,
&& TREE_CODE (init) != REAL_CST)
|| !initializer_zerop (init))
{
- tree masktype = build_same_sized_truth_vector_type (vectype);
+ tree masktype = truth_type_for (vectype);
if (!expand_vec_cond_expr_p (vectype, masktype, VECTOR_CST))
return -1;
whole_vector_shift_kind = scan_store_kind_lshift_cond;
@@ -7106,7 +7104,7 @@ vectorizable_scan_store (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
zero_vec = build_zero_cst (vectype);
if (masktype == NULL_TREE
&& use_whole_vector[i] == scan_store_kind_lshift_cond)
- masktype = build_same_sized_truth_vector_type (vectype);
+ masktype = truth_type_for (vectype);
perms[i] = vect_gen_perm_mask_any (vectype, indices);
}
else
@@ -7547,8 +7545,7 @@ vectorizable_store (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
ncopies *= 2;
if (mask)
- mask_halfvectype
- = build_same_sized_truth_vector_type (gs_info.offset_vectype);
+ mask_halfvectype = truth_type_for (gs_info.offset_vectype);
}
else
gcc_unreachable ();
@@ -9972,7 +9969,7 @@ vectorizable_condition (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi,
return false;
masked = !COMPARISON_CLASS_P (cond_expr);
- vec_cmp_type = build_same_sized_truth_vector_type (comp_vectype);
+ vec_cmp_type = truth_type_for (comp_vectype);
if (vec_cmp_type == NULL_TREE)
return false;
@@ -11233,8 +11230,7 @@ get_mask_type_for_scalar_type (vec_info *vinfo, tree scalar_type)
if (!vectype)
return NULL;
- return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype),
- vinfo->vector_size);
+ return truth_type_for (vectype);
}
/* Function get_same_sized_vectype
@@ -11246,7 +11242,7 @@ tree
get_same_sized_vectype (tree scalar_type, tree vector_type)
{
if (VECT_SCALAR_BOOLEAN_TYPE_P (scalar_type))
- return build_same_sized_truth_vector_type (vector_type);
+ return truth_type_for (vector_type);
return get_vectype_for_scalar_type_and_size
(scalar_type, GET_MODE_SIZE (TYPE_MODE (vector_type)));
@@ -12109,7 +12105,7 @@ vect_get_mask_type_for_stmt (stmt_vec_info stmt_info)
&& !VECTOR_BOOLEAN_TYPE_P (mask_type)
&& gimple_code (stmt) == GIMPLE_ASSIGN
&& TREE_CODE_CLASS (gimple_assign_rhs_code (stmt)) == tcc_comparison)
- mask_type = build_same_sized_truth_vector_type (mask_type);
+ mask_type = truth_type_for (mask_type);
}
/* No mask_type should mean loop invariant predicate.
diff --git a/gcc/tree.c b/gcc/tree.c
index 2375bf8..61b95c9 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -10887,11 +10887,16 @@ build_truth_vector_type_for_mode (poly_uint64 nunits, machine_mode mask_mode)
return make_vector_type (bool_type, nunits, mask_mode);
}
-/* Build truth vector with specified length and number of units. */
+/* Build a vector type that holds one boolean result for each element of
+ vector type VECTYPE. The public interface for this operation is
+ truth_type_for. */
-tree
-build_truth_vector_type (poly_uint64 nunits, poly_uint64 vector_size)
+static tree
+build_truth_vector_type_for (tree vectype)
{
+ poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype);
+ poly_uint64 vector_size = tree_to_poly_uint64 (TYPE_SIZE_UNIT (vectype));
+
machine_mode mask_mode;
if (targetm.vectorize.get_mask_mode (nunits,
vector_size).exists (&mask_mode))
@@ -10904,22 +10909,6 @@ build_truth_vector_type (poly_uint64 nunits, poly_uint64 vector_size)
return make_vector_type (bool_type, nunits, BLKmode);
}
-/* Returns a vector type corresponding to a comparison of VECTYPE. */
-
-tree
-build_same_sized_truth_vector_type (tree vectype)
-{
- if (VECTOR_BOOLEAN_TYPE_P (vectype))
- return vectype;
-
- poly_uint64 size = GET_MODE_SIZE (TYPE_MODE (vectype));
-
- if (known_eq (size, 0U))
- size = tree_to_uhwi (TYPE_SIZE_UNIT (vectype));
-
- return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (vectype), size);
-}
-
/* Like build_vector_type, but builds a variant type with TYPE_VECTOR_OPAQUE
set. */
@@ -11725,8 +11714,7 @@ truth_type_for (tree type)
{
if (VECTOR_BOOLEAN_TYPE_P (type))
return type;
- return build_truth_vector_type (TYPE_VECTOR_SUBPARTS (type),
- GET_MODE_SIZE (TYPE_MODE (type)));
+ return build_truth_vector_type_for (type);
}
else
return boolean_type_node;
diff --git a/gcc/tree.h b/gcc/tree.h
index 93ccbf7..89114e2 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -4444,8 +4444,6 @@ extern tree build_reference_type (tree);
extern tree build_vector_type_for_mode (tree, machine_mode);
extern tree build_vector_type (tree, poly_int64);
extern tree build_truth_vector_type_for_mode (poly_uint64, machine_mode);
-extern tree build_truth_vector_type (poly_uint64, poly_uint64);
-extern tree build_same_sized_truth_vector_type (tree vectype);
extern tree build_opaque_vector_type (tree, poly_int64);
extern tree build_index_type (tree);
extern tree build_array_type (tree, tree, bool = false);