From e9793dae58b5eaa6bf0a939be473f98dd83719f6 Mon Sep 17 00:00:00 2001 From: Sebastian Pop Date: Wed, 11 Apr 2007 02:09:35 +0200 Subject: [PATCH] re PR tree-optimization/31343 (ICE in data-refs dependence testing) 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. From-SVN: r123708 --- gcc/ChangeLog | 7 ++++++ gcc/testsuite/gcc.dg/vect/pr31343.c | 35 +++++++++++++++++++++++++++++ gcc/tree-chrec.h | 35 +++++++++++++---------------- 3 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/vect/pr31343.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d5f2ac7b5a6..ef788643cd8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2007-04-10 Sebastian Pop + + 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 * 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 index 00000000000..856422221cf --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr31343.c @@ -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" } } */ diff --git a/gcc/tree-chrec.h b/gcc/tree-chrec.h index c22867ba0d2..95c6f384dde 100644 --- a/gcc/tree-chrec.h +++ b/gcc/tree-chrec.h @@ -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); - +/* 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); } - - -/* 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