diff options
author | Richard Biener <rguenther@suse.de> | 2020-05-18 16:05:56 +0200 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-05-22 12:26:27 +0200 |
commit | 79f0451c67e8ed564b86a38581d5f3d57c5074d8 (patch) | |
tree | 6d021593ca3438568971032ee89debbba1a036c2 /gcc/tree-vectorizer.h | |
parent | b6ed2e2bca54d1d290f553549d28b0c60a0f240f (diff) | |
download | gcc-79f0451c67e8ed564b86a38581d5f3d57c5074d8.zip gcc-79f0451c67e8ed564b86a38581d5f3d57c5074d8.tar.gz gcc-79f0451c67e8ed564b86a38581d5f3d57c5074d8.tar.bz2 |
enfoce SLP_TREE_VECTYPE for invariants
This tries to enforce a set SLP_TREE_VECTYPE in vect_get_constant_vectors
and provides some infrastructure for setting it in the vectorizable_*
functions, amending those.
2020-05-22 Richard Biener <rguenther@suse.de>
* tree-vectorizer.h (vect_is_simple_use): New overload.
(vect_maybe_update_slp_op_vectype): New.
* tree-vect-stmts.c (vect_is_simple_use): New overload
accessing operands of SLP vs. non-SLP operation transparently.
(vect_maybe_update_slp_op_vectype): New function updating
the possibly shared SLP operands vector type.
(vectorizable_operation): Be a bit more SLP vs non-SLP agnostic
using the new vect_is_simple_use overload; update SLP invariant
operand nodes vector type.
(vectorizable_comparison): Likewise.
(vectorizable_call): Likewise.
(vectorizable_conversion): Likewise.
(vectorizable_shift): Likewise.
(vectorizable_store): Likewise.
(vectorizable_condition): Likewise.
(vectorizable_assignment): Likewise.
* tree-vect-loop.c (vectorizable_reduction): Likewise.
* tree-vect-slp.c (vect_get_constant_vectors): Enforce
present SLP_TREE_VECTYPE and check it matches previous
behavior.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 4f506bd..2eb3ab5 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -1698,6 +1698,11 @@ extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *, extern bool vect_is_simple_use (tree, vec_info *, enum vect_def_type *, tree *, stmt_vec_info * = NULL, gimple ** = NULL); +extern bool vect_is_simple_use (vec_info *, stmt_vec_info, slp_tree, + unsigned, tree *, slp_tree *, + enum vect_def_type *, + tree *, stmt_vec_info * = NULL); +extern bool vect_maybe_update_slp_op_vectype (slp_tree, tree); extern bool supportable_widening_operation (vec_info *, enum tree_code, stmt_vec_info, tree, tree, enum tree_code *, |