re PR tree-optimization/79256 (FAIL: gcc.dg/vect/pr25413a.c execution test)
authorRichard Biener <rguenther@suse.de>
Mon, 30 Jan 2017 13:52:44 +0000 (13:52 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Mon, 30 Jan 2017 13:52:44 +0000 (13:52 +0000)
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.
* tree.c (build_aligned_type): Set TYPE_USER_ALIGN.

From-SVN: r245025

gcc/ChangeLog
gcc/targhooks.c
gcc/tree.c

index 30b078582dc1dd9625587f4a14103f2efd82c98c..96a210e9c1e562852e5afd7429de3e6990d6f567 100644 (file)
@@ -1,3 +1,11 @@
+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.
+       * tree.c (build_aligned_type): Set TYPE_USER_ALIGN.
+
 2017-01-30  Dominik Vogt  <vogt@linux.vnet.ibm.com>
 
        PR target/79240
index 1cdec068ed87456dc636e22ab0e187cd2bd55040..bf5d0d4efd0c0dc2b531a0a671b34df140e74416 100644 (file)
@@ -1130,9 +1130,14 @@ default_vector_alignment (const_tree type)
 /* 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.  */
 bool
-default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed)
+default_builtin_vector_alignment_reachable (const_tree type, bool is_packed)
 {
-  return ! is_packed;
+  if (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
index 10b747e260734d819cab2770d1fe5529bbc364a8..8426834342e320fc6e91de55c963c2b1c83cfcb8 100644 (file)
@@ -6684,6 +6684,7 @@ build_aligned_type (tree type, unsigned int align)
 
   t = build_variant_type_copy (type);
   SET_TYPE_ALIGN (t, align);
+  TYPE_USER_ALIGN (t) = 1;
 
   return t;
 }