From 32a4b2d824330dab65d660999ad663ae8a19dbf4 Mon Sep 17 00:00:00 2001 From: rsandifo Date: Wed, 3 Jan 2018 07:15:41 +0000 Subject: [PATCH] poly_int: vector_alignment_reachable_p This patch makes vector_alignment_reachable_p cope with variable-length vectors. 2018-01-03 Richard Sandiford Alan Hayward David Sherwood gcc/ * tree-vect-data-refs.c (vector_alignment_reachable_p): Treat the number of units as polynomial. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@256132 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 7 +++++++ gcc/tree-vect-data-refs.c | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 39f3a91d24d..e42270c4019 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -2,6 +2,13 @@ Alan Hayward David Sherwood + * tree-vect-data-refs.c (vector_alignment_reachable_p): Treat the + number of units as polynomial. + +2018-01-03 Richard Sandiford + Alan Hayward + David Sherwood + * target.h (vector_sizes, auto_vector_sizes): New typedefs. * target.def (autovectorize_vector_sizes): Return the vector sizes by pointer, using vector_sizes rather than a bitmask. diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 02a32950ee3..2e02be5df7f 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -1154,16 +1154,17 @@ vector_alignment_reachable_p (struct data_reference *dr) the prolog loop ({VF - misalignment}), is a multiple of the number of the interleaved accesses. */ int elem_size, mis_in_elements; - int nelements = TYPE_VECTOR_SUBPARTS (vectype); /* FORNOW: handle only known alignment. */ if (!known_alignment_for_access_p (dr)) return false; - elem_size = GET_MODE_SIZE (TYPE_MODE (vectype)) / nelements; + poly_uint64 nelements = TYPE_VECTOR_SUBPARTS (vectype); + poly_uint64 vector_size = GET_MODE_SIZE (TYPE_MODE (vectype)); + elem_size = vector_element_size (vector_size, nelements); mis_in_elements = DR_MISALIGNMENT (dr) / elem_size; - if ((nelements - mis_in_elements) % GROUP_SIZE (stmt_info)) + if (!multiple_p (nelements - mis_in_elements, GROUP_SIZE (stmt_info))) return false; } -- 2.11.4.GIT