tree-streamer-in.c (unpack_ts_decl_common_value_fields, [...]): If ACCEL_COMPILER, restrict alignments to absolute_biggest_alignment.

* tree-streamer-in.c (unpack_ts_decl_common_value_fields,
	unpack_ts_type_common_value_fields): If ACCEL_COMPILER,
	restrict alignments to absolute_biggest_alignment.
	* config/i386/i386.c (TARGET_ABSOLUTE_BIGGEST_ALIGNMENT):
	Define.
	* doc/tm.texi.in (TARGET_ABSOLUTE_BIGGEST_ALIGNMENT): Add.
	* doc/tm.texi: Regenerate.
	* target.def (absolute_biggest_alignment): New DEFHOOKPOD.

From-SVN: r220882
This commit is contained in:
Bernd Schmidt 2015-02-21 00:06:53 +00:00 committed by Bernd Schmidt
parent b56ac9d5f4
commit 6d2b71997e
7 changed files with 41 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2015-02-20 Bernd Schmidt <bernds@codesourcery.com>
* tree-streamer-in.c (unpack_ts_decl_common_value_fields,
unpack_ts_type_common_value_fields): If ACCEL_COMPILER,
restrict alignments to absolute_biggest_alignment.
* config/i386/i386.c (TARGET_ABSOLUTE_BIGGEST_ALIGNMENT):
Define.
* doc/tm.texi.in (TARGET_ABSOLUTE_BIGGEST_ALIGNMENT): Add.
* doc/tm.texi: Regenerate.
* target.def (absolute_biggest_alignment): New DEFHOOKPOD.
2015-02-20 Vladimir Makarov <vmakarov@redhat.com>
PR target/64172

View File

@ -52131,6 +52131,9 @@ ix86_initialize_bounds (tree var, tree lb, tree ub, tree *stmts)
#define TARGET_OFFLOAD_OPTIONS \
ix86_offload_options
#undef TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
#define TARGET_ABSOLUTE_BIGGEST_ALIGNMENT 512
struct gcc_target targetm = TARGET_INITIALIZER;
#include "gt-i386.h"

View File

@ -795,7 +795,10 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
rounder than this.
Pentium+ prefers DFmode values to be aligned to 64 bit boundary
and Pentium Pro XFmode values at 128 bit boundaries. */
and Pentium Pro XFmode values at 128 bit boundaries.
When increasing the maximum, also update
TARGET_ABSOLUTE_BIGGEST_ALIGNMENT. */
#define BIGGEST_ALIGNMENT \
(TARGET_AVX512F ? 512 : (TARGET_AVX ? 256 : 128))

View File

@ -1003,6 +1003,12 @@ bits. Note that this is not the biggest alignment that is supported,
just the biggest alignment that, when violated, may cause a fault.
@end defmac
@deftypevr {Target Hook} HOST_WIDE_INT TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
If defined, this target hook specifies the absolute biggest alignment
that a type or variable can have on this machine, otherwise,
@code{BIGGEST_ALIGNMENT} is used.
@end deftypevr
@defmac MALLOC_ABI_ALIGNMENT
Alignment, in bits, a C conformant malloc implementation has to
provide. If not defined, the default value is @code{BITS_PER_WORD}.

View File

@ -957,6 +957,8 @@ bits. Note that this is not the biggest alignment that is supported,
just the biggest alignment that, when violated, may cause a fault.
@end defmac
@hook TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
@defmac MALLOC_ABI_ALIGNMENT
Alignment, in bits, a C conformant malloc implementation has to
provide. If not defined, the default value is @code{BITS_PER_WORD}.

View File

@ -1868,6 +1868,13 @@ recorded in the offload function and variable table.",
void, (tree),
hook_void_tree)
DEFHOOKPOD
(absolute_biggest_alignment,
"If defined, this target hook specifies the absolute biggest alignment\n\
that a type or variable can have on this machine, otherwise,\n\
@code{BIGGEST_ALIGNMENT} is used.",
HOST_WIDE_INT, BIGGEST_ALIGNMENT)
/* Allow target specific overriding of option settings after options have
been changed by an attribute or pragma or when it is reset at the
end of the code affected by an attribute or pragma. */

View File

@ -247,7 +247,10 @@ unpack_ts_decl_common_value_fields (struct bitpack_d *bp, tree expr)
DECL_EXTERNAL (expr) = (unsigned) bp_unpack_value (bp, 1);
DECL_GIMPLE_REG_P (expr) = (unsigned) bp_unpack_value (bp, 1);
DECL_ALIGN (expr) = (unsigned) bp_unpack_var_len_unsigned (bp);
#ifdef ACCEL_COMPILER
if (DECL_ALIGN (expr) > targetm.absolute_biggest_alignment)
DECL_ALIGN (expr) = targetm.absolute_biggest_alignment;
#endif
if (TREE_CODE (expr) == LABEL_DECL)
{
EH_LANDING_PAD_NR (expr) = (int) bp_unpack_var_len_unsigned (bp);
@ -391,6 +394,10 @@ unpack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
TYPE_READONLY (expr) = (unsigned) bp_unpack_value (bp, 1);
TYPE_PRECISION (expr) = bp_unpack_var_len_unsigned (bp);
TYPE_ALIGN (expr) = bp_unpack_var_len_unsigned (bp);
#ifdef ACCEL_COMPILER
if (TYPE_ALIGN (expr) > targetm.absolute_biggest_alignment)
TYPE_ALIGN (expr) = targetm.absolute_biggest_alignment;
#endif
TYPE_ALIAS_SET (expr) = bp_unpack_var_len_int (bp);
}