diff options
author | Richard Biener <rguenther@suse.de> | 2015-10-27 13:48:15 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-10-27 13:48:15 +0000 |
commit | 23a372296360f366e385c187c70a34b97cede2ab (patch) | |
tree | dfcea40f6c79636f4f3b24778642a5a745689386 /gcc/tree-vect-data-refs.c | |
parent | 1e44e857e05c165f6f01aeb56a7a43ee765bfc99 (diff) | |
download | gcc-23a372296360f366e385c187c70a34b97cede2ab.zip gcc-23a372296360f366e385c187c70a34b97cede2ab.tar.gz gcc-23a372296360f366e385c187c70a34b97cede2ab.tar.bz2 |
re PR tree-optimization/68104 (ice in vect_update_misalignment_for_peel with -O3)
2015-10-27 Richard Biener <rguenther@suse.de>
PR tree-optimization/68104
* tree-vect-data-refs.c (vect_compute_data_ref_alignment): Move
strided access check ...
(vect_compute_data_refs_alignment): ... here.
* gcc.dg/torture/pr68104.c: New testcase.
From-SVN: r229440
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index b3ca9d6..51cea9e 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -629,12 +629,6 @@ vect_compute_data_ref_alignment (struct data_reference *dr) /* Initialize misalignment to unknown. */ SET_DR_MISALIGNMENT (dr, -1); - /* Strided accesses perform only component accesses, misalignment information - is irrelevant for them. */ - if (STMT_VINFO_STRIDED_P (stmt_info) - && !STMT_VINFO_GROUPED_ACCESS (stmt_info)) - return true; - if (tree_fits_shwi_p (DR_STEP (dr))) misalign = DR_INIT (dr); aligned_to = DR_ALIGNED_TO (dr); @@ -794,18 +788,27 @@ vect_compute_data_refs_alignment (vec_info *vinfo) unsigned int i; FOR_EACH_VEC_ELT (datarefs, i, dr) - if (STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) - && !vect_compute_data_ref_alignment (dr)) - { - if (is_a <bb_vec_info> (vinfo)) - { - /* Mark unsupported statement as unvectorizable. */ - STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false; - continue; - } - else - return false; - } + { + stmt_vec_info stmt_info = vinfo_for_stmt (DR_STMT (dr)); + if (STMT_VINFO_VECTORIZABLE (stmt_info) + && !vect_compute_data_ref_alignment (dr)) + { + /* Strided accesses perform only component accesses, misalignment + information is irrelevant for them. */ + if (STMT_VINFO_STRIDED_P (stmt_info) + && !STMT_VINFO_GROUPED_ACCESS (stmt_info)) + continue; + + if (is_a <bb_vec_info> (vinfo)) + { + /* Mark unsupported statement as unvectorizable. */ + STMT_VINFO_VECTORIZABLE (vinfo_for_stmt (DR_STMT (dr))) = false; + continue; + } + else + return false; + } + } return true; } |