diff mbox

[v2] Simplify alias check code generation in vectorizer

Message ID d2ef5720-f836-5779-fcc8-d065e1aae1c3@linux.vnet.ibm.com
State New
Headers show

Commit Message

Robin Dapp Sept. 27, 2016, 1:13 p.m. UTC
> Also the '=' in the split line goes to the next line according to
> coding conventions.

fixed, I had only looked at an instance one function above which had it
wrong as well. Also changed comment grammar slightly.


Regards
 Robin

--

gcc/ChangeLog:

2016-09-27  Robin Dapp  <rdapp@linux.vnet.ibm.com>

	* tree-vect-loop-manip.c (create_intersect_range_checks_index):
	Add tree_fits_shwi_p check.


gcc/testsuite/ChangeLog:

2016-09-27  Robin Dapp  <rdapp@linux.vnet.ibm.com>

	* gcc.dg/vect/pr77724.c: New test.

Comments

Richard Biener Sept. 27, 2016, 1:22 p.m. UTC | #1
On Tue, 27 Sep 2016, Robin Dapp wrote:

> > Also the '=' in the split line goes to the next line according to
> > coding conventions.
> 
> fixed, I had only looked at an instance one function above which had it
> wrong as well. Also changed comment grammar slightly.

Ok.

Thanks,
Richard.

> 
> Regards
>  Robin
> 
> --
> 
> gcc/ChangeLog:
> 
> 2016-09-27  Robin Dapp  <rdapp@linux.vnet.ibm.com>
> 
> 	* tree-vect-loop-manip.c (create_intersect_range_checks_index):
> 	Add tree_fits_shwi_p check.
> 
> 
> gcc/testsuite/ChangeLog:
> 
> 2016-09-27  Robin Dapp  <rdapp@linux.vnet.ibm.com>
> 
> 	* gcc.dg/vect/pr77724.c: New test.
>
Markus Trippelsdorf Sept. 28, 2016, 5:16 a.m. UTC | #2
On 2016.09.27 at 15:22 +0200, Richard Biener wrote:
> On Tue, 27 Sep 2016, Robin Dapp wrote:
> 
> > > Also the '=' in the split line goes to the next line according to
> > > coding conventions.
> > 
> > fixed, I had only looked at an instance one function above which had it
> > wrong as well. Also changed comment grammar slightly.
> 
> Ok.

Since you are not listed in MAINTAINERS I've committed your patch.
diff mbox

Patch

diff --git a/gcc/testsuite/gcc.dg/vect/pr77724.c b/gcc/testsuite/gcc.dg/vect/pr77724.c
new file mode 100644
index 0000000..b3411d6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/pr77724.c
@@ -0,0 +1,12 @@ 
+/* { dg-do compile } */
+
+int a[81];
+int b, c;
+
+void
+fn1()
+{
+  int d = b;
+  for (; c; --c)
+    a[c + d] = a[c];
+}
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 8203040..a715fd9 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -2301,6 +2301,9 @@  create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
   if (!tree_fits_uhwi_p (dr_a.seg_len) || !tree_fits_uhwi_p (dr_b.seg_len))
     return false;
 
+  if (!tree_fits_shwi_p (DR_STEP (dr_a.dr)))
+    return false;
+
   if (!operand_equal_p (DR_BASE_OBJECT (dr_a.dr), DR_BASE_OBJECT (dr_b.dr), 0))
     return false;
 
@@ -2310,9 +2313,8 @@  create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
   gcc_assert (TREE_CODE (DR_STEP (dr_a.dr)) == INTEGER_CST);
 
   bool neg_step = tree_int_cst_compare (DR_STEP (dr_a.dr), size_zero_node) < 0;
-  unsigned HOST_WIDE_INT abs_step = tree_to_uhwi (DR_STEP (dr_a.dr));
-  if (neg_step)
-    abs_step = -abs_step;
+  unsigned HOST_WIDE_INT abs_step
+    = absu_hwi (tree_to_shwi (DR_STEP (dr_a.dr)));
 
   unsigned HOST_WIDE_INT seg_len1 = tree_to_uhwi (dr_a.seg_len);
   unsigned HOST_WIDE_INT seg_len2 = tree_to_uhwi (dr_b.seg_len);
@@ -2331,7 +2333,7 @@  create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
     {
       tree access1 = DR_ACCESS_FN (dr_a.dr, i);
       tree access2 = DR_ACCESS_FN (dr_b.dr, i);
-      /* Two index must be the same if they are not scev, or not scev wrto
+      /* Two indices must be the same if they are not scev, or not scev wrto
 	 current loop being vecorized.  */
       if (TREE_CODE (access1) != POLYNOMIAL_CHREC
 	  || TREE_CODE (access2) != POLYNOMIAL_CHREC
@@ -2343,7 +2345,7 @@  create_intersect_range_checks_index (loop_vec_info loop_vinfo, tree *cond_expr,
 
 	  return false;
 	}
-      /* Two index must have the same step.  */
+      /* The two indices must have the same step.  */
       if (!operand_equal_p (CHREC_RIGHT (access1), CHREC_RIGHT (access2), 0))
 	return false;