aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop-manip.c
diff options
context:
space:
mode:
authorBin Cheng <bin.cheng@arm.com>2016-06-17 09:05:05 +0000
committerBin Cheng <amker@gcc.gnu.org>2016-06-17 09:05:05 +0000
commit97816be433afedd0a407672b6f2fad23d179447b (patch)
tree201086e3720f21a3b75bfb89f8db7b84f7824354 /gcc/tree-vect-loop-manip.c
parent7c80a459b96715dfb44708b7cef9f2813a7ff0ef (diff)
downloadgcc-97816be433afedd0a407672b6f2fad23d179447b.zip
gcc-97816be433afedd0a407672b6f2fad23d179447b.tar.gz
gcc-97816be433afedd0a407672b6f2fad23d179447b.tar.bz2
tree-vectorizer.h (struct dr_with_seg_len): Remove class member OFFSET.
* tree-vectorizer.h (struct dr_with_seg_len): Remove class member OFFSET. * tree-vect-data-refs.c (operator ==): Handle DR_OFFSET directly, rather than OFFSET. (comp_dr_with_seg_len_pair): Ditto. (vect_prune_runtime_alias_test_list): Ditto. Also Canonicalize struct dr_with_seg_len_pair against DR_OFFSET. * tree-vect-loop-manip.c (vect_create_cond_for_alias_checks): Handle DR_OFFSET directly. * gcc.dg/vect/vect-alias-check-1.c: New test. From-SVN: r237549
Diffstat (limited to 'gcc/tree-vect-loop-manip.c')
-rw-r--r--gcc/tree-vect-loop-manip.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 508bbf0..93b29b7 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -2238,11 +2238,16 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr)
const dr_with_seg_len& dr_b = comp_alias_ddrs[i].second;
tree segment_length_a = dr_a.seg_len;
tree segment_length_b = dr_b.seg_len;
-
- tree addr_base_a
- = fold_build_pointer_plus (DR_BASE_ADDRESS (dr_a.dr), dr_a.offset);
- tree addr_base_b
- = fold_build_pointer_plus (DR_BASE_ADDRESS (dr_b.dr), dr_b.offset);
+ tree addr_base_a = DR_BASE_ADDRESS (dr_a.dr);
+ tree addr_base_b = DR_BASE_ADDRESS (dr_b.dr);
+ tree offset_a = DR_OFFSET (dr_a.dr), offset_b = DR_OFFSET (dr_b.dr);
+
+ offset_a = fold_build2 (PLUS_EXPR, TREE_TYPE (offset_a),
+ offset_a, DR_INIT (dr_a.dr));
+ offset_b = fold_build2 (PLUS_EXPR, TREE_TYPE (offset_b),
+ offset_b, DR_INIT (dr_b.dr));
+ addr_base_a = fold_build_pointer_plus (addr_base_a, offset_a);
+ addr_base_b = fold_build_pointer_plus (addr_base_b, offset_b);
if (dump_enabled_p ())
{