diff options
author | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-23 12:13:49 +0000 |
---|---|---|
committer | irar <irar@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-23 12:13:49 +0000 |
commit | 805085717608a45a993649e0f7e3de2b6bf427ef (patch) | |
tree | 819bbf0d382a16d3881ea1c2cb0ed7c144a1f6f5 /gcc/tree-vect-data-refs.c | |
parent | 2ba552cb3a716157f09e299b707446a5cf0d9545 (diff) | |
download | gcc-805085717608a45a993649e0f7e3de2b6bf427ef.tar.gz |
PR tree-optimization/50819
* tree-vectorizer.h (vect_analyze_data_ref_dependences): Remove
the last argument.
* tree-vect-loop.c (vect_analyze_loop_2): Update call to
vect_analyze_data_ref_dependences.
* tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
Remove the last argument. Check load-after-store dependence
for unknown dependencies in basic blocks.
(vect_analyze_data_ref_dependences): Update call to
vect_analyze_data_ref_dependences.
* tree-vect-patterns.c (vect_recog_widen_shift_pattern): Fix
typo.
* tree-vect-slp.c (vect_bb_vectorizable_with_dependencies):
Remove.
(vect_slp_analyze_bb_1): Update call to
vect_analyze_data_ref_dependences. Don't call
vect_bb_vectorizable_with_dependencies.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180334 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index a9504cd2362..3634e5ecd5b 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -555,8 +555,7 @@ vect_mark_for_runtime_alias_test (ddr_p ddr, loop_vec_info loop_vinfo) static bool vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, - loop_vec_info loop_vinfo, int *max_vf, - bool *data_dependence_in_bb) + loop_vec_info loop_vinfo, int *max_vf) { unsigned int i; struct loop *loop = NULL; @@ -587,6 +586,8 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know) { + gimple earlier_stmt; + if (loop_vinfo) { if (vect_print_dump_info (REPORT_DR_DETAILS)) @@ -624,10 +625,11 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, if (DR_IS_WRITE (dra) && DR_IS_WRITE (drb)) return true; - /* We deal with read-write dependencies in basic blocks later (by - verifying that all the loads in the basic block are before all the - stores). */ - *data_dependence_in_bb = true; + /* Check that it's not a load-after-store dependence. */ + earlier_stmt = get_earlier_stmt (DR_STMT (dra), DR_STMT (drb)); + if (DR_IS_WRITE (STMT_VINFO_DATA_REF (vinfo_for_stmt (earlier_stmt)))) + return true; + return false; } @@ -753,8 +755,7 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, bool vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo, - bb_vec_info bb_vinfo, int *max_vf, - bool *data_dependence_in_bb) + bb_vec_info bb_vinfo, int *max_vf) { unsigned int i; VEC (ddr_p, heap) *ddrs = NULL; @@ -769,8 +770,7 @@ vect_analyze_data_ref_dependences (loop_vec_info loop_vinfo, ddrs = BB_VINFO_DDRS (bb_vinfo); FOR_EACH_VEC_ELT (ddr_p, ddrs, i, ddr) - if (vect_analyze_data_ref_dependence (ddr, loop_vinfo, max_vf, - data_dependence_in_bb)) + if (vect_analyze_data_ref_dependence (ddr, loop_vinfo, max_vf)) return false; return true; |