diff options
Diffstat (limited to 'gcc/tree.h')
-rw-r--r-- | gcc/tree.h | 35 |
1 files changed, 30 insertions, 5 deletions
@@ -1008,10 +1008,24 @@ extern void omp_clause_range_check_failed (const_tree, const char *, int, #define TREE_REALPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.real) #define TREE_IMAGPART(NODE) (COMPLEX_CST_CHECK (NODE)->complex.imag) -/* In a VECTOR_CST node. */ -#define VECTOR_CST_NELTS(NODE) (VECTOR_CST_CHECK (NODE)->base.u.nelts) -#define VECTOR_CST_ELTS(NODE) (VECTOR_CST_CHECK (NODE)->vector.elts) -#define VECTOR_CST_ELT(NODE,IDX) (VECTOR_CST_CHECK (NODE)->vector.elts[IDX]) +/* In a VECTOR_CST node. See generic.texi for details. */ +#define VECTOR_CST_NELTS(NODE) (TYPE_VECTOR_SUBPARTS (TREE_TYPE (NODE))) +#define VECTOR_CST_ELT(NODE,IDX) vector_cst_elt (NODE, IDX) + +#define VECTOR_CST_LOG2_NPATTERNS(NODE) \ + (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.log2_npatterns) +#define VECTOR_CST_NPATTERNS(NODE) \ + (1U << VECTOR_CST_LOG2_NPATTERNS (NODE)) +#define VECTOR_CST_NELTS_PER_PATTERN(NODE) \ + (VECTOR_CST_CHECK (NODE)->base.u.vector_cst.nelts_per_pattern) +#define VECTOR_CST_DUPLICATE_P(NODE) \ + (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 1) +#define VECTOR_CST_STEPPED_P(NODE) \ + (VECTOR_CST_NELTS_PER_PATTERN (NODE) == 3) +#define VECTOR_CST_ENCODED_ELTS(NODE) \ + (VECTOR_CST_CHECK (NODE)->vector.elts) +#define VECTOR_CST_ENCODED_ELT(NODE, ELT) \ + (VECTOR_CST_CHECK (NODE)->vector.elts[ELT]) /* Define fields and accessors for some special-purpose tree nodes. */ @@ -3882,6 +3896,14 @@ id_equal (const char *str, const_tree id) ((NODE) == error_mark_node \ || ((NODE) && TREE_TYPE ((NODE)) == error_mark_node)) +/* Return the number of elements encoded directly in a VECTOR_CST. */ + +inline unsigned int +vector_cst_encoded_nelts (const_tree t) +{ + return VECTOR_CST_NPATTERNS (t) * VECTOR_CST_NELTS_PER_PATTERN (t); +} + extern tree decl_assembler_name (tree); extern void overwrite_decl_assembler_name (tree decl, tree name); extern tree decl_comdat_group (const_tree); @@ -4021,7 +4043,7 @@ extern tree force_fit_type (tree, const wide_int_ref &, int, bool); extern tree build_int_cst (tree, HOST_WIDE_INT); extern tree build_int_cstu (tree type, unsigned HOST_WIDE_INT cst); extern tree build_int_cst_type (tree, HOST_WIDE_INT); -extern tree make_vector (unsigned CXX_MEM_STAT_INFO); +extern tree make_vector (unsigned, unsigned CXX_MEM_STAT_INFO); extern tree build_vector (tree, vec<tree> CXX_MEM_STAT_INFO); extern tree build_vector_from_ctor (tree, vec<constructor_elt, va_gc> *); extern tree build_vector_from_val (tree, tree); @@ -4268,6 +4290,9 @@ extern tree first_field (const_tree); extern bool initializer_zerop (const_tree); +extern wide_int vector_cst_int_elt (const_tree, unsigned int); +extern tree vector_cst_elt (const_tree, unsigned int); + /* Given a vector VEC, return its first element if all elements are the same. Otherwise return NULL_TREE. */ |