+2008-05-25 Alan Modra <amodra@bigpond.net.au>
+
+ * 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 <hongjiu.lu@intel.com>
* config/i386/i386.md (*sse_prologue_save_insn): Set length
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)
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);
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)
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))
{
/* 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. */
? 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))
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);
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. */
+2008-05-25 Alan Modra <amodra@bigpond.net.au>
+
+ * encoding.c (strip_array_types): Rename from get_inner_array_type.
+ (rs6000_special_round_type_align): Update.
+
2008-05-09 Julian Brown <julian@codesourcery.com>
* Makefile.in (LTLDFLAGS): New.
#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))\
#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