diff options
author | Richard Biener <rguenther@suse.de> | 2014-02-21 13:18:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-02-21 13:18:54 +0000 |
commit | f2556b68cad88433577a0baab1b76bef59f49d78 (patch) | |
tree | 1e75ea5d008d884d77d7e4d771c8dff421db6753 /gcc/tree-vect-data-refs.c | |
parent | 32417082bf9a8f2633e7960f2e45979ebab43e51 (diff) | |
download | gcc-f2556b68cad88433577a0baab1b76bef59f49d78.zip gcc-f2556b68cad88433577a0baab1b76bef59f49d78.tar.gz gcc-f2556b68cad88433577a0baab1b76bef59f49d78.tar.bz2 |
re PR tree-optimization/60276 (-O3 autovectorizer breaks on a particular loop)
2014-02-21 Richard Biener <rguenther@suse.de>
PR tree-optimization/60276
* tree-vectorizer.h (struct _stmt_vec_info): Add min_neg_dist field.
(STMT_VINFO_MIN_NEG_DIST): New macro.
* tree-vect-data-refs.c (vect_analyze_data_ref_dependence): Record
STMT_VINFO_MIN_NEG_DIST.
* tree-vect-stmts.c (vectorizable_load): Verify if assumptions
made for negative dependence distances still hold.
* gcc.dg/vect/pr60276.c: New testcase.
From-SVN: r207992
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index e973b34..fbc35a3 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -403,6 +403,13 @@ vect_analyze_data_ref_dependence (struct data_dependence_relation *ddr, if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, "dependence distance negative.\n"); + /* Record a negative dependence distance to later limit the + amount of stmt copying / unrolling we can perform. + Only need to handle read-after-write dependence. */ + if (DR_IS_READ (drb) + && (STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) == 0 + || STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) > (unsigned)dist)) + STMT_VINFO_MIN_NEG_DIST (stmtinfo_b) = dist; continue; } |