public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r11-4732] middle-end: Store and use the SLP instance kind when aborting load/store lanes
@ 2020-11-05 9:03 Tamar Christina
0 siblings, 0 replies; only message in thread
From: Tamar Christina @ 2020-11-05 9:03 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:e3587a2d8b005d72f882a21864fb132f8a966366
commit r11-4732-ge3587a2d8b005d72f882a21864fb132f8a966366
Author: Tamar Christina <tamar.christina@arm.com>
Date: Thu Nov 5 09:02:29 2020 +0000
middle-end: Store and use the SLP instance kind when aborting load/store lanes
This patch stores the SLP instance kind in the SLP instance so that we can use
it later when detecting load/store lanes support.
This also changes the load/store lane support check to only check if the SLP
kind is a store. This means that in order for the load/lanes to work all
instances must be of kind store.
gcc/ChangeLog:
* tree-vect-loop.c (vect_analyze_loop_2): Check kind.
* tree-vect-slp.c (vect_build_slp_instance): New.
(enum slp_instance_kind): Move to...
* tree-vectorizer.h (enum slp_instance_kind): .. Here
(SLP_INSTANCE_KIND): New.
Diff:
---
gcc/tree-vect-loop.c | 1 +
gcc/tree-vect-slp.c | 8 +-------
gcc/tree-vectorizer.h | 13 +++++++++++++
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 547894c39c8..ef2ea3d0fb0 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -2394,6 +2394,7 @@ start_over:
/* If the loads and stores can be handled with load/store-lane
instructions record it and move on to the next instance. */
if (loads_permuted
+ && SLP_INSTANCE_KIND (instance) == slp_inst_kind_store
&& vect_store_lanes_supported (vectype, group_size, false))
{
FOR_EACH_VEC_ELT (SLP_INSTANCE_LOADS (instance), i, load_node)
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index d498cd466eb..420c3c93374 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -2171,13 +2171,6 @@ calculate_unrolling_factor (poly_uint64 nunits, unsigned int group_size)
return exact_div (common_multiple (nunits, group_size), group_size);
}
-enum slp_instance_kind {
- slp_inst_kind_store,
- slp_inst_kind_reduc_group,
- slp_inst_kind_reduc_chain,
- slp_inst_kind_ctor
-};
-
static bool
vect_analyze_slp_instance (vec_info *vinfo,
scalar_stmts_to_slp_tree_map_t *bst_map,
@@ -2253,6 +2246,7 @@ vect_build_slp_instance (vec_info *vinfo,
SLP_INSTANCE_UNROLLING_FACTOR (new_instance) = unrolling_factor;
SLP_INSTANCE_LOADS (new_instance) = vNULL;
SLP_INSTANCE_ROOT_STMT (new_instance) = root_stmt_info;
+ SLP_INSTANCE_KIND (new_instance) = kind;
new_instance->reduc_phis = NULL;
new_instance->cost_vec = vNULL;
new_instance->subgraph_entries = vNULL;
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index 0252d799561..3ccd0fd552d 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -174,6 +174,15 @@ struct _slp_tree {
static void operator delete (void *, size_t);
};
+/* The enum describes the type of operations that an SLP instance
+ can perform. */
+
+enum slp_instance_kind {
+ slp_inst_kind_store,
+ slp_inst_kind_reduc_group,
+ slp_inst_kind_reduc_chain,
+ slp_inst_kind_ctor
+};
/* SLP instance is a sequence of stmts in a loop that can be packed into
SIMD stmts. */
@@ -202,6 +211,9 @@ public:
entries into the same subgraph, including itself. */
vec<_slp_instance *> subgraph_entries;
+ /* The type of operation the SLP instance is performing. */
+ slp_instance_kind kind;
+
dump_user_location_t location () const;
} *slp_instance;
@@ -211,6 +223,7 @@ public:
#define SLP_INSTANCE_UNROLLING_FACTOR(S) (S)->unrolling_factor
#define SLP_INSTANCE_LOADS(S) (S)->loads
#define SLP_INSTANCE_ROOT_STMT(S) (S)->root_stmt
+#define SLP_INSTANCE_KIND(S) (S)->kind
#define SLP_TREE_CHILDREN(S) (S)->children
#define SLP_TREE_SCALAR_STMTS(S) (S)->stmts
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-11-05 9:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-05 9:03 [gcc r11-4732] middle-end: Store and use the SLP instance kind when aborting load/store lanes Tamar Christina
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).