diff options
author | Richard Biener <rguenther@suse.de> | 2013-05-28 13:36:25 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-05-28 13:36:25 +0000 |
commit | fbd7e8773135e1912e36d22e0a9c9a4e6e78c43f (patch) | |
tree | 0fe965daa826d92ed1f2160c72a0c984376a261e /gcc/tree-vect-data-refs.c | |
parent | bbba11173ac429c0506e8aece7dfa3eea42307a8 (diff) | |
download | gcc-fbd7e8773135e1912e36d22e0a9c9a4e6e78c43f.zip gcc-fbd7e8773135e1912e36d22e0a9c9a4e6e78c43f.tar.gz gcc-fbd7e8773135e1912e36d22e0a9c9a4e6e78c43f.tar.bz2 |
re PR tree-optimization/56787 (Vectorization fails because of CLOBBER statements)
2013-05-28 Richard Biener <rguenther@suse.de>
PR tree-optimization/56787
* tree-vect-data-refs.c (vect_analyze_data_refs): Drop clobbers
from the list of data references.
* tree-vect-loop.c (vect_determine_vectorization_factor): Skip
clobbers.
(vect_analyze_loop_operations): Likewise.
(vect_transform_loop): Remove clobbers.
* gcc.dg/vect/pr56787.c: New testcase.
From-SVN: r199380
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index c26d25d..47ecad3 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2861,6 +2861,7 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo, bool gather = false; int vf; +again: if (!dr || !DR_REF (dr)) { if (dump_enabled_p ()) @@ -2872,6 +2873,19 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo, stmt = DR_STMT (dr); stmt_info = vinfo_for_stmt (stmt); + /* Discard clobbers from the dataref vector. We will remove + clobber stmts during vectorization. */ + if (gimple_clobber_p (stmt)) + { + if (i == datarefs.length () - 1) + { + datarefs.pop (); + break; + } + datarefs[i] = datarefs.pop (); + goto again; + } + /* Check that analysis of the data-ref succeeded. */ if (!DR_BASE_ADDRESS (dr) || !DR_OFFSET (dr) || !DR_INIT (dr) || !DR_STEP (dr)) |