From d8f860ef70b33d0c49f31114c433b6c654c5a588 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Wed, 3 Jan 2018 07:17:06 +0000 Subject: [PATCH] poly_int: omp-simd-clone.c This patch adds a wrapper around TYPE_VECTOR_SUBPARTS for omp-simd-clone.c. Supporting SIMD clones for variable-length vectors is post GCC8 work. 2018-01-03 Richard Sandiford Alan Hayward David Sherwood gcc/ * omp-simd-clone.c (simd_clone_subparts): New function. (simd_clone_init_simd_arrays): Use it instead of TYPE_VECTOR_SUBPARTS. (ipa_simd_modify_function_body): Likewise. Co-Authored-By: Alan Hayward Co-Authored-By: David Sherwood From-SVN: r256145 --- gcc/ChangeLog | 8 ++++++++ gcc/omp-simd-clone.c | 17 +++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e77cbb5deae..aede16d6602 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2018-01-03 Richard Sandiford + Alan Hayward + David Sherwood + + * omp-simd-clone.c (simd_clone_subparts): New function. + (simd_clone_init_simd_arrays): Use it instead of TYPE_VECTOR_SUBPARTS. + (ipa_simd_modify_function_body): Likewise. + 2018-01-03 Richard Sandiford Alan Hayward David Sherwood diff --git a/gcc/omp-simd-clone.c b/gcc/omp-simd-clone.c index f6a7a270d49..0626a5a900d 100644 --- a/gcc/omp-simd-clone.c +++ b/gcc/omp-simd-clone.c @@ -51,6 +51,15 @@ along with GCC; see the file COPYING3. If not see #include "stringpool.h" #include "attribs.h" +/* Return the number of elements in vector type VECTYPE, which is associated + with a SIMD clone. At present these always have a constant length. */ + +static unsigned HOST_WIDE_INT +simd_clone_subparts (tree vectype) +{ + return TYPE_VECTOR_SUBPARTS (vectype); +} + /* Allocate a fresh `simd_clone' and return it. NARGS is the number of arguments to reserve space for. */ @@ -761,7 +770,7 @@ simd_clone_init_simd_arrays (struct cgraph_node *node, } continue; } - if (TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg)) == node->simdclone->simdlen) + if (simd_clone_subparts (TREE_TYPE (arg)) == node->simdclone->simdlen) { tree ptype = build_pointer_type (TREE_TYPE (TREE_TYPE (array))); tree ptr = build_fold_addr_expr (array); @@ -772,7 +781,7 @@ simd_clone_init_simd_arrays (struct cgraph_node *node, } else { - unsigned int simdlen = TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg)); + unsigned int simdlen = simd_clone_subparts (TREE_TYPE (arg)); tree ptype = build_pointer_type (TREE_TYPE (TREE_TYPE (array))); for (k = 0; k < node->simdclone->simdlen; k += simdlen) { @@ -918,8 +927,8 @@ ipa_simd_modify_function_body (struct cgraph_node *node, iter, NULL_TREE, NULL_TREE); if (adjustments[j].op == IPA_PARM_OP_NONE - && TYPE_VECTOR_SUBPARTS (vectype) < node->simdclone->simdlen) - j += node->simdclone->simdlen / TYPE_VECTOR_SUBPARTS (vectype) - 1; + && simd_clone_subparts (vectype) < node->simdclone->simdlen) + j += node->simdclone->simdlen / simd_clone_subparts (vectype) - 1; } l = adjustments.length (); -- 2.30.2