diff options
author | Richard Biener <rguenther@suse.de> | 2018-04-19 12:41:42 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2018-04-19 12:41:42 +0000 |
commit | 19986382015e2aa8dc539bf31065af4bdff5ce84 (patch) | |
tree | 05e67ae752a6fac4264aa955616ad24dd34a5425 /gcc/tree-vect-data-refs.c | |
parent | 411a771a1761e89b7420dd94bc296d52dc8c6f5c (diff) | |
download | gcc-19986382015e2aa8dc539bf31065af4bdff5ce84.zip gcc-19986382015e2aa8dc539bf31065af4bdff5ce84.tar.gz gcc-19986382015e2aa8dc539bf31065af4bdff5ce84.tar.bz2 |
re PR tree-optimization/84737 (20% degradation in CPU2000 172.mgrid starting with r256888)
2018-04-19 Richard Biener <rguenther@suse.de>
PR tree-optimization/84737
* tree-vect-data-refs.c (vect_copy_ref_info): New function
copying restrict info.
(vect_setup_realignment): Use it.
* tree-vectorizer.h (vect_copy_ref_info): Declare.
* tree-vect-stmts.c (vectorizable_store): Copy ref info from
the first DR to all generated stores.
(vectorizable_load): Likewise for loads.
From-SVN: r259493
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 161a886..9aabcc1 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -5010,6 +5010,27 @@ bump_vector_ptr (tree dataref_ptr, gimple *ptr_incr, gimple_stmt_iterator *gsi, } +/* Copy memory reference info such as base/clique from the SRC reference + to the DEST MEM_REF. */ + +void +vect_copy_ref_info (tree dest, tree src) +{ + if (TREE_CODE (dest) != MEM_REF) + return; + + tree src_base = src; + while (handled_component_p (src_base)) + src_base = TREE_OPERAND (src_base, 0); + if (TREE_CODE (src_base) != MEM_REF + && TREE_CODE (src_base) != TARGET_MEM_REF) + return; + + MR_DEPENDENCE_CLIQUE (dest) = MR_DEPENDENCE_CLIQUE (src_base); + MR_DEPENDENCE_BASE (dest) = MR_DEPENDENCE_BASE (src_base); +} + + /* Function vect_create_destination_var. Create a new temporary of type VECTYPE. */ @@ -5561,6 +5582,7 @@ vect_setup_realignment (gimple *stmt, gimple_stmt_iterator *gsi, data_ref = build2 (MEM_REF, TREE_TYPE (vec_dest), new_temp, build_int_cst (reference_alias_ptr_type (DR_REF (dr)), 0)); + vect_copy_ref_info (data_ref, DR_REF (dr)); new_stmt = gimple_build_assign (vec_dest, data_ref); new_temp = make_ssa_name (vec_dest, new_stmt); gimple_assign_set_lhs (new_stmt, new_temp); |