diff options
author | Richard Biener <rguenther@suse.de> | 2020-12-03 10:25:14 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2020-12-07 12:07:12 +0100 |
commit | ebdfd1606da6b5aa586b0cd156b69b659235c9c2 (patch) | |
tree | 5a5649a6f9dd5d39848c76e182968f356e2d32c0 /gcc/tree-vectorizer.h | |
parent | cdcbef3c3310a14f2994982b44cb1f8e14c77232 (diff) | |
download | gcc-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.h | 12 |
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 |