aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-02-08 14:51:20 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-02-08 14:51:20 +0000
commit5317b1be7eefe215ae67b8f65c8e7d8f54c6f2d2 (patch)
tree7f1ece1ffd1bc7b81c6c7112437eb22de27ec20b /gcc
parent63998a6336239da20540a9e4b529d839ed2db26e (diff)
downloadgcc-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')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69719.c24
-rw-r--r--gcc/tree-vect-data-refs.c16
4 files changed, 45 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c9d1d51..a2fb881 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,11 @@
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.
+
+2016-02-08 Richard Biener <rguenther@suse.de>
Jeff Law <law@redhat.com>
PR target/68273
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 60c95ae..f39a510 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,4 +1,9 @@
2016-02-08 Richard Biener <rguenther@suse.de>
+
+ PR tree-optimization/69719
+ * gcc.dg/torture/pr69719.c: New testcase.
+
+2016-02-08 Richard Biener <rguenther@suse.de>
Jeff Law <law@redhat.com>
PR target/68273
diff --git a/gcc/testsuite/gcc.dg/torture/pr69719.c b/gcc/testsuite/gcc.dg/torture/pr69719.c
new file mode 100644
index 0000000..d7489e7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr69719.c
@@ -0,0 +1,24 @@
+/* { dg-do run } */
+
+int b, c = 1, e, f;
+int a[6][5] = { {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 1, 0, 0, 0} };
+
+void __attribute__((noinline))
+fn1 ()
+{
+ int d;
+ for (b = 0; b < 5; b++)
+ for (d = 4; d; d--)
+ a[c + 1][b] = a[d + 1][d];
+}
+
+int
+main ()
+{
+ fn1 ();
+
+ if (a[2][1] != 0)
+ __builtin_abort ();
+
+ return 0;
+}
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 ())
{