From fcc216ec44d7403368285c045846d4419b631cb5 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Mon, 30 Jan 2017 13:52:44 +0000 Subject: [PATCH] re PR tree-optimization/79256 (FAIL: gcc.dg/vect/pr25413a.c execution test) 2017-01-30 Richard Biener 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 | 8 ++++++++ gcc/targhooks.c | 9 +++++++-- gcc/tree.c | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 30b078582dc..96a210e9c1e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2017-01-30 Richard Biener + + 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 PR target/79240 diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 1cdec068ed8..bf5d0d4efd0 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -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 diff --git a/gcc/tree.c b/gcc/tree.c index 10b747e2607..8426834342e 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -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; } -- 2.30.2