diff options
author | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-10 16:31:29 +0000 |
---|---|---|
committer | froydnj <froydnj@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-10 16:31:29 +0000 |
commit | 33a0b99de74c4501be779f6b694100b45e6bcc45 (patch) | |
tree | 5057b605e5e082279e2ea302cde5316635f1c7c1 | |
parent | f7f05a07345b516fb8f855e8db9c30cf51a84f83 (diff) | |
download | gcc-33a0b99de74c4501be779f6b694100b45e6bcc45.tar.gz |
gcc/
* tree.h (tree_base): Add packed_flag and user_align fields.
Decrease size of spare field.
(TYPE_USER_ALIGN): Use user_align from tree_base.
(DECL_USER_ALIGN): Likewise.
(TYPE_PACKED): Use packed_flag from tree_base.
(DECL_PACKED): Likewise.
(tree_type): Delete packed_flag and user_align fields. Widen
precision field. Widen mode field and shuffle fields to align
mode on an 8-bit boundary.
(tree_decl_common): Delete decl_flag_1 and user_align fields.
Renumber decl_flag_* fields. Fix comments. Widen
decl_common_unused field.
(DECL_HAS_VALUE_EXPR_P): Adjust for renumbering of decl_flag_*
fields.
(DECL_EXTERNAL): Likewise.
(DECL_BIT_FIELD): Likewise.
(DECL_NONADDRESSABLE_P): Likewise.
(TYPE_DECL_SUPRESS_DEBUG): Likewise.
* config/arm/arm-modes.def (XImode): Make it an INT_MODE.
gcc/testsuite/
* gcc.target/arm/neon-modes-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148348 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 22 | ||||
-rw-r--r-- | gcc/config/arm/arm-modes.def | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/neon-modes-1.c | 14 | ||||
-rw-r--r-- | gcc/tree.h | 45 |
5 files changed, 62 insertions, 27 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6e4a25f1d15..c3fe425cbaf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,25 @@ +2009-06-10 Nathan Froyd <froydnj@codesourcery.com> + + * tree.h (tree_base): Add packed_flag and user_align fields. + Decrease size of spare field. + (TYPE_USER_ALIGN): Use user_align from tree_base. + (DECL_USER_ALIGN): Likewise. + (TYPE_PACKED): Use packed_flag from tree_base. + (DECL_PACKED): Likewise. + (tree_type): Delete packed_flag and user_align fields. Widen + precision field. Widen mode field and shuffle fields to align + mode on an 8-bit boundary. + (tree_decl_common): Delete decl_flag_1 and user_align fields. + Renumber decl_flag_* fields. Fix comments. Widen + decl_common_unused field. + (DECL_HAS_VALUE_EXPR_P): Adjust for renumbering of decl_flag_* + fields. + (DECL_EXTERNAL): Likewise. + (DECL_BIT_FIELD): Likewise. + (DECL_NONADDRESSABLE_P): Likewise. + (TYPE_DECL_SUPRESS_DEBUG): Likewise. + * config/arm/arm-modes.def (XImode): Make it an INT_MODE. + 2009-06-10 Ian Lance Taylor <iant@google.com> * vec.h (DEF_VEC_ALLOC_I): Use DEF_VEC_NONALLOC_FUNCS_I. diff --git a/gcc/config/arm/arm-modes.def b/gcc/config/arm/arm-modes.def index 0ff876f62df..73b5b4d3d0d 100644 --- a/gcc/config/arm/arm-modes.def +++ b/gcc/config/arm/arm-modes.def @@ -62,6 +62,4 @@ VECTOR_MODES (FLOAT, 16); /* V8HF V4SF V2DF */ INT_MODE (EI, 24); INT_MODE (OI, 32); INT_MODE (CI, 48); -/* ??? This should actually have 512 bits but the precision only has 9 - bits. */ -FRACTIONAL_INT_MODE (XI, 511, 64); +INT_MODE (XI, 64); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index da1fef205f2..0a0f7bb0a7f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-06-10 Nathan Froyd <froydnj@codesourcery.com> + + * gcc.target/arm/neon-modes-1.c: New test. + 2009-06-10 Kai Tietz <kai.tietz@onevision.com> * g++.dg/torture/pr31579.C: Cast pointer diff --git a/gcc/testsuite/gcc.target/arm/neon-modes-1.c b/gcc/testsuite/gcc.target/arm/neon-modes-1.c new file mode 100644 index 00000000000..6ee13af0142 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/neon-modes-1.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_neon_ok } */ +/* { dg-options "-O1" } */ +/* { dg-add-options arm_neon } */ + +#include <arm_neon.h> + +void neon_internal_error(int *dst, int *src) +{ + uint16x8x4_t sval; + + sval = vld4q_u16((void *)src); + vst4q_u16((void *)dst,sval); +} diff --git a/gcc/tree.h b/gcc/tree.h index d88d85f18c0..3f695fddab4 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -373,8 +373,10 @@ struct GTY(()) tree_base { unsigned lang_flag_6 : 1; unsigned visited : 1; + unsigned packed_flag : 1; + unsigned user_align : 1; - unsigned spare : 23; + unsigned spare : 21; union tree_ann_d *ann; }; @@ -2108,7 +2110,7 @@ extern enum machine_mode vector_type_mode (const_tree); /* 1 if the alignment for this type was requested by "aligned" attribute, 0 if it is the default for this type. */ -#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->type.user_align) +#define TYPE_USER_ALIGN(NODE) (TYPE_CHECK (NODE)->common.base.user_align) /* The alignment for NODE, in bytes. */ #define TYPE_ALIGN_UNIT(NODE) (TYPE_ALIGN (NODE) / BITS_PER_UNIT) @@ -2219,7 +2221,7 @@ extern enum machine_mode vector_type_mode (const_tree); /* Indicated that objects of this type should be laid out in as compact a way as possible. */ -#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->type.packed_flag) +#define TYPE_PACKED(NODE) (TYPE_CHECK (NODE)->common.base.packed_flag) /* Used by type_contains_placeholder_p to avoid recomputation. Values are: 0 (unknown), 1 (false), 2 (true). Never access @@ -2237,17 +2239,16 @@ struct GTY(()) tree_type { tree attributes; unsigned int uid; - unsigned int precision : 9; - ENUM_BITFIELD(machine_mode) mode : 7; - - unsigned string_flag : 1; + unsigned int precision : 10; unsigned no_force_blk_flag : 1; unsigned needs_constructing_flag : 1; unsigned transparent_union_flag : 1; - unsigned packed_flag : 1; unsigned restrict_flag : 1; unsigned contains_placeholder_bits : 2; + ENUM_BITFIELD(machine_mode) mode : 8; + + unsigned string_flag : 1; unsigned lang_flag_0 : 1; unsigned lang_flag_1 : 1; unsigned lang_flag_2 : 1; @@ -2255,7 +2256,6 @@ struct GTY(()) tree_type { unsigned lang_flag_4 : 1; unsigned lang_flag_5 : 1; unsigned lang_flag_6 : 1; - unsigned user_align : 1; unsigned int align; alias_set_type alias_set; @@ -2509,7 +2509,7 @@ struct GTY(()) tree_decl_minimal { #define DECL_ALIGN_UNIT(NODE) (DECL_ALIGN (NODE) / BITS_PER_UNIT) /* Set if the alignment of this DECL has been set by the user, for example with an 'aligned' attribute. */ -#define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.user_align) +#define DECL_USER_ALIGN(NODE) (DECL_COMMON_CHECK (NODE)->common.base.user_align) /* Holds the machine mode corresponding to the declaration of a variable or field. Always equal to TYPE_MODE (TREE_TYPE (decl)) except for a FIELD_DECL. */ @@ -2546,7 +2546,7 @@ struct GTY(()) tree_decl_minimal { example, for a FUNCTION_DECL, DECL_SAVED_TREE may be non-NULL and DECL_EXTERNAL may be true simultaneously; that can be the case for a C99 "extern inline" function. */ -#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_2) +#define DECL_EXTERNAL(NODE) (DECL_COMMON_CHECK (NODE)->decl_common.decl_flag_1) /* Nonzero in a ..._DECL means this variable is ref'd from a nested function. For VAR_DECL nodes, PARM_DECL nodes, and FUNCTION_DECL nodes. @@ -2615,7 +2615,6 @@ struct GTY(()) tree_decl_common { unsigned ignored_flag : 1; unsigned abstract_flag : 1; unsigned artificial_flag : 1; - unsigned user_align : 1; unsigned preserve_flag: 1; unsigned debug_expr_is_from : 1; @@ -2631,22 +2630,20 @@ struct GTY(()) tree_decl_common { /* In LABEL_DECL, this is DECL_ERROR_ISSUED. In VAR_DECL and PARM_DECL, this is DECL_REGISTER. */ unsigned decl_flag_0 : 1; - /* In FIELD_DECL, this is DECL_PACKED. */ - unsigned decl_flag_1 : 1; /* In FIELD_DECL, this is DECL_BIT_FIELD In VAR_DECL and FUNCTION_DECL, this is DECL_EXTERNAL. - In TYPE_DECL, this is TYPE_DECL_SUPRESS_DEBUG. */ - unsigned decl_flag_2 : 1; + In TYPE_DECL, this is TYPE_DECL_SUPPRESS_DEBUG. */ + unsigned decl_flag_1 : 1; /* In FIELD_DECL, this is DECL_NONADDRESSABLE_P - In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR. */ - unsigned decl_flag_3 : 1; + In VAR_DECL and PARM_DECL, this is DECL_HAS_VALUE_EXPR_P. */ + unsigned decl_flag_2 : 1; /* Logically, these two would go in a theoretical base shared by var and parm decl. */ unsigned gimple_reg_flag : 1; /* In VAR_DECL, PARM_DECL and RESULT_DECL, this is DECL_BY_REFERENCE. */ unsigned decl_by_reference_flag : 1; /* Padding so that 'off_align' can be on a 32-bit boundary. */ - unsigned decl_common_unused : 2; + unsigned decl_common_unused : 4; /* DECL_OFFSET_ALIGN, used only for FIELD_DECLs. */ unsigned int off_align : 8; @@ -2672,7 +2669,7 @@ extern void decl_value_expr_insert (tree, tree); decl itself. This should only be used for debugging; once this field has been set, the decl itself may not legitimately appear in the function. */ #define DECL_HAS_VALUE_EXPR_P(NODE) \ - (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_3) + (TREE_CHECK2 (NODE, VAR_DECL, PARM_DECL)->decl_common.decl_flag_2) #define DECL_VALUE_EXPR(NODE) \ (decl_value_expr_lookup (DECL_WRTL_CHECK (NODE))) #define SET_DECL_VALUE_EXPR(NODE, VAL) \ @@ -2750,11 +2747,11 @@ struct GTY(()) tree_decl_with_rtl { #define DECL_FCONTEXT(NODE) (FIELD_DECL_CHECK (NODE)->field_decl.fcontext) /* In a FIELD_DECL, indicates this field should be bit-packed. */ -#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1) +#define DECL_PACKED(NODE) (FIELD_DECL_CHECK (NODE)->common.base.packed_flag) /* Nonzero in a FIELD_DECL means it is a bit field, and must be accessed specially. */ -#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) +#define DECL_BIT_FIELD(NODE) (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_1) /* Used in a FIELD_DECL to indicate that we cannot form the address of this component. This makes it possible for Type-Based Alias Analysis @@ -2772,7 +2769,7 @@ struct GTY(()) tree_decl_with_rtl { accesses to s.i must not be given the alias set of the type of 'i' (int) but instead directly that of the type of 's' (struct S). */ #define DECL_NONADDRESSABLE_P(NODE) \ - (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_3) + (FIELD_DECL_CHECK (NODE)->decl_common.decl_flag_2) struct GTY(()) tree_field_decl { struct tree_decl_common common; @@ -3242,7 +3239,7 @@ struct GTY(()) tree_function_decl { into stabs. Instead it will generate cross reference ('x') of names. This uses the same flag as DECL_EXTERNAL. */ #define TYPE_DECL_SUPPRESS_DEBUG(NODE) \ - (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_2) + (TYPE_DECL_CHECK (NODE)->decl_common.decl_flag_1) /* Getter of the imported declaration associated to the IMPORTED_DECL node. */ |