aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-data-refs.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2018-04-19 12:41:42 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2018-04-19 12:41:42 +0000
commit19986382015e2aa8dc539bf31065af4bdff5ce84 (patch)
tree05e67ae752a6fac4264aa955616ad24dd34a5425 /gcc/tree-vect-data-refs.c
parent411a771a1761e89b7420dd94bc296d52dc8c6f5c (diff)
downloadgcc-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.c22
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);