diff options
author | Richard Biener <rguenther@suse.de> | 2015-12-01 14:24:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-12-01 14:24:54 +0000 |
commit | 4f0a0218d6df34ec612a61aef50b95d79cd8d17f (patch) | |
tree | 25b658c07a9bfa509d5726fe009464b9133a2068 /gcc/tree-vect-data-refs.c | |
parent | 2d3f4bf73cdb878c0fee25b962b6a80113d5d80e (diff) | |
download | gcc-4f0a0218d6df34ec612a61aef50b95d79cd8d17f.zip gcc-4f0a0218d6df34ec612a61aef50b95d79cd8d17f.tar.gz gcc-4f0a0218d6df34ec612a61aef50b95d79cd8d17f.tar.bz2 |
re PR tree-optimization/68379 (BB vectorization: definition in block 13 follows the use for SSA_NAME)
2015-12-01 Richard Biener <rguenther@suse.de>
PR tree-optimization/68379
* tree-vect-stmts.c (vectorizable_load): For BB vectorization
always base loads on the first used DR of a group.
* tree-vect-data-refs.c (vect_slp_analyze_and_verify_node_alignment):
Compute alignment of the first scalar element unconditionally.
* gcc.dg/torture/pr68379.c: New testcase.
* gfortran.dg/pr68379-1.f90: Likewise.
* gfortran.dg/pr68379-2.f: Likewise.
From-SVN: r231111
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 7962e36..b59b40c 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -2102,11 +2102,16 @@ vect_slp_analyze_and_verify_node_alignment (slp_tree node) the node is permuted in which case we start from the first element in the group. */ gimple *first_stmt = SLP_TREE_SCALAR_STMTS (node)[0]; + data_reference_p first_dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt)); if (SLP_TREE_LOAD_PERMUTATION (node).exists ()) first_stmt = GROUP_FIRST_ELEMENT (vinfo_for_stmt (first_stmt)); data_reference_p dr = STMT_VINFO_DATA_REF (vinfo_for_stmt (first_stmt)); if (! vect_compute_data_ref_alignment (dr) + /* For creating the data-ref pointer we need alignment of the + first element anyway. */ + || (dr != first_dr + && ! vect_compute_data_ref_alignment (first_dr)) || ! verify_data_ref_alignment (dr)) { if (dump_enabled_p ()) |