diff options
author | Ira Rosen <irar@il.ibm.com> | 2010-09-02 06:04:34 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2010-09-02 06:04:34 +0000 |
commit | e4a707c4920ed5cd0bd960a5dc6af93d9f65015c (patch) | |
tree | 9c9e5da9865d27af8587c2639c172cccde7e0437 /gcc/tree-vectorizer.h | |
parent | 282ac51f24b21591be9bfbc8570fc63d33f0a5f6 (diff) | |
download | gcc-e4a707c4920ed5cd0bd960a5dc6af93d9f65015c.zip gcc-e4a707c4920ed5cd0bd960a5dc6af93d9f65015c.tar.gz gcc-e4a707c4920ed5cd0bd960a5dc6af93d9f65015c.tar.bz2 |
tree-vectorizer.h (get_later_stmt): New function.
* tree-vectorizer.h (get_later_stmt): New function.
(vect_analyze_data_ref_dependences): Add argument.
* tree-vect-loop.c (vect_analyze_loop): Update call to
vect_analyze_data_ref_dependences.
* tree-vect-data-refs.c (vect_drs_dependent_in_basic_block):
New function.
(vect_analyze_data_ref_dependence): Add argument for basic block
dependencies. Check dependencies in basic block vectorization.
(vect_analyze_data_ref_dependences): Add argument and update call to
vect_analyze_data_ref_dependences.
* tree-vect-slp.c (vect_find_last_store_in_slp_instance): New.
(vect_bb_vectorizable_with_dependencies): New.
(vect_slp_analyze_bb): Check dependencies in basic block.
(vect_schedule_slp_instance): Insert stores before the last store in
SLP instance.
From-SVN: r163757
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index ed8ff58..9d6e0ac 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -633,6 +633,32 @@ get_earlier_stmt (gimple stmt1, gimple stmt2) return stmt2; } +static inline gimple +get_later_stmt (gimple stmt1, gimple stmt2) +{ + unsigned int uid1, uid2; + + if (stmt1 == NULL) + return stmt2; + + if (stmt2 == NULL) + return stmt1; + + uid1 = gimple_uid (stmt1); + uid2 = gimple_uid (stmt2); + + if (uid1 == 0 || uid2 == 0) + return NULL; + + gcc_assert (uid1 <= VEC_length (vec_void_p, stmt_vec_info_vec)); + gcc_assert (uid2 <= VEC_length (vec_void_p, stmt_vec_info_vec)); + + if (uid1 > uid2) + return stmt1; + else + return stmt2; +} + static inline bool is_pattern_stmt_p (stmt_vec_info stmt_info) { @@ -776,7 +802,7 @@ extern enum dr_alignment_support vect_supportable_dr_alignment extern tree vect_get_smallest_scalar_type (gimple, HOST_WIDE_INT *, HOST_WIDE_INT *); extern bool vect_analyze_data_ref_dependences (loop_vec_info, bb_vec_info, - int *); + int *, bool *); extern bool vect_enhance_data_refs_alignment (loop_vec_info); extern bool vect_analyze_data_refs_alignment (loop_vec_info, bb_vec_info); extern bool vect_verify_datarefs_alignment (loop_vec_info, bb_vec_info); |