+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
#define TARGET_OFFLOAD_OPTIONS \
ix86_offload_options
+#undef TARGET_ABSOLUTE_BIGGEST_ALIGNMENT
+#define TARGET_ABSOLUTE_BIGGEST_ALIGNMENT 512
+
struct gcc_target targetm = TARGET_INITIALIZER;
\f
#include "gt-i386.h"
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))
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}.
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}.
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. */
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);
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);
}