OSDN Git Service

PR tree-optimization/31343
authorspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Apr 2007 00:09:35 +0000 (00:09 +0000)
committerspop <spop@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 11 Apr 2007 00:09:35 +0000 (00:09 +0000)
* tree-chrec.h (chrec_zerop): Moved before build_polynomial_chrec.
(build_polynomial_chrec): Return a scalar when the evolution is zero.
* testsuite/gcc.dg/vect/pr31343.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@123708 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/gcc.dg/vect/pr31343.c [new file with mode: 0644]
gcc/tree-chrec.h

index d5f2ac7..ef78864 100644 (file)
@@ -1,3 +1,10 @@
+2007-04-10  Sebastian Pop  <sebastian.pop@inria.fr>
+
+       PR tree-optimization/31343
+       * tree-chrec.h (chrec_zerop): Moved before build_polynomial_chrec.
+       (build_polynomial_chrec): Return a scalar when the evolution is zero.
+       * testsuite/gcc.dg/vect/pr31343.c: New.
+
 2007-04-10  Eric Christopher  <echristo@apple.com>
 
        * config/i386/i386.h (X87_FLOAT_MODE_P): New.
diff --git a/gcc/testsuite/gcc.dg/vect/pr31343.c b/gcc/testsuite/gcc.dg/vect/pr31343.c
new file mode 100644 (file)
index 0000000..8564222
--- /dev/null
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+
+#define N 16
+struct
+{
+  unsigned int x;
+  unsigned int y;
+} pS [100];
+
+void
+main1 ()
+{
+  int i, j;
+  unsigned int ub[N] =
+    { 1, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45 };
+  unsigned int uc[N] =
+    { 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
+  unsigned int udiffx, udiffy;
+
+  for (i = 0; i < N; i++)
+    {
+      pS[i].x = 0;
+      pS[i].y = 0;
+      for (j = 0; j < N; j++)
+      {
+        udiffx = (ub[j] - uc[j]);
+        udiffy = (ub[j] - uc[j]);
+        pS[i].x = udiffx;
+        pS[i].y = udiffy;
+      }
+    }
+}
+
+/* { dg-final { cleanup-tree-dump "vect" } } */
index c22867b..95c6f38 100644 (file)
@@ -84,7 +84,19 @@ extern bool evolution_function_is_affine_multivariate_p (tree);
 extern bool evolution_function_is_univariate_p (tree);
 extern unsigned nb_vars_in_chrec (tree);
 
-\f
+/* Determines whether CHREC is equal to zero.  */
+
+static inline bool 
+chrec_zerop (tree chrec)
+{
+  if (chrec == NULL_TREE)
+    return false;
+  
+  if (TREE_CODE (chrec) == INTEGER_CST)
+    return integer_zerop (chrec);
+  
+  return false;
+}
 
 /* Build a polynomial chain of recurrence.  */
 
@@ -99,28 +111,13 @@ build_polynomial_chrec (unsigned loop_num,
 
   gcc_assert (TREE_TYPE (left) == TREE_TYPE (right));
 
+  if (chrec_zerop (right))
+    return left;
+
   return build3 (POLYNOMIAL_CHREC, TREE_TYPE (left), 
                 build_int_cst (NULL_TREE, loop_num), left, right);
 }
 
-\f
-
-/* Observers.  */
-
-/* Determines whether CHREC is equal to zero.  */
-
-static inline bool 
-chrec_zerop (tree chrec)
-{
-  if (chrec == NULL_TREE)
-    return false;
-  
-  if (TREE_CODE (chrec) == INTEGER_CST)
-    return integer_zerop (chrec);
-  
-  return false;
-}
-
 /* Determines whether the expression CHREC is a constant.  */
 
 static inline bool