re PR tree-optimization/79256 (FAIL: gcc.dg/vect/pr25413a.c execution test)
2017-02-07 Richard Biener <rguenther@suse.de> PR tree-optimization/79256 PR middle-end/79278 * builtins.c (get_object_alignment_2): Use min_align_of_type to extract alignment for MEM_REFs to honor BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN. * doc/tm.texi.in (ADJUST_FIELD_ALIGN): Adjust to take additional type parameter. * doc/tm.texi: Regenerate. * stor-layout.c (layout_decl): Adjust. (update_alignment_for_field): Likewise. (place_field): Likewise. (min_align_of_type): Likewise. * config/arc/arc.h (ADJUST_FIELD_ALIGN): Adjust. * config/epiphany/epiphany.h (ADJUST_FIELD_ALIGN): Likewise. * config/epiphany/epiphany.c (epiphany_adjust_field_align): Likewise. * config/frv/frv.h (ADJUST_FIELD_ALIGN): Likewise. * config/frv/frv.c (frv_adjust_field_align): Likewise. * config/i386/i386.h (ADJUST_FIELD_ALIGN): Likewise. * config/i386/i386.c (x86_field_alignment): Likewise. * config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p): Likewise. go/ * go-backend.c (go_field_alignment): Adjust. libobjc/ * encoding.c (objc_layout_structure_next_member): Adjust ADJUST_FIELD_ALIGN usage. Revert 2017-01-30 Richard Biener <rguenther@suse.de> PR tree-optimization/79256 * targhooks.c (default_builtin_vector_alignment_reachable): Honor BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN to fix up bogus alignment on TYPE. From-SVN: r245245
This commit is contained in:
parent
7af4b20d83
commit
a4cf4b647c
@ -1,3 +1,41 @@
|
|||||||
|
2017-02-07 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/79256
|
||||||
|
PR middle-end/79278
|
||||||
|
* builtins.c (get_object_alignment_2): Use min_align_of_type
|
||||||
|
to extract alignment for MEM_REFs to honor BIGGEST_FIELD_ALIGNMENT
|
||||||
|
and ADJUST_FIELD_ALIGN.
|
||||||
|
|
||||||
|
* doc/tm.texi.in (ADJUST_FIELD_ALIGN): Adjust to take additional
|
||||||
|
type parameter.
|
||||||
|
* doc/tm.texi: Regenerate.
|
||||||
|
* stor-layout.c (layout_decl): Adjust.
|
||||||
|
(update_alignment_for_field): Likewise.
|
||||||
|
(place_field): Likewise.
|
||||||
|
(min_align_of_type): Likewise.
|
||||||
|
* config/arc/arc.h (ADJUST_FIELD_ALIGN): Adjust.
|
||||||
|
* config/epiphany/epiphany.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/epiphany/epiphany.c (epiphany_adjust_field_align): Likewise.
|
||||||
|
* config/frv/frv.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/frv/frv.c (frv_adjust_field_align): Likewise.
|
||||||
|
* config/i386/i386.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/i386/i386.c (x86_field_alignment): Likewise.
|
||||||
|
* config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Likewise.
|
||||||
|
* config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p):
|
||||||
|
Likewise.
|
||||||
|
|
||||||
|
Revert
|
||||||
|
2017-01-30 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/79256
|
||||||
|
* targhooks.c (default_builtin_vector_alignment_reachable): Honor
|
||||||
|
BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN to fix up bogus
|
||||||
|
alignment on TYPE.
|
||||||
|
|
||||||
2017-02-07 Toma Tabacu <toma.tabacu@imgtec.com>
|
2017-02-07 Toma Tabacu <toma.tabacu@imgtec.com>
|
||||||
|
|
||||||
* config/mips/mips.c (mips_expand_builtin_insn): Convert the QImode
|
* config/mips/mips.c (mips_expand_builtin_insn): Convert the QImode
|
||||||
|
@ -334,9 +334,11 @@ get_object_alignment_2 (tree exp, unsigned int *alignp,
|
|||||||
Do so only if get_pointer_alignment_1 did not reveal absolute
|
Do so only if get_pointer_alignment_1 did not reveal absolute
|
||||||
alignment knowledge and if using that alignment would
|
alignment knowledge and if using that alignment would
|
||||||
improve the situation. */
|
improve the situation. */
|
||||||
|
unsigned int talign;
|
||||||
if (!addr_p && !known_alignment
|
if (!addr_p && !known_alignment
|
||||||
&& TYPE_ALIGN (TREE_TYPE (exp)) > align)
|
&& (talign = min_align_of_type (TREE_TYPE (exp)) * BITS_PER_UNIT)
|
||||||
align = TYPE_ALIGN (TREE_TYPE (exp));
|
&& talign > align)
|
||||||
|
align = talign;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Else adjust bitpos accordingly. */
|
/* Else adjust bitpos accordingly. */
|
||||||
|
@ -317,8 +317,8 @@ if (GET_MODE_CLASS (MODE) == MODE_INT \
|
|||||||
construct.
|
construct.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
(TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode \
|
(TYPE_MODE (strip_array_types (TYPE)) == DFmode \
|
||||||
? MIN ((COMPUTED), 32) : (COMPUTED))
|
? MIN ((COMPUTED), 32) : (COMPUTED))
|
||||||
|
|
||||||
|
|
||||||
|
@ -2855,12 +2855,12 @@ epiphany_special_round_type_align (tree type, unsigned computed,
|
|||||||
arrays-at-the-end-of-structs work, like for struct gcov_fn_info in
|
arrays-at-the-end-of-structs work, like for struct gcov_fn_info in
|
||||||
libgcov.c . */
|
libgcov.c . */
|
||||||
unsigned
|
unsigned
|
||||||
epiphany_adjust_field_align (tree field, unsigned computed)
|
epiphany_adjust_field_align (tree type, unsigned computed)
|
||||||
{
|
{
|
||||||
if (computed == 32
|
if (computed == 32
|
||||||
&& TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
|
&& TREE_CODE (type) == ARRAY_TYPE)
|
||||||
{
|
{
|
||||||
tree elmsz = TYPE_SIZE (TREE_TYPE (TREE_TYPE (field)));
|
tree elmsz = TYPE_SIZE (TREE_TYPE (type));
|
||||||
|
|
||||||
if (!tree_fits_uhwi_p (elmsz) || tree_to_uhwi (elmsz) >= 32)
|
if (!tree_fits_uhwi_p (elmsz) || tree_to_uhwi (elmsz) >= 32)
|
||||||
return 64;
|
return 64;
|
||||||
|
@ -187,8 +187,8 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
(SPECIFIED_ALIGN)) \
|
(SPECIFIED_ALIGN)) \
|
||||||
: MAX ((MANGLED_ALIGN), (SPECIFIED_ALIGN)))
|
: MAX ((MANGLED_ALIGN), (SPECIFIED_ALIGN)))
|
||||||
|
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
epiphany_adjust_field_align((FIELD), (COMPUTED))
|
epiphany_adjust_field_align((TYPE), (COMPUTED))
|
||||||
|
|
||||||
/* Layout of source language data types. */
|
/* Layout of source language data types. */
|
||||||
|
|
||||||
|
@ -6482,7 +6482,8 @@ int
|
|||||||
frv_adjust_field_align (tree field, int computed)
|
frv_adjust_field_align (tree field, int computed)
|
||||||
{
|
{
|
||||||
/* Make sure that the bitfield is not wider than the type. */
|
/* Make sure that the bitfield is not wider than the type. */
|
||||||
if (DECL_BIT_FIELD (field)
|
if (field
|
||||||
|
&& DECL_BIT_FIELD (field)
|
||||||
&& !DECL_ARTIFICIAL (field))
|
&& !DECL_ARTIFICIAL (field))
|
||||||
{
|
{
|
||||||
tree parent = DECL_CONTEXT (field);
|
tree parent = DECL_CONTEXT (field);
|
||||||
|
@ -331,7 +331,7 @@
|
|||||||
alignment computed in the usual way is COMPUTED. GCC uses this
|
alignment computed in the usual way is COMPUTED. GCC uses this
|
||||||
value instead of the value in `BIGGEST_ALIGNMENT' or
|
value instead of the value in `BIGGEST_ALIGNMENT' or
|
||||||
`BIGGEST_FIELD_ALIGNMENT', if defined, for structure fields only. */
|
`BIGGEST_FIELD_ALIGNMENT', if defined, for structure fields only. */
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
frv_adjust_field_align (FIELD, COMPUTED)
|
frv_adjust_field_align (FIELD, COMPUTED)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -41691,10 +41691,9 @@ x86_file_start (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
x86_field_alignment (tree field, int computed)
|
x86_field_alignment (tree type, int computed)
|
||||||
{
|
{
|
||||||
machine_mode mode;
|
machine_mode mode;
|
||||||
tree type = TREE_TYPE (field);
|
|
||||||
|
|
||||||
if (TARGET_64BIT || TARGET_ALIGN_DOUBLE)
|
if (TARGET_64BIT || TARGET_ALIGN_DOUBLE)
|
||||||
return computed;
|
return computed;
|
||||||
|
@ -847,8 +847,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
|
|||||||
#define BIGGEST_FIELD_ALIGNMENT 32
|
#define BIGGEST_FIELD_ALIGNMENT 32
|
||||||
#endif
|
#endif
|
||||||
#else
|
#else
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
x86_field_alignment ((FIELD), (COMPUTED))
|
x86_field_alignment ((TYPE), (COMPUTED))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* If defined, a C expression to compute the alignment given to a
|
/* If defined, a C expression to compute the alignment given to a
|
||||||
|
@ -218,9 +218,9 @@
|
|||||||
|
|
||||||
/* This now supports a natural alignment mode. */
|
/* This now supports a natural alignment mode. */
|
||||||
/* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */
|
/* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
((TARGET_ALIGN_NATURAL == 0 \
|
((TARGET_ALIGN_NATURAL == 0 \
|
||||||
&& TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \
|
&& TYPE_MODE (strip_array_types (TYPE)) == DFmode) \
|
||||||
? MIN ((COMPUTED), 32) \
|
? MIN ((COMPUTED), 32) \
|
||||||
: (COMPUTED))
|
: (COMPUTED))
|
||||||
|
|
||||||
|
@ -319,7 +319,7 @@ extern int darwin_emit_branch_islands;
|
|||||||
suppressed for vector and long double items (both 128 in size).
|
suppressed for vector and long double items (both 128 in size).
|
||||||
There is a dummy use of the FIELD argument to avoid an unused variable
|
There is a dummy use of the FIELD argument to avoid an unused variable
|
||||||
warning (see PR59496). */
|
warning (see PR59496). */
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
((void) (FIELD), \
|
((void) (FIELD), \
|
||||||
(TARGET_ALIGN_NATURAL \
|
(TARGET_ALIGN_NATURAL \
|
||||||
? (COMPUTED) \
|
? (COMPUTED) \
|
||||||
|
@ -365,12 +365,12 @@ extern int dot_symbols;
|
|||||||
|
|
||||||
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
|
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
|
||||||
#undef ADJUST_FIELD_ALIGN
|
#undef ADJUST_FIELD_ALIGN
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
(rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
|
(rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \
|
||||||
? 128 \
|
? 128 \
|
||||||
: (TARGET_64BIT \
|
: (TARGET_64BIT \
|
||||||
&& TARGET_ALIGN_NATURAL == 0 \
|
&& TARGET_ALIGN_NATURAL == 0 \
|
||||||
&& TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \
|
&& TYPE_MODE (strip_array_types (TYPE)) == DFmode) \
|
||||||
? MIN ((COMPUTED), 32) \
|
? MIN ((COMPUTED), 32) \
|
||||||
: (COMPUTED))
|
: (COMPUTED))
|
||||||
|
|
||||||
|
@ -292,12 +292,12 @@ extern int dot_symbols;
|
|||||||
|
|
||||||
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
|
/* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */
|
||||||
#undef ADJUST_FIELD_ALIGN
|
#undef ADJUST_FIELD_ALIGN
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
(rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
|
(rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \
|
||||||
? 128 \
|
? 128 \
|
||||||
: (TARGET_64BIT \
|
: (TARGET_64BIT \
|
||||||
&& TARGET_ALIGN_NATURAL == 0 \
|
&& TARGET_ALIGN_NATURAL == 0 \
|
||||||
&& TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \
|
&& TYPE_MODE (strip_array_types (TYPE)) == DFmode) \
|
||||||
? MIN ((COMPUTED), 32) \
|
? MIN ((COMPUTED), 32) \
|
||||||
: (COMPUTED))
|
: (COMPUTED))
|
||||||
|
|
||||||
|
@ -7975,9 +7975,9 @@ rs6000_data_alignment (tree type, unsigned int align, enum data_align how)
|
|||||||
/* Previous GCC releases forced all vector types to have 16-byte alignment. */
|
/* Previous GCC releases forced all vector types to have 16-byte alignment. */
|
||||||
|
|
||||||
bool
|
bool
|
||||||
rs6000_special_adjust_field_align_p (tree field, unsigned int computed)
|
rs6000_special_adjust_field_align_p (tree type, unsigned int computed)
|
||||||
{
|
{
|
||||||
if (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE)
|
if (TARGET_ALTIVEC && TREE_CODE (type) == VECTOR_TYPE)
|
||||||
{
|
{
|
||||||
if (computed != 128)
|
if (computed != 128)
|
||||||
{
|
{
|
||||||
|
@ -298,8 +298,8 @@ do { \
|
|||||||
|
|
||||||
/* An expression for the alignment of a structure field FIELD if the
|
/* An expression for the alignment of a structure field FIELD if the
|
||||||
alignment computed in the usual way is COMPUTED. */
|
alignment computed in the usual way is COMPUTED. */
|
||||||
#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \
|
#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \
|
||||||
(rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \
|
(rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \
|
||||||
? 128 : COMPUTED)
|
? 128 : COMPUTED)
|
||||||
|
|
||||||
#undef BIGGEST_FIELD_ALIGNMENT
|
#undef BIGGEST_FIELD_ALIGNMENT
|
||||||
|
@ -1042,13 +1042,15 @@ structure and union fields only, unless the field alignment has been set
|
|||||||
by the @code{__attribute__ ((aligned (@var{n})))} construct.
|
by the @code{__attribute__ ((aligned (@var{n})))} construct.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{computed})
|
@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{type}, @var{computed})
|
||||||
An expression for the alignment of a structure field @var{field} if the
|
An expression for the alignment of a structure field @var{field} of
|
||||||
alignment computed in the usual way (including applying of
|
type @var{type} if the alignment computed in the usual way (including
|
||||||
@code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the
|
applying of @code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the
|
||||||
alignment) is @var{computed}. It overrides alignment only if the
|
alignment) is @var{computed}. It overrides alignment only if the
|
||||||
field alignment has not been set by the
|
field alignment has not been set by the
|
||||||
@code{__attribute__ ((aligned (@var{n})))} construct.
|
@code{__attribute__ ((aligned (@var{n})))} construct. Note that @var{field}
|
||||||
|
may be @code{NULL_TREE} in case we just query for the minimum alignment
|
||||||
|
of a field of type @var{type} in structure context.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
@defmac MAX_STACK_ALIGNMENT
|
@defmac MAX_STACK_ALIGNMENT
|
||||||
|
@ -990,13 +990,15 @@ structure and union fields only, unless the field alignment has been set
|
|||||||
by the @code{__attribute__ ((aligned (@var{n})))} construct.
|
by the @code{__attribute__ ((aligned (@var{n})))} construct.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{computed})
|
@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{type}, @var{computed})
|
||||||
An expression for the alignment of a structure field @var{field} if the
|
An expression for the alignment of a structure field @var{field} of
|
||||||
alignment computed in the usual way (including applying of
|
type @var{type} if the alignment computed in the usual way (including
|
||||||
@code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the
|
applying of @code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the
|
||||||
alignment) is @var{computed}. It overrides alignment only if the
|
alignment) is @var{computed}. It overrides alignment only if the
|
||||||
field alignment has not been set by the
|
field alignment has not been set by the
|
||||||
@code{__attribute__ ((aligned (@var{n})))} construct.
|
@code{__attribute__ ((aligned (@var{n})))} construct. Note that @var{field}
|
||||||
|
may be @code{NULL_TREE} in case we just query for the minimum alignment
|
||||||
|
of a field of type @var{type} in structure context.
|
||||||
@end defmac
|
@end defmac
|
||||||
|
|
||||||
@defmac MAX_STACK_ALIGNMENT
|
@defmac MAX_STACK_ALIGNMENT
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2017-02-07 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/79256
|
||||||
|
PR middle-end/79278
|
||||||
|
* go-backend.c (go_field_alignment): Adjust.
|
||||||
|
|
||||||
2017-01-11 Than McIntosh <thanm@google.com>
|
2017-01-11 Than McIntosh <thanm@google.com>
|
||||||
|
|
||||||
* go-gcc.cc (conditional_expression): Add Bfunction parameter.
|
* go-gcc.cc (conditional_expression): Add Bfunction parameter.
|
||||||
|
@ -71,11 +71,7 @@ go_field_alignment (tree t)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
{
|
v = ADJUST_FIELD_ALIGN (NULL_TREE, t, v);
|
||||||
tree field ATTRIBUTE_UNUSED;
|
|
||||||
field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL, t);
|
|
||||||
v = ADJUST_FIELD_ALIGN (field, v);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return v / BITS_PER_UNIT;
|
return v / BITS_PER_UNIT;
|
||||||
|
@ -718,7 +718,8 @@ layout_decl (tree decl, unsigned int known_align)
|
|||||||
(unsigned) BIGGEST_FIELD_ALIGNMENT));
|
(unsigned) BIGGEST_FIELD_ALIGNMENT));
|
||||||
#endif
|
#endif
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
SET_DECL_ALIGN (decl, ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl)));
|
SET_DECL_ALIGN (decl, ADJUST_FIELD_ALIGN (decl, TREE_TYPE (decl),
|
||||||
|
DECL_ALIGN (decl)));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1032,7 +1033,7 @@ update_alignment_for_field (record_layout_info rli, tree field,
|
|||||||
|
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
if (! TYPE_USER_ALIGN (type))
|
if (! TYPE_USER_ALIGN (type))
|
||||||
type_align = ADJUST_FIELD_ALIGN (field, type_align);
|
type_align = ADJUST_FIELD_ALIGN (field, type, type_align);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Targets might chose to handle unnamed and hence possibly
|
/* Targets might chose to handle unnamed and hence possibly
|
||||||
@ -1260,7 +1261,7 @@ place_field (record_layout_info rli, tree field)
|
|||||||
|
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
if (! TYPE_USER_ALIGN (type))
|
if (! TYPE_USER_ALIGN (type))
|
||||||
type_align = ADJUST_FIELD_ALIGN (field, type_align);
|
type_align = ADJUST_FIELD_ALIGN (field, type, type_align);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* A bit field may not span more units of alignment of its type
|
/* A bit field may not span more units of alignment of its type
|
||||||
@ -1303,7 +1304,7 @@ place_field (record_layout_info rli, tree field)
|
|||||||
|
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
if (! TYPE_USER_ALIGN (type))
|
if (! TYPE_USER_ALIGN (type))
|
||||||
type_align = ADJUST_FIELD_ALIGN (field, type_align);
|
type_align = ADJUST_FIELD_ALIGN (field, type, type_align);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (maximum_field_alignment != 0)
|
if (maximum_field_alignment != 0)
|
||||||
@ -2411,9 +2412,7 @@ min_align_of_type (tree type)
|
|||||||
#endif
|
#endif
|
||||||
unsigned int field_align = align;
|
unsigned int field_align = align;
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE, type);
|
field_align = ADJUST_FIELD_ALIGN (NULL_TREE, type, field_align);
|
||||||
field_align = ADJUST_FIELD_ALIGN (field, field_align);
|
|
||||||
ggc_free (field);
|
|
||||||
#endif
|
#endif
|
||||||
align = MIN (align, field_align);
|
align = MIN (align, field_align);
|
||||||
}
|
}
|
||||||
|
@ -1130,14 +1130,9 @@ default_vector_alignment (const_tree type)
|
|||||||
/* By default assume vectors of element TYPE require a multiple of the natural
|
/* By default assume vectors of element TYPE require a multiple of the natural
|
||||||
alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */
|
alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */
|
||||||
bool
|
bool
|
||||||
default_builtin_vector_alignment_reachable (const_tree type, bool is_packed)
|
default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed)
|
||||||
{
|
{
|
||||||
if (is_packed)
|
return ! is_packed;
|
||||||
return false;
|
|
||||||
|
|
||||||
/* If TYPE can be differently aligned in field context we have to punt
|
|
||||||
as TYPE may have wrong TYPE_ALIGN here (PR79278). */
|
|
||||||
return min_align_of_type (CONST_CAST_TREE (type)) == TYPE_ALIGN_UNIT (type);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* By default, assume that a target supports any factor of misalignment
|
/* By default, assume that a target supports any factor of misalignment
|
||||||
|
@ -1,3 +1,10 @@
|
|||||||
|
2017-02-07 Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
PR tree-optimization/79256
|
||||||
|
PR middle-end/79278
|
||||||
|
* encoding.c (objc_layout_structure_next_member): Adjust
|
||||||
|
ADJUST_FIELD_ALIGN usage.
|
||||||
|
|
||||||
2017-01-18 Matthias Klose <doko@ubuntu.com>
|
2017-01-18 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
PR libobjc/78697
|
PR libobjc/78697
|
||||||
|
@ -1159,7 +1159,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout)
|
|||||||
desired_align = MIN (desired_align, BIGGEST_FIELD_ALIGNMENT);
|
desired_align = MIN (desired_align, BIGGEST_FIELD_ALIGNMENT);
|
||||||
#endif
|
#endif
|
||||||
#ifdef ADJUST_FIELD_ALIGN
|
#ifdef ADJUST_FIELD_ALIGN
|
||||||
desired_align = ADJUST_FIELD_ALIGN (type, desired_align);
|
desired_align = ADJUST_FIELD_ALIGN (type, type, desired_align);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Record must have at least as much alignment as any field.
|
/* Record must have at least as much alignment as any field.
|
||||||
|
Loading…
Reference in New Issue
Block a user