* C++ PATCH to use VECTOR_TYPE_P
@ 2015-06-26 10:10 Marek Polacek
2015-06-26 21:21 ` Jason Merrill
0 siblings, 1 reply; 7+ messages in thread
From: Marek Polacek @ 2015-06-26 10:10 UTC (permalink / raw)
To: GCC Patches, Jason Merrill
This patch makes the C++ FE use VECTOR_TYPE_P where appropriate.
Bootstrapped/regtested on x86_64-linux, ok for trunk?
2015-06-26 Marek Polacek <polacek@redhat.com>
* call.c: Use VECTOR_TYPE_P.
* constexpr.c: Likewise.
* cvt.c: Likewise.
* decl.c: Likewise.
* decl2.c: Likewise.
* init.c: Likewise.
* semantics.c: Likewise.
* tree.c: Likewise.
* typeck.c: Likewise.
* typeck2.c: Likewise.
diff --git gcc/cp/call.c gcc/cp/call.c
index 0e8840b..cfb0de0 100644
--- gcc/cp/call.c
+++ gcc/cp/call.c
@@ -4559,8 +4559,8 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
arg2_type = TREE_TYPE (arg2);
arg3_type = TREE_TYPE (arg3);
- if (TREE_CODE (arg2_type) != VECTOR_TYPE
- && TREE_CODE (arg3_type) != VECTOR_TYPE)
+ if (!VECTOR_TYPE_P (arg2_type)
+ && !VECTOR_TYPE_P (arg3_type))
{
/* Rely on the error messages of the scalar version. */
tree scal = build_conditional_expr_1 (loc, integer_one_node,
@@ -4612,8 +4612,7 @@ build_conditional_expr_1 (location_t loc, tree arg1, tree arg2, tree arg3,
arg3_type = vtype;
}
- if ((TREE_CODE (arg2_type) == VECTOR_TYPE)
- != (TREE_CODE (arg3_type) == VECTOR_TYPE))
+ if (VECTOR_TYPE_P (arg2_type) != VECTOR_TYPE_P (arg3_type))
{
enum stv_conv convert_flag =
scalar_to_vector (loc, VEC_COND_EXPR, arg2, arg3,
diff --git gcc/cp/constexpr.c gcc/cp/constexpr.c
index 9cb45ea..a38c753 100644
--- gcc/cp/constexpr.c
+++ gcc/cp/constexpr.c
@@ -61,7 +61,7 @@ bool
literal_type_p (tree t)
{
if (SCALAR_TYPE_P (t)
- || TREE_CODE (t) == VECTOR_TYPE
+ || VECTOR_TYPE_P (t)
|| TREE_CODE (t) == REFERENCE_TYPE
|| (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
return true;
@@ -2101,7 +2101,7 @@ cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
/* We're done building this CONSTRUCTOR, so now we can interpret an
element without an explicit initializer as value-initialized. */
CONSTRUCTOR_NO_IMPLICIT_ZERO (t) = false;
- if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (TREE_TYPE (t)))
t = fold (t);
return t;
}
@@ -2289,7 +2289,7 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
(type, TREE_TYPE (optype))))
return fold_build1_loc (loc, REALPART_EXPR, type, op);
/* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
- else if (TREE_CODE (optype) == VECTOR_TYPE
+ else if (VECTOR_TYPE_P (optype)
&& (same_type_ignoring_top_level_qualifiers_p
(type, TREE_TYPE (optype))))
{
@@ -2335,7 +2335,7 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
op00type = TREE_TYPE (op00);
/* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
- if (TREE_CODE (op00type) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (op00type)
&& (same_type_ignoring_top_level_qualifiers_p
(type, TREE_TYPE (op00type))))
{
diff --git gcc/cp/cvt.c gcc/cp/cvt.c
index d29c64b..a277678 100644
--- gcc/cp/cvt.c
+++ gcc/cp/cvt.c
@@ -708,7 +708,7 @@ ocp_convert (tree type, tree expr, int convtype, int flags,
conversion. */
else if (TREE_CODE (type) == COMPLEX_TYPE)
return fold_if_not_in_template (convert_to_complex (type, e));
- else if (TREE_CODE (type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (type))
return fold_if_not_in_template (convert_to_vector (type, e));
else if (TREE_CODE (e) == TARGET_EXPR)
{
diff --git gcc/cp/decl.c gcc/cp/decl.c
index 1fa28b2..bd544ef 100644
--- gcc/cp/decl.c
+++ gcc/cp/decl.c
@@ -5393,7 +5393,7 @@ reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
{
tree max_index = NULL_TREE;
- gcc_assert (TREE_CODE (type) == VECTOR_TYPE);
+ gcc_assert (VECTOR_TYPE_P (type));
if (COMPOUND_LITERAL_P (d->cur->value))
{
@@ -5410,7 +5410,7 @@ reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
}
/* For a vector, we initialize it as an array of the appropriate size. */
- if (TREE_CODE (type) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (type))
max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
@@ -5718,7 +5718,7 @@ reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
return reshape_init_class (type, d, first_initializer_p, complain);
else if (TREE_CODE (type) == ARRAY_TYPE)
return reshape_init_array (type, d, complain);
- else if (TREE_CODE (type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (type))
return reshape_init_vector (type, d, complain);
else
gcc_unreachable();
@@ -5920,7 +5920,7 @@ check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
"not by %<{...}%>",
decl);
}
- else if (TREE_CODE (type) == VECTOR_TYPE && TYPE_VECTOR_OPAQUE (type))
+ else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
{
error ("opaque vector types cannot be initialized");
init = error_mark_node;
diff --git gcc/cp/decl2.c gcc/cp/decl2.c
index f045253..506b128 100644
--- gcc/cp/decl2.c
+++ gcc/cp/decl2.c
@@ -395,7 +395,7 @@ grok_array_decl (location_t loc, tree array_expr, tree index_exp,
It is a little-known fact that, if `a' is an array and `i' is
an int, you can write `i[a]', which means the same thing as
`a[i]'. */
- if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
+ if (TREE_CODE (type) == ARRAY_TYPE || VECTOR_TYPE_P (type))
p1 = array_expr;
else
p1 = build_expr_type_conversion (WANT_POINTER, array_expr, false);
diff --git gcc/cp/init.c gcc/cp/init.c
index 530dad4..871ddb5 100644
--- gcc/cp/init.c
+++ gcc/cp/init.c
@@ -280,7 +280,7 @@ build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
/* Build a constructor to contain the initializations. */
init = build_constructor (type, v);
}
- else if (TREE_CODE (type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (type))
init = build_zero_cst (type);
else
gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
diff --git gcc/cp/semantics.c gcc/cp/semantics.c
index 2f3303a..c748bec 100644
--- gcc/cp/semantics.c
+++ gcc/cp/semantics.c
@@ -7357,7 +7357,7 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
/* For vector types, pick a non-opaque variant. */
- if (TREE_CODE (type) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (type))
type = strip_typedefs (type);
if (clk != clk_none && !(clk & clk_class))
diff --git gcc/cp/tree.c gcc/cp/tree.c
index 9ee203f..156b243 100644
--- gcc/cp/tree.c
+++ gcc/cp/tree.c
@@ -3239,8 +3239,7 @@ scalarish_type_p (const_tree t)
if (t == error_mark_node)
return 1;
- return (SCALAR_TYPE_P (t)
- || TREE_CODE (t) == VECTOR_TYPE);
+ return (SCALAR_TYPE_P (t) || VECTOR_TYPE_P (t));
}
/* Returns true iff T requires non-trivial default initialization. */
diff --git gcc/cp/typeck.c gcc/cp/typeck.c
index 5b3fdfb..96ecb0c 100644
--- gcc/cp/typeck.c
+++ gcc/cp/typeck.c
@@ -293,10 +293,10 @@ cp_common_type (tree t1, tree t2)
/* FIXME: Attributes. */
gcc_assert (ARITHMETIC_TYPE_P (t1)
- || TREE_CODE (t1) == VECTOR_TYPE
+ || VECTOR_TYPE_P (t1)
|| UNSCOPED_ENUM_P (t1));
gcc_assert (ARITHMETIC_TYPE_P (t2)
- || TREE_CODE (t2) == VECTOR_TYPE
+ || VECTOR_TYPE_P (t2)
|| UNSCOPED_ENUM_P (t2));
/* If one type is complex, form the common type of the non-complex
@@ -441,10 +441,10 @@ tree
type_after_usual_arithmetic_conversions (tree t1, tree t2)
{
gcc_assert (ARITHMETIC_TYPE_P (t1)
- || TREE_CODE (t1) == VECTOR_TYPE
+ || VECTOR_TYPE_P (t1)
|| UNSCOPED_ENUM_P (t1));
gcc_assert (ARITHMETIC_TYPE_P (t2)
- || TREE_CODE (t2) == VECTOR_TYPE
+ || VECTOR_TYPE_P (t2)
|| UNSCOPED_ENUM_P (t2));
/* Perform the integral promotions. We do not promote real types here. */
@@ -6979,9 +6979,9 @@ build_reinterpret_cast_1 (tree type, tree expr, bool c_cast_p,
"is conditionally-supported");
return fold_if_not_in_template (build_nop (type, expr));
}
- else if (TREE_CODE (type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (type))
return fold_if_not_in_template (convert_to_vector (type, expr));
- else if (TREE_CODE (intype) == VECTOR_TYPE
+ else if (VECTOR_TYPE_P (intype)
&& INTEGRAL_OR_ENUMERATION_TYPE_P (type))
return fold_if_not_in_template (convert_to_integer (type, expr));
else
@@ -8115,7 +8115,7 @@ convert_for_assignment (tree type, tree rhs,
rhstype = TREE_TYPE (rhs);
coder = TREE_CODE (rhstype);
- if (TREE_CODE (type) == VECTOR_TYPE && coder == VECTOR_TYPE
+ if (VECTOR_TYPE_P (type) && coder == VECTOR_TYPE
&& vector_types_convertible_p (type, rhstype, true))
{
rhs = mark_rvalue_use (rhs);
@@ -8819,7 +8819,7 @@ comp_ptr_ttypes_real (tree to, tree from, int constp)
constp &= TYPE_READONLY (to);
}
- if (TREE_CODE (to) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (to))
is_opaque_pointer = vector_targets_convertible_p (to, from);
if (!TYPE_PTR_P (to) && !TYPE_PTRDATAMEM_P (to))
@@ -8900,7 +8900,7 @@ ptr_reasonably_similar (const_tree to, const_tree from)
COMPARE_BASE | COMPARE_DERIVED))
continue;
- if (TREE_CODE (to) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (to)
&& vector_types_convertible_p (to, from, false))
return true;
@@ -8942,7 +8942,7 @@ comp_ptr_ttypes_const (tree to, tree from)
TYPE_OFFSET_BASETYPE (to)))
continue;
- if (TREE_CODE (to) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (to))
is_opaque_pointer = vector_targets_convertible_p (to, from);
if (!TYPE_PTR_P (to))
diff --git gcc/cp/typeck2.c gcc/cp/typeck2.c
index 30d93ed..f6a75eb 100644
--- gcc/cp/typeck2.c
+++ gcc/cp/typeck2.c
@@ -1083,7 +1083,7 @@ digest_init_r (tree type, tree init, bool nested, int flags,
/* Come here only for aggregates: records, arrays, unions, complex numbers
and vectors. */
gcc_assert (TREE_CODE (type) == ARRAY_TYPE
- || TREE_CODE (type) == VECTOR_TYPE
+ || VECTOR_TYPE_P (type)
|| TREE_CODE (type) == RECORD_TYPE
|| TREE_CODE (type) == UNION_TYPE
|| TREE_CODE (type) == COMPLEX_TYPE);
@@ -1235,7 +1235,7 @@ process_init_constructor_array (tree type, tree init,
vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (init);
gcc_assert (TREE_CODE (type) == ARRAY_TYPE
- || TREE_CODE (type) == VECTOR_TYPE);
+ || VECTOR_TYPE_P (type));
if (TREE_CODE (type) == ARRAY_TYPE)
{
@@ -1571,7 +1571,7 @@ process_init_constructor (tree type, tree init, tsubst_flags_t complain)
gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
- if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
+ if (TREE_CODE (type) == ARRAY_TYPE || VECTOR_TYPE_P (type))
flags = process_init_constructor_array (type, init, complain);
else if (TREE_CODE (type) == RECORD_TYPE)
flags = process_init_constructor_record (type, init, complain);
Marek
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C++ PATCH to use VECTOR_TYPE_P
2015-06-26 10:10 C++ PATCH to use VECTOR_TYPE_P Marek Polacek
@ 2015-06-26 21:21 ` Jason Merrill
0 siblings, 0 replies; 7+ messages in thread
From: Jason Merrill @ 2015-06-26 21:21 UTC (permalink / raw)
To: Marek Polacek, GCC Patches
OK.
Jason
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VECTOR_TYPE_P
2015-06-26 17:59 ` Marek Polacek
2015-06-26 21:19 ` Joseph Myers
@ 2015-06-26 21:21 ` Jeff Law
1 sibling, 0 replies; 7+ messages in thread
From: Jeff Law @ 2015-06-26 21:21 UTC (permalink / raw)
To: Marek Polacek, Marc Glisse; +Cc: GCC Patches, Joseph Myers
On 06/26/2015 11:57 AM, Marek Polacek wrote:
> On Fri, Jun 26, 2015 at 06:02:22PM +0200, Marc Glisse wrote:
>> On Fri, 26 Jun 2015, Marek Polacek wrote:
>>
>>> - if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
>>> + if (!VECTOR_TYPE_P (TREE_TYPE (mask))
>>> || TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
>>
>> This one looks like !VECTOR_INTEGER_TYPE_P
>
> Fixed, thanks.
>
> Bootstrapped/regtested on x86_64-linux.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
>
> 2015-06-26 Marek Polacek <polacek@redhat.com>
>
> * c-common.c (check_main_parameter_types): Use VECTOR_TYPE_P
> or VECTOR_INTEGER_TYPE_P throughout.
> * c-gimplify.c: Likewise.
>
> * c-typeck.c: Use VECTOR_TYPE_P throughout.
>
ok
jeff
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VECTOR_TYPE_P
2015-06-26 17:59 ` Marek Polacek
@ 2015-06-26 21:19 ` Joseph Myers
2015-06-26 21:21 ` Jeff Law
1 sibling, 0 replies; 7+ messages in thread
From: Joseph Myers @ 2015-06-26 21:19 UTC (permalink / raw)
To: Marek Polacek; +Cc: Marc Glisse, GCC Patches
On Fri, 26 Jun 2015, Marek Polacek wrote:
> On Fri, Jun 26, 2015 at 06:02:22PM +0200, Marc Glisse wrote:
> > On Fri, 26 Jun 2015, Marek Polacek wrote:
> >
> > >- if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
> > >+ if (!VECTOR_TYPE_P (TREE_TYPE (mask))
> > > || TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
> >
> > This one looks like !VECTOR_INTEGER_TYPE_P
>
> Fixed, thanks.
>
> Bootstrapped/regtested on x86_64-linux.
>
> Bootstrapped/regtested on x86_64-linux, ok for trunk?
>
> 2015-06-26 Marek Polacek <polacek@redhat.com>
>
> * c-common.c (check_main_parameter_types): Use VECTOR_TYPE_P
> or VECTOR_INTEGER_TYPE_P throughout.
> * c-gimplify.c: Likewise.
>
> * c-typeck.c: Use VECTOR_TYPE_P throughout.
OK.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VECTOR_TYPE_P
2015-06-26 16:07 ` Marc Glisse
@ 2015-06-26 17:59 ` Marek Polacek
2015-06-26 21:19 ` Joseph Myers
2015-06-26 21:21 ` Jeff Law
0 siblings, 2 replies; 7+ messages in thread
From: Marek Polacek @ 2015-06-26 17:59 UTC (permalink / raw)
To: Marc Glisse; +Cc: GCC Patches, Joseph Myers
On Fri, Jun 26, 2015 at 06:02:22PM +0200, Marc Glisse wrote:
> On Fri, 26 Jun 2015, Marek Polacek wrote:
>
> >- if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
> >+ if (!VECTOR_TYPE_P (TREE_TYPE (mask))
> > || TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
>
> This one looks like !VECTOR_INTEGER_TYPE_P
Fixed, thanks.
Bootstrapped/regtested on x86_64-linux.
Bootstrapped/regtested on x86_64-linux, ok for trunk?
2015-06-26 Marek Polacek <polacek@redhat.com>
* c-common.c (check_main_parameter_types): Use VECTOR_TYPE_P
or VECTOR_INTEGER_TYPE_P throughout.
* c-gimplify.c: Likewise.
* c-typeck.c: Use VECTOR_TYPE_P throughout.
diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c
index b11a756..b308b09 100644
--- gcc/c-family/c-common.c
+++ gcc/c-family/c-common.c
@@ -2412,7 +2412,7 @@ check_main_parameter_types (tree decl)
bool
vector_targets_convertible_p (const_tree t1, const_tree t2)
{
- if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (t1) && VECTOR_TYPE_P (t2)
&& (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
&& tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
return true;
@@ -2500,8 +2500,7 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask,
|| mask == error_mark_node)
return error_mark_node;
- if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
- || TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
+ if (!VECTOR_INTEGER_TYPE_P (TREE_TYPE (mask)))
{
if (complain)
error_at (loc, "__builtin_shuffle last argument must "
@@ -2509,8 +2508,8 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask,
return error_mark_node;
}
- if (TREE_CODE (TREE_TYPE (v0)) != VECTOR_TYPE
- || TREE_CODE (TREE_TYPE (v1)) != VECTOR_TYPE)
+ if (!VECTOR_TYPE_P (TREE_TYPE (v0))
+ || !VECTOR_TYPE_P (TREE_TYPE (v1)))
{
if (complain)
error_at (loc, "__builtin_shuffle arguments must be vectors");
@@ -12482,7 +12481,7 @@ convert_vector_to_pointer_for_subscript (location_t loc,
tree *vecp, tree index)
{
bool ret = false;
- if (TREE_CODE (TREE_TYPE (*vecp)) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (TREE_TYPE (*vecp)))
{
tree type = TREE_TYPE (*vecp);
tree type1;
@@ -12548,8 +12547,7 @@ scalar_to_vector (location_t loc, enum tree_code code, tree op0, tree op1,
bool integer_only_op = false;
enum stv_conv ret = stv_firstarg;
- gcc_assert (TREE_CODE (type0) == VECTOR_TYPE
- || TREE_CODE (type1) == VECTOR_TYPE);
+ gcc_assert (VECTOR_TYPE_P (type0) || VECTOR_TYPE_P (type1));
switch (code)
{
/* Most GENERIC binary expressions require homogeneous arguments.
@@ -12599,7 +12597,7 @@ scalar_to_vector (location_t loc, enum tree_code code, tree op0, tree op1,
case LT_EXPR:
case GT_EXPR:
/* What about UNLT_EXPR? */
- if (TREE_CODE (type0) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (type0))
{
ret = stv_secondarg;
std::swap (type0, type1);
diff --git gcc/c-family/c-gimplify.c gcc/c-family/c-gimplify.c
index 317891f..98a6d53 100644
--- gcc/c-family/c-gimplify.c
+++ gcc/c-family/c-gimplify.c
@@ -248,7 +248,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
We should get rid of this conversion when we have a proper
type demotion/promotion pass. */
tree *op1_p = &TREE_OPERAND (*expr_p, 1);
- if (TREE_CODE (TREE_TYPE (*op1_p)) != VECTOR_TYPE
+ if (!VECTOR_TYPE_P (TREE_TYPE (*op1_p))
&& !types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (*op1_p)),
unsigned_type_node)
&& !types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (*op1_p)),
diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 9caf028..9982d61 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -2457,7 +2457,7 @@ build_array_ref (location_t loc, tree array, tree index)
if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
&& TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE
/* Allow vector[index] but not index[vector]. */
- && TREE_CODE (TREE_TYPE (array)) != VECTOR_TYPE)
+ && !VECTOR_TYPE_P (TREE_TYPE (array)))
{
if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
&& TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
@@ -6730,7 +6730,7 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype,
vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
below and handle as a constructor. */
if (code == VECTOR_TYPE
- && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
+ && VECTOR_TYPE_P (TREE_TYPE (inside_init))
&& vector_types_convertible_p (TREE_TYPE (inside_init), type, true)
&& TREE_CONSTANT (inside_init))
{
@@ -7181,7 +7181,7 @@ really_start_incremental_init (tree type)
if (type == 0)
type = TREE_TYPE (constructor_decl);
- if (TREE_CODE (type) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (type)
&& TYPE_VECTOR_OPAQUE (type))
error ("opaque vector types cannot be initialized");
@@ -7267,7 +7267,7 @@ really_start_incremental_init (tree type)
constructor_unfilled_index = constructor_index;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
@@ -7440,7 +7440,7 @@ push_init_level (location_t loc, int implicit,
constructor_unfilled_fields = constructor_fields;
constructor_bit_index = bitsize_zero_node;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
@@ -7620,7 +7620,7 @@ pop_init_level (location_t loc, int implicit,
else if (TREE_CODE (constructor_type) != RECORD_TYPE
&& TREE_CODE (constructor_type) != UNION_TYPE
&& TREE_CODE (constructor_type) != ARRAY_TYPE
- && TREE_CODE (constructor_type) != VECTOR_TYPE)
+ && !VECTOR_TYPE_P (constructor_type))
{
/* A nonincremental scalar initializer--just return
the element, after verifying there is just one. */
@@ -8770,7 +8770,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
pop_init_level (loc, 1, braced_init_obstack),
true, braced_init_obstack);
else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
- || TREE_CODE (constructor_type) == VECTOR_TYPE)
+ || VECTOR_TYPE_P (constructor_type))
&& constructor_max_index
&& tree_int_cst_lt (constructor_max_index,
constructor_index))
@@ -9040,7 +9040,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
constructor_unfilled_index. */
constructor_unfilled_index = constructor_index;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
@@ -10303,8 +10303,7 @@ build_binary_op (location_t location, enum tree_code code,
/* Do not apply default conversion in mixed vector/scalar expression. */
if (convert_p
- && !((TREE_CODE (TREE_TYPE (op0)) == VECTOR_TYPE)
- != (TREE_CODE (TREE_TYPE (op1)) == VECTOR_TYPE)))
+ && VECTOR_TYPE_P (TREE_TYPE (op0)) == VECTOR_TYPE_P (TREE_TYPE (op1)))
{
op0 = default_conversion (op0);
op1 = default_conversion (op1);
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: C PATCH to use VECTOR_TYPE_P
2015-06-26 7:58 C " Marek Polacek
@ 2015-06-26 16:07 ` Marc Glisse
2015-06-26 17:59 ` Marek Polacek
0 siblings, 1 reply; 7+ messages in thread
From: Marc Glisse @ 2015-06-26 16:07 UTC (permalink / raw)
To: Marek Polacek; +Cc: GCC Patches, Joseph Myers
On Fri, 26 Jun 2015, Marek Polacek wrote:
> - if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
> + if (!VECTOR_TYPE_P (TREE_TYPE (mask))
> || TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
This one looks like !VECTOR_INTEGER_TYPE_P
--
Marc Glisse
^ permalink raw reply [flat|nested] 7+ messages in thread
* C PATCH to use VECTOR_TYPE_P
@ 2015-06-26 7:58 Marek Polacek
2015-06-26 16:07 ` Marc Glisse
0 siblings, 1 reply; 7+ messages in thread
From: Marek Polacek @ 2015-06-26 7:58 UTC (permalink / raw)
To: GCC Patches; +Cc: Joseph Myers
This patch makes the C FE use the VECTOR_TYPE_P macro where appropriate.
The existing code in the last build_binary_op hunk was really weird...
Now the question is: do we want e.g. ARRAY_TYPE_P, etc.?
Bootstrapped/regtested on x86_64-linux, ok for trunk?
2015-06-26 Marek Polacek <polacek@redhat.com>
* c-common.c (check_main_parameter_types): Use VECTOR_TYPE_P
throughout.
* c-gimplify.c: Likewise.
* c-typeck.c: Use VECTOR_TYPE_P throughout.
diff --git gcc/c-family/c-common.c gcc/c-family/c-common.c
index 73d0c7f..5ca7f6c 100644
--- gcc/c-family/c-common.c
+++ gcc/c-family/c-common.c
@@ -2412,7 +2412,7 @@ check_main_parameter_types (tree decl)
bool
vector_targets_convertible_p (const_tree t1, const_tree t2)
{
- if (TREE_CODE (t1) == VECTOR_TYPE && TREE_CODE (t2) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (t1) && VECTOR_TYPE_P (t2)
&& (TYPE_VECTOR_OPAQUE (t1) || TYPE_VECTOR_OPAQUE (t2))
&& tree_int_cst_equal (TYPE_SIZE (t1), TYPE_SIZE (t2)))
return true;
@@ -2500,7 +2500,7 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask,
|| mask == error_mark_node)
return error_mark_node;
- if (TREE_CODE (TREE_TYPE (mask)) != VECTOR_TYPE
+ if (!VECTOR_TYPE_P (TREE_TYPE (mask))
|| TREE_CODE (TREE_TYPE (TREE_TYPE (mask))) != INTEGER_TYPE)
{
if (complain)
@@ -2509,8 +2509,8 @@ c_build_vec_perm_expr (location_t loc, tree v0, tree v1, tree mask,
return error_mark_node;
}
- if (TREE_CODE (TREE_TYPE (v0)) != VECTOR_TYPE
- || TREE_CODE (TREE_TYPE (v1)) != VECTOR_TYPE)
+ if (!VECTOR_TYPE_P (TREE_TYPE (v0))
+ || !VECTOR_TYPE_P (TREE_TYPE (v1)))
{
if (complain)
error_at (loc, "__builtin_shuffle arguments must be vectors");
@@ -12483,7 +12483,7 @@ convert_vector_to_pointer_for_subscript (location_t loc,
tree *vecp, tree index)
{
bool ret = false;
- if (TREE_CODE (TREE_TYPE (*vecp)) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (TREE_TYPE (*vecp)))
{
tree type = TREE_TYPE (*vecp);
tree type1;
@@ -12549,8 +12549,7 @@ scalar_to_vector (location_t loc, enum tree_code code, tree op0, tree op1,
bool integer_only_op = false;
enum stv_conv ret = stv_firstarg;
- gcc_assert (TREE_CODE (type0) == VECTOR_TYPE
- || TREE_CODE (type1) == VECTOR_TYPE);
+ gcc_assert (VECTOR_TYPE_P (type0) || VECTOR_TYPE_P (type1));
switch (code)
{
/* Most GENERIC binary expressions require homogeneous arguments.
@@ -12600,7 +12599,7 @@ scalar_to_vector (location_t loc, enum tree_code code, tree op0, tree op1,
case LT_EXPR:
case GT_EXPR:
/* What about UNLT_EXPR? */
- if (TREE_CODE (type0) == VECTOR_TYPE)
+ if (VECTOR_TYPE_P (type0))
{
ret = stv_secondarg;
std::swap (type0, type1);
diff --git gcc/c-family/c-gimplify.c gcc/c-family/c-gimplify.c
index 317891f..98a6d53 100644
--- gcc/c-family/c-gimplify.c
+++ gcc/c-family/c-gimplify.c
@@ -248,7 +248,7 @@ c_gimplify_expr (tree *expr_p, gimple_seq *pre_p ATTRIBUTE_UNUSED,
We should get rid of this conversion when we have a proper
type demotion/promotion pass. */
tree *op1_p = &TREE_OPERAND (*expr_p, 1);
- if (TREE_CODE (TREE_TYPE (*op1_p)) != VECTOR_TYPE
+ if (!VECTOR_TYPE_P (TREE_TYPE (*op1_p))
&& !types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (*op1_p)),
unsigned_type_node)
&& !types_compatible_p (TYPE_MAIN_VARIANT (TREE_TYPE (*op1_p)),
diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c
index 9caf028..66af203 100644
--- gcc/c/c-typeck.c
+++ gcc/c/c-typeck.c
@@ -2457,7 +2457,7 @@ build_array_ref (location_t loc, tree array, tree index)
if (TREE_CODE (TREE_TYPE (array)) != ARRAY_TYPE
&& TREE_CODE (TREE_TYPE (array)) != POINTER_TYPE
/* Allow vector[index] but not index[vector]. */
- && TREE_CODE (TREE_TYPE (array)) != VECTOR_TYPE)
+ && !VECTOR_TYPE_P (TREE_TYPE (array)))
{
if (TREE_CODE (TREE_TYPE (index)) != ARRAY_TYPE
&& TREE_CODE (TREE_TYPE (index)) != POINTER_TYPE)
@@ -6730,7 +6730,7 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype,
vector constructor is not constant (e.g. {1,2,3,foo()}) then punt
below and handle as a constructor. */
if (code == VECTOR_TYPE
- && TREE_CODE (TREE_TYPE (inside_init)) == VECTOR_TYPE
+ && VECTOR_TYPE_P (TREE_TYPE (inside_init))
&& vector_types_convertible_p (TREE_TYPE (inside_init), type, true)
&& TREE_CONSTANT (inside_init))
{
@@ -7181,7 +7181,7 @@ really_start_incremental_init (tree type)
if (type == 0)
type = TREE_TYPE (constructor_decl);
- if (TREE_CODE (type) == VECTOR_TYPE
+ if (VECTOR_TYPE_P (type)
&& TYPE_VECTOR_OPAQUE (type))
error ("opaque vector types cannot be initialized");
@@ -7267,7 +7267,7 @@ really_start_incremental_init (tree type)
constructor_unfilled_index = constructor_index;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
@@ -7440,7 +7440,7 @@ push_init_level (location_t loc, int implicit,
constructor_unfilled_fields = constructor_fields;
constructor_bit_index = bitsize_zero_node;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
/* Vectors are like simple fixed-size arrays. */
constructor_max_index =
@@ -7620,7 +7620,7 @@ pop_init_level (location_t loc, int implicit,
else if (TREE_CODE (constructor_type) != RECORD_TYPE
&& TREE_CODE (constructor_type) != UNION_TYPE
&& TREE_CODE (constructor_type) != ARRAY_TYPE
- && TREE_CODE (constructor_type) != VECTOR_TYPE)
+ && !VECTOR_TYPE_P (constructor_type))
{
/* A nonincremental scalar initializer--just return
the element, after verifying there is just one. */
@@ -8770,7 +8770,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
pop_init_level (loc, 1, braced_init_obstack),
true, braced_init_obstack);
else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
- || TREE_CODE (constructor_type) == VECTOR_TYPE)
+ || VECTOR_TYPE_P (constructor_type))
&& constructor_max_index
&& tree_int_cst_lt (constructor_max_index,
constructor_index))
@@ -9040,7 +9040,7 @@ process_init_element (location_t loc, struct c_expr value, bool implicit,
constructor_unfilled_index. */
constructor_unfilled_index = constructor_index;
}
- else if (TREE_CODE (constructor_type) == VECTOR_TYPE)
+ else if (VECTOR_TYPE_P (constructor_type))
{
tree elttype = TYPE_MAIN_VARIANT (TREE_TYPE (constructor_type));
@@ -10303,8 +10303,7 @@ build_binary_op (location_t location, enum tree_code code,
/* Do not apply default conversion in mixed vector/scalar expression. */
if (convert_p
- && !((TREE_CODE (TREE_TYPE (op0)) == VECTOR_TYPE)
- != (TREE_CODE (TREE_TYPE (op1)) == VECTOR_TYPE)))
+ && VECTOR_TYPE_P (TREE_TYPE (op0)) == VECTOR_TYPE_P (TREE_TYPE (op1)))
{
op0 = default_conversion (op0);
op1 = default_conversion (op1);
Marek
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-06-26 21:21 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-26 10:10 C++ PATCH to use VECTOR_TYPE_P Marek Polacek
2015-06-26 21:21 ` Jason Merrill
-- strict thread matches above, loose matches on Subject: below --
2015-06-26 7:58 C " Marek Polacek
2015-06-26 16:07 ` Marc Glisse
2015-06-26 17:59 ` Marek Polacek
2015-06-26 21:19 ` Joseph Myers
2015-06-26 21:21 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).