From: Alan Modra Date: Sun, 25 May 2008 03:58:15 +0000 (+0000) Subject: Delete get_inner_array_type. Use strip_array_types instead. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=dd25a747c916bf685457171d18712bbff325babc;p=gcc.git Delete get_inner_array_type. Use strip_array_types instead. From-SVN: r135858 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c0162f0f3e..5c4a0b3ebdb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2008-05-25 Alan Modra + + * c-common.c (strip_array_types): Move function to.. + * tree.c: ..here. + (get_inner_array_type): Delete. + * c-common.h (strip_array_types): Move declaration to.. + * tree.h: ..here. + (get_inner_array_type): Delete. + * config/i386/i386.c (x86_field_alignment): Use strip_array_types. + * config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise. + * config/pa/pa.c (emit_move_sequence): Likewise. + 2008-05-24 H.J. Lu * config/i386/i386.md (*sse_prologue_save_insn): Set length diff --git a/gcc/c-common.c b/gcc/c-common.c index 70ba5cc4851..c02b442c7aa 100644 --- a/gcc/c-common.c +++ b/gcc/c-common.c @@ -4173,18 +4173,6 @@ self_promoting_args_p (const_tree parms) return 1; } -/* Recursively examines the array elements of TYPE, until a non-array - element type is found. */ - -tree -strip_array_types (tree type) -{ - while (TREE_CODE (type) == ARRAY_TYPE) - type = TREE_TYPE (type); - - return type; -} - /* Recursively remove any '*' or '&' operator from TYPE. */ tree strip_pointer_operator (tree t) diff --git a/gcc/c-common.h b/gcc/c-common.h index c403bee6343..ea692230bf0 100644 --- a/gcc/c-common.h +++ b/gcc/c-common.h @@ -738,7 +738,6 @@ extern alias_set_type c_common_get_alias_set (tree); extern void c_register_builtin_type (tree, const char*); extern bool c_promoting_integer_type_p (const_tree); extern int self_promoting_args_p (const_tree); -extern tree strip_array_types (tree); extern tree strip_pointer_operator (tree); extern tree strip_pointer_or_array_types (tree); extern HOST_WIDE_INT c_common_to_target_charset (HOST_WIDE_INT); diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 0f140c8adf7..369ae584867 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -23225,8 +23225,7 @@ x86_field_alignment (tree field, int computed) if (TARGET_64BIT || TARGET_ALIGN_DOUBLE) return computed; - mode = TYPE_MODE (TREE_CODE (type) == ARRAY_TYPE - ? get_inner_array_type (type) : type); + mode = TYPE_MODE (strip_array_types (type)); if (mode == DFmode || mode == DCmode || GET_MODE_CLASS (mode) == MODE_INT || GET_MODE_CLASS (mode) == MODE_COMPLEX_INT) diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 10c50ffcf12..009f5faf10c 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1712,8 +1712,7 @@ emit_move_sequence (rtx *operands, enum machine_mode mode, rtx scratch_reg) decl = TREE_OPERAND (decl, 1); type = TREE_TYPE (decl); - if (TREE_CODE (type) == ARRAY_TYPE) - type = get_inner_array_type (type); + type = strip_array_types (type); if (POINTER_TYPE_P (type)) { diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h index 99587bb9b95..09e0fe507cf 100644 --- a/gcc/config/rs6000/aix.h +++ b/gcc/config/rs6000/aix.h @@ -158,11 +158,10 @@ /* This now supports a natural alignment mode. */ /* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */ #define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - (TARGET_ALIGN_NATURAL ? (COMPUTED) : \ - (TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \ - ? get_inner_array_type (FIELD) \ - : TREE_TYPE (FIELD)) == DFmode \ - ? MIN ((COMPUTED), 32) : (COMPUTED))) + ((TARGET_ALIGN_NATURAL == 0 \ + && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \ + ? MIN ((COMPUTED), 32) \ + : (COMPUTED)) /* AIX increases natural record alignment to doubleword if the first field is an FP double while the FP fields remain word aligned. */ diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index eea5fd73e87..e83e0e9697a 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -217,9 +217,7 @@ extern int dot_symbols; ? 128 \ : (TARGET_64BIT \ && TARGET_ALIGN_NATURAL == 0 \ - && TYPE_MODE (TREE_CODE (TREE_TYPE (FIELD)) == ARRAY_TYPE \ - ? get_inner_array_type (FIELD) \ - : TREE_TYPE (FIELD)) == DFmode) \ + && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \ ? MIN ((COMPUTED), 32) \ : (COMPUTED)) diff --git a/gcc/tree.c b/gcc/tree.c index 51eba929ff5..38e06938968 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -5682,14 +5682,12 @@ build_array_type (tree elt_type, tree index_type) return t; } -/* Return the TYPE of the elements comprising - the innermost dimension of ARRAY. */ +/* Recursively examines the array elements of TYPE, until a non-array + element type is found. */ tree -get_inner_array_type (const_tree array) +strip_array_types (tree type) { - tree type = TREE_TYPE (array); - while (TREE_CODE (type) == ARRAY_TYPE) type = TREE_TYPE (type); diff --git a/gcc/tree.h b/gcc/tree.h index 0618d0ab52e..6b609fdd2e0 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -4011,7 +4011,7 @@ extern int tree_int_cst_sign_bit (const_tree); extern bool tree_expr_nonnegative_p (tree); extern bool tree_expr_nonnegative_warnv_p (tree, bool *); extern bool may_negate_without_overflow_p (const_tree); -extern tree get_inner_array_type (const_tree); +extern tree strip_array_types (tree); /* Construct various nodes representing fract or accum data types. */ diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 046b652248b..df30eaae50c 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,8 @@ +2008-05-25 Alan Modra + + * encoding.c (strip_array_types): Rename from get_inner_array_type. + (rs6000_special_round_type_align): Update. + 2008-05-09 Julian Brown * Makefile.in (LTLDFLAGS): New. diff --git a/libobjc/encoding.c b/libobjc/encoding.c index e65634103aa..93395ddaffc 100644 --- a/libobjc/encoding.c +++ b/libobjc/encoding.c @@ -78,7 +78,7 @@ Boston, MA 02110-1301, USA. */ #define DFmode _C_DBL -#define get_inner_array_type(TYPE) ({const char *_field = (TYPE); \ +#define strip_array_types(TYPE) ({const char *_field = (TYPE); \ while (*_field == _C_ARY_B)\ {\ while (isdigit ((unsigned char)*++_field))\ @@ -115,9 +115,7 @@ static int __attribute__ ((__unused__)) not_target_flags = 0; #define rs6000_special_round_type_align(STRUCT, COMPUTED, SPECIFIED) \ ({ const char *_fields = TYPE_FIELDS (STRUCT); \ ((_fields != 0 \ - && TYPE_MODE (TREE_CODE (TREE_TYPE (_fields)) == ARRAY_TYPE \ - ? get_inner_array_type (_fields) \ - : TREE_TYPE (_fields)) == DFmode) \ + && TYPE_MODE (strip_array_types (TREE_TYPE (_fields))) == DFmode) \ ? MAX (MAX (COMPUTED, SPECIFIED), 64) \ : MAX (COMPUTED, SPECIFIED));}) /* FIXME: The word 'fixme' is insufficient to explain the wrong-ness