This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR46758: Do not use int_cst_value.
- From: Sebastian Pop <sebpop at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: rguenther at suse dot de, Sebastian Pop <sebpop at gmail dot com>
- Date: Wed, 22 Dec 2010 18:18:03 -0600
- Subject: [PATCH] Fix PR46758: Do not use int_cst_value.
Hi,
With this patch graphite doesn't use int_cst_value anymore. This
fixes PR46758 by calling the tree_int_to_gmp that in turn calls the
tree_to_double_int functions. I sent this to regstrap on an
amd64-linux machine. Ok for trunk once this passes?
Thanks,
Sebastian
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/46758
* graphite-sese-to-poly.c (scan_tree_for_params_right_scev): Use
tree_int_to_gmp instead of int_cst_value.
(scan_tree_for_params_int): Same.
(scan_tree_for_params): Same.
(pdr_add_data_dimensions): Use ppl_set_inhomogeneous_tree.
* gcc.dg/graphite/run-id-pr46758.c: New.
---
gcc/ChangeLog | 9 +++++++++
gcc/graphite-sese-to-poly.c | 24 +++++++++++++-----------
gcc/testsuite/ChangeLog | 5 +++++
gcc/testsuite/gcc.dg/graphite/run-id-pr46758.c | 18 ++++++++++++++++++
4 files changed, 45 insertions(+), 11 deletions(-)
create mode 100644 gcc/testsuite/gcc.dg/graphite/run-id-pr46758.c
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6beaa7c..122b835 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,14 @@
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+ PR tree-optimization/46758
+ * graphite-sese-to-poly.c (scan_tree_for_params_right_scev): Use
+ tree_int_to_gmp instead of int_cst_value.
+ (scan_tree_for_params_int): Same.
+ (scan_tree_for_params): Same.
+ (pdr_add_data_dimensions): Use ppl_set_inhomogeneous_tree.
+
+2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/47019
* sese.h (scev_analyzable_p): Parameters of a SCoP are SCEV analyzable.
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 49250b6..d02b9af 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -612,7 +612,7 @@ scan_tree_for_params_right_scev (sese s, tree e, int var,
gcc_assert (TREE_CODE (e) == INTEGER_CST);
mpz_init (val);
- mpz_set_si (val, int_cst_value (e));
+ tree_int_to_gmp (e, val);
add_value_to_dim (l, expr, val);
mpz_clear (val);
}
@@ -626,17 +626,16 @@ scan_tree_for_params_int (tree cst, ppl_Linear_Expression_t expr, mpz_t k)
{
mpz_t val;
ppl_Coefficient_t coef;
- int v = int_cst_value (cst);
+ tree signed_type, type = TREE_TYPE (cst);
mpz_init (val);
- mpz_set_si (val, 0);
/* Necessary to not get "-1 = 2^n - 1". */
- if (v < 0)
- mpz_sub_ui (val, val, -v);
- else
- mpz_add_ui (val, val, v);
+ if (TYPE_UNSIGNED (type)
+ && (signed_type = signed_type_for (type)))
+ cst = fold_convert (signed_type, cst);
+ tree_int_to_gmp (cst, val);
mpz_mul (val, val, k);
ppl_new_Coefficient (&coef);
ppl_assign_Coefficient_from_mpz_t (coef, val);
@@ -713,7 +712,7 @@ scan_tree_for_params (sese s, tree e, ppl_Linear_Expression_t c,
mpz_t val;
gcc_assert (host_integerp (TREE_OPERAND (e, 1), 0));
mpz_init (val);
- mpz_set_si (val, int_cst_value (TREE_OPERAND (e, 1)));
+ tree_int_to_gmp (TREE_OPERAND (e, 1), val);
mpz_mul (val, val, k);
scan_tree_for_params (s, TREE_OPERAND (e, 0), c, val);
mpz_clear (val);
@@ -728,7 +727,7 @@ scan_tree_for_params (sese s, tree e, ppl_Linear_Expression_t c,
mpz_t val;
gcc_assert (host_integerp (TREE_OPERAND (e, 0), 0));
mpz_init (val);
- mpz_set_si (val, int_cst_value (TREE_OPERAND (e, 0)));
+ tree_int_to_gmp (TREE_OPERAND (e, 0), val);
mpz_mul (val, val, k);
scan_tree_for_params (s, TREE_OPERAND (e, 1), c, val);
mpz_clear (val);
@@ -1614,10 +1613,13 @@ pdr_add_data_dimensions (ppl_Polyhedron_t accesses, data_reference_p dr,
/* subscript - low >= 0 */
if (host_integerp (low, 0))
{
+ tree minus_low;
+
ppl_new_Linear_Expression_with_dimension (&expr, accessp_nb_dims);
ppl_set_coef (expr, subscript, 1);
- ppl_set_inhomogeneous (expr, -int_cst_value (low));
+ minus_low = fold_build1 (NEGATE_EXPR, TREE_TYPE (low), low);
+ ppl_set_inhomogeneous_tree (expr, minus_low);
ppl_new_Constraint (&cstr, expr, PPL_CONSTRAINT_TYPE_GREATER_OR_EQUAL);
ppl_Polyhedron_add_constraint (accesses, cstr);
@@ -1637,7 +1639,7 @@ pdr_add_data_dimensions (ppl_Polyhedron_t accesses, data_reference_p dr,
ppl_new_Linear_Expression_with_dimension (&expr, accessp_nb_dims);
ppl_set_coef (expr, subscript, -1);
- ppl_set_inhomogeneous (expr, int_cst_value (high));
+ ppl_set_inhomogeneous_tree (expr, high);
ppl_new_Constraint (&cstr, expr, PPL_CONSTRAINT_TYPE_GREATER_OR_EQUAL);
ppl_Polyhedron_add_constraint (accesses, cstr);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 22b83bf..c085924 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+ PR tree-optimization/46758
+ * gcc.dg/graphite/run-id-pr46758.c: New.
+
+2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/47019
* gfortran.dg/graphite/pr47019.f: New.
diff --git a/gcc/testsuite/gcc.dg/graphite/run-id-pr46758.c b/gcc/testsuite/gcc.dg/graphite/run-id-pr46758.c
new file mode 100644
index 0000000..81411f5
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/run-id-pr46758.c
@@ -0,0 +1,18 @@
+int
+movegt (int y, long long a)
+{
+ int i;
+ int ret = 0;
+ for (i = 0; i < y; i++)
+ if (a == -1LL << 33)
+ ret = -1;
+ return ret;
+}
+
+int
+main ()
+{
+ if (movegt (1, -1LL << 33) != -1)
+ __builtin_abort ();
+ return 0;
+}
--
1.7.1