aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vectorizer.h
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-12-03 10:25:14 +0100
committerRichard Biener <rguenther@suse.de>2020-12-07 12:07:12 +0100
commitebdfd1606da6b5aa586b0cd156b69b659235c9c2 (patch)
tree5a5649a6f9dd5d39848c76e182968f356e2d32c0 /gcc/tree-vectorizer.h
parentcdcbef3c3310a14f2994982b44cb1f8e14c77232 (diff)
downloadgcc-ebdfd1606da6b5aa586b0cd156b69b659235c9c2.zip
gcc-ebdfd1606da6b5aa586b0cd156b69b659235c9c2.tar.gz
gcc-ebdfd1606da6b5aa586b0cd156b69b659235c9c2.tar.bz2
tree-optimization/98113 - vectorize a sequence of BIT_INSERT_EXPRs
This adds the capability to handle a sequence of vector BIT_INSERT_EXPRs to be vectorized similar as to how we vectorize vector constructors. 2020-12-03 Richard Biener <rguenther@suse.de> PR tree-optimization/98113 * tree-vectorizer.h (struct slp_root): New. (_bb_vec_info::roots): New member. * tree-vect-slp.c (vect_analyze_slp): Also walk BB info roots. (_bb_vec_info::_bb_vec_info): Adjust. (_bb_vec_info::~_bb_vec_info): Likewise. (vld_cmp): New. (vect_slp_is_lane_insert): Likewise. (vect_slp_check_for_constructors): Match a series of BIT_INSERT_EXPRs as vector constructor. (vect_slp_analyze_bb_1): Continue if BB info roots is not empty. (vect_slp_analyze_bb_1): Mark the whole BIT_INSERT_EXPR root sequence as pure_slp. * gcc.dg/vect/bb-slp-70.c: New testcase.
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r--gcc/tree-vectorizer.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index c0f786c..95e8ea0 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -849,6 +849,16 @@ loop_vec_info_for_loop (class loop *loop)
return (loop_vec_info) loop->aux;
}
+struct slp_root
+{
+ slp_root (slp_instance_kind kind_, vec<stmt_vec_info> stmts_,
+ stmt_vec_info root_)
+ : kind(kind_), stmts(stmts_), root(root_) {}
+ slp_instance_kind kind;
+ vec<stmt_vec_info> stmts;
+ stmt_vec_info root;
+};
+
typedef class _bb_vec_info : public vec_info
{
public:
@@ -860,6 +870,8 @@ public:
entry edge to cover bbs[0] PHI nodes and have a region entry
insert location. */
vec<basic_block> bbs;
+
+ vec<slp_root> roots;
} *bb_vec_info;
#define BB_VINFO_BB(B) (B)->bb