aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.h
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2016-07-06 08:13:49 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2016-07-06 08:13:49 +0000
commit134c85caeba541ff4fb4377fb12729073cbdfe41 (patch)
treea217ca5a0f098d0bb1ddba69195d254a7b18c348 /gcc/tree-vectorizer.h
parent071e8018fe67cabb165255ac88a165b80fadbcc7 (diff)
downloadgcc-134c85caeba541ff4fb4377fb12729073cbdfe41.zip
gcc-134c85caeba541ff4fb4377fb12729073cbdfe41.tar.gz
gcc-134c85caeba541ff4fb4377fb12729073cbdfe41.tar.bz2
[4/7] Add a gather_scatter_info structure
This patch just refactors the gather/scatter support so that all information is in a single structure, rather than separate variables. This reduces the number of arguments to a function added in patch 6. Tested on aarch64-linux-gnu and x86_64-linux-gnu. gcc/ * tree-vectorizer.h (gather_scatter_info): New structure. (vect_check_gather_scatter): Return a bool rather than a decl. Replace return-by-pointer arguments with a single gather_scatter_info *. * tree-vect-data-refs.c (vect_check_gather_scatter): Likewise. (vect_analyze_data_refs): Update call accordingly. * tree-vect-stmts.c (vect_mark_stmts_to_be_vectorized): Likewise. (vectorizable_mask_load_store): Likewise. Also record the offset dt and vectype in the gather_scatter_info. (vectorizable_store): Likewise. (vectorizable_load): Likewise. From-SVN: r238036
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r--gcc/tree-vectorizer.h26
1 files changed, 24 insertions, 2 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index f15672f..180b306 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -608,6 +608,28 @@ typedef struct _stmt_vec_info {
unsigned int num_slp_uses;
} *stmt_vec_info;
+/* Information about a gather/scatter call. */
+struct gather_scatter_info {
+ /* The FUNCTION_DECL for the built-in gather/scatter function. */
+ tree decl;
+
+ /* The loop-invariant base value. */
+ tree base;
+
+ /* The original scalar offset, which is a non-loop-invariant SSA_NAME. */
+ tree offset;
+
+ /* Each offset element should be multiplied by this amount before
+ being added to the base. */
+ int scale;
+
+ /* The definition type for the vectorized offset. */
+ enum vect_def_type offset_dt;
+
+ /* The type of the vectorized offset. */
+ tree offset_vectype;
+};
+
/* Access Functions. */
#define STMT_VINFO_TYPE(S) (S)->type
#define STMT_VINFO_STMT(S) (S)->stmt
@@ -1031,8 +1053,8 @@ extern bool vect_verify_datarefs_alignment (loop_vec_info);
extern bool vect_slp_analyze_and_verify_instance_alignment (slp_instance);
extern bool vect_analyze_data_ref_accesses (vec_info *);
extern bool vect_prune_runtime_alias_test_list (loop_vec_info);
-extern tree vect_check_gather_scatter (gimple *, loop_vec_info, tree *, tree *,
- int *);
+extern bool vect_check_gather_scatter (gimple *, loop_vec_info,
+ gather_scatter_info *);
extern bool vect_analyze_data_refs (vec_info *, int *);
extern tree vect_create_data_ref_ptr (gimple *, tree, struct loop *, tree,
tree *, gimple_stmt_iterator *,