tree-streamer-in.c (unpack_ts_decl_common_value_fields, [...]): If ACCEL_COMPILER...
authorBernd Schmidt <bernds@codesourcery.com>
Sat, 21 Feb 2015 00:06:53 +0000 (00:06 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Sat, 21 Feb 2015 00:06:53 +0000 (00:06 +0000)
* 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

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/target.def
gcc/tree-streamer-in.c

index dad848907907d572e01017908ff9a6ffd3c876ad..9febcbd5ffdee82c36f50d4dcc4f0233b5f69e75 100644 (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
index 71a5b2202ebffdf8c7e74949e6e8b023721e4d80..66200216d3fe7200963daddef2bcb744ea1b9387 100644 (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;
 \f
 #include "gt-i386.h"
index 5d1e5e0cff8858e0cb1c223f56ee5a46d3430d53..1e755d3a35ecda5154b9d7a2f42510a9d5f88202 100644 (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))
index 048a28a1378fea15d3ee2fa8d386dfaeda19b165..6f36ec624d2008dcf017d1e48e2caffbd451d7fb 100644 (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}.
index edad99c6816a376c01e7041596a913bf640ae373..121c3057ba2e9f179a45850e81df16e053acb4c3 100644 (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}.
index 356f7c1c9a4934de6b69c54f0a616827e5523981..035dece8fa5d615b8e5a452236eebfb9a6e1e395 100644 (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.  */
index 506e676f56535ca8d3752625b502c9b84d4e2ed2..b4b648238519fbbe0213f3abd25e67a818e45913 100644 (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);
 }