From 9031b367ac87550552318f6516487c70f3ce9a99 Mon Sep 17 00:00:00 2001 From: Richard Sandiford 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. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r256132 --- 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 @@ -1,3 +1,10 @@ +2018-01-03 Richard Sandiford + 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 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.30.2