diff options
author | Richard Biener <rguenther@suse.de> | 2016-02-08 14:51:20 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-02-08 14:51:20 +0000 |
commit | 5317b1be7eefe215ae67b8f65c8e7d8f54c6f2d2 (patch) | |
tree | 7f1ece1ffd1bc7b81c6c7112437eb22de27ec20b /gcc/tree-vect-data-refs.c | |
parent | 63998a6336239da20540a9e4b529d839ed2db26e (diff) | |
download | gcc-5317b1be7eefe215ae67b8f65c8e7d8f54c6f2d2.zip gcc-5317b1be7eefe215ae67b8f65c8e7d8f54c6f2d2.tar.gz gcc-5317b1be7eefe215ae67b8f65c8e7d8f54c6f2d2.tar.bz2 |
re PR tree-optimization/69719 (wrong code at -O3 on x86_64-linux-gnu)
2016-02-08 Richard Biener <rguenther@suse.de>
PR tree-optimization/69719
* tree-vect-data-refs.c (vect_prune_runtime_alias_test_list):
Properly use absolute of the difference of the two offsets to
compare or adjust the segment length.
* gcc.dg/torture/pr69719.c: New testcase.
From-SVN: r233212
Diffstat (limited to 'gcc/tree-vect-data-refs.c')
-rw-r--r-- | gcc/tree-vect-data-refs.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c index 4c0e135..49e871b 100644 --- a/gcc/tree-vect-data-refs.c +++ b/gcc/tree-vect-data-refs.c @@ -3081,8 +3081,9 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo) || !tree_fits_shwi_p (dr_a2->offset)) continue; - HOST_WIDE_INT diff = (tree_to_shwi (dr_a2->offset) - - tree_to_shwi (dr_a1->offset)); + unsigned HOST_WIDE_INT diff + = absu_hwi (tree_to_shwi (dr_a2->offset) + - tree_to_shwi (dr_a1->offset)); /* Now we check if the following condition is satisfied: @@ -3101,13 +3102,14 @@ vect_prune_runtime_alias_test_list (loop_vec_info loop_vinfo) */ - HOST_WIDE_INT min_seg_len_b = (tree_fits_shwi_p (dr_b1->seg_len) - ? tree_to_shwi (dr_b1->seg_len) - : vect_factor); + unsigned HOST_WIDE_INT min_seg_len_b + = (tree_fits_uhwi_p (dr_b1->seg_len) + ? tree_to_uhwi (dr_b1->seg_len) + : vect_factor); if (diff <= min_seg_len_b - || (tree_fits_shwi_p (dr_a1->seg_len) - && diff - tree_to_shwi (dr_a1->seg_len) < min_seg_len_b)) + || (tree_fits_uhwi_p (dr_a1->seg_len) + && diff - tree_to_uhwi (dr_a1->seg_len) < min_seg_len_b)) { if (dump_enabled_p ()) { |