aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-slp.c
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2010-04-13 09:48:26 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2010-04-13 09:48:26 +0000
commit777e1f09ffc68eb0c122c74275fd69aef2dea61d (patch)
tree1b7bb981ab3207d6bac81f6a8d4c80f528a0e0ed /gcc/tree-vect-slp.c
parent1a71080889e16d01cccd6af982386633dcec9ec9 (diff)
downloadgcc-777e1f09ffc68eb0c122c74275fd69aef2dea61d.zip
gcc-777e1f09ffc68eb0c122c74275fd69aef2dea61d.tar.gz
gcc-777e1f09ffc68eb0c122c74275fd69aef2dea61d.tar.bz2
tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Only add RW dependence for dependence distance zero.
2010-04-13 Richard Guenther <rguenther@suse.de> * tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Only add RW dependence for dependence distance zero. Adjust maximal vectorization factor according to dependences. Move alignment handling ... (vect_find_same_alignment_drs): ... here. New function. (vect_analyze_data_ref_dependences): Adjust. (vect_analyze_data_refs_alignment): Call vect_find_same_alignment_drs. (vect_analyze_data_refs): Adjust minimal vectorization factor according to data references. * tree-vect-loop.c (vect_analyze_loop): Analyze data-ref dependences before determining the vectorization factor. Analyze alignment after determining the vectorization factor. * tree-vect-slp.c ((vect_slp_analyze_bb): Analyze data-ref dependences before alignment. * tree-vectorizer.h (vect_analyze_data_ref_dependences): Adjust prototype. (vect_analyze_data_refs): Likewise. (MAX_VECTORIZATION_FACTOR): New define. * gcc.dg/vect/no-vfa-vect-depend-1.c: Adjust. From-SVN: r158259
Diffstat (limited to 'gcc/tree-vect-slp.c')
-rw-r--r--gcc/tree-vect-slp.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 0e4f6ce..d25d347 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1270,6 +1270,8 @@ vect_slp_analyze_bb (basic_block bb)
slp_instance instance;
int i, insns = 0;
gimple_stmt_iterator gsi;
+ int min_vf = 2;
+ int max_vf = MAX_VECTORIZATION_FACTOR;
if (vect_print_dump_info (REPORT_DETAILS))
fprintf (vect_dump, "===vect_slp_analyze_bb===\n");
@@ -1296,7 +1298,7 @@ vect_slp_analyze_bb (basic_block bb)
if (!bb_vinfo)
return NULL;
- if (!vect_analyze_data_refs (NULL, bb_vinfo))
+ if (!vect_analyze_data_refs (NULL, bb_vinfo, &min_vf))
{
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
fprintf (vect_dump, "not vectorized: unhandled data-ref in basic "
@@ -1317,6 +1319,17 @@ vect_slp_analyze_bb (basic_block bb)
return NULL;
}
+ if (!vect_analyze_data_ref_dependences (NULL, bb_vinfo, &max_vf)
+ || min_vf > max_vf)
+ {
+ if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
+ fprintf (vect_dump, "not vectorized: unhandled data dependence "
+ "in basic block.\n");
+
+ destroy_bb_vec_info (bb_vinfo);
+ return NULL;
+ }
+
if (!vect_analyze_data_refs_alignment (NULL, bb_vinfo))
{
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
@@ -1327,16 +1340,6 @@ vect_slp_analyze_bb (basic_block bb)
return NULL;
}
- if (!vect_analyze_data_ref_dependences (NULL, bb_vinfo))
- {
- if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))
- fprintf (vect_dump, "not vectorized: unhandled data dependence in basic"
- " block.\n");
-
- destroy_bb_vec_info (bb_vinfo);
- return NULL;
- }
-
if (!vect_analyze_data_ref_accesses (NULL, bb_vinfo))
{
if (vect_print_dump_info (REPORT_UNVECTORIZED_LOCATIONS))