aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSebastian Pop <sebastian.pop@amd.com>2010-03-08 17:49:57 +0000
committerSebastian Pop <spop@gcc.gnu.org>2010-03-08 17:49:57 +0000
commit3640d64c0f932708e15f82ca4ddc15b15ebf4db5 (patch)
tree5cba635cf3f733e120c6bba9a788c68daffb76e8 /gcc
parentb75d95c95c8a7d6831602abde6ec2ef5cf215ff6 (diff)
downloadgcc-3640d64c0f932708e15f82ca4ddc15b15ebf4db5.zip
gcc-3640d64c0f932708e15f82ca4ddc15b15ebf4db5.tar.gz
gcc-3640d64c0f932708e15f82ca4ddc15b15ebf4db5.tar.bz2
Fix PR43065: Insert bounds on pointer type parameters.
2010-03-05 Sebastian Pop <sebastian.pop@amd.com> Reza Yazdani <reza.yazdani@amd.com> PR middle-end/43065 * graphite-sese-to-poly.c (add_param_constraints): Insert bounds on pointer type parameters. * gcc.dg/graphite/run-id-4.c: New. Co-Authored-By: Reza Yazdani <reza.yazdani@amd.com> From-SVN: r157289
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog.graphite11
-rw-r--r--gcc/graphite-sese-to-poly.c18
-rw-r--r--gcc/testsuite/gcc.dg/graphite/run-id-4.c28
3 files changed, 50 insertions, 7 deletions
diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 4d2853c..c3d8220 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,4 +1,13 @@
-2010-03-04 Sebastian Pop <sebastian.pop@amd.com>
+2010-03-05 Sebastian Pop <sebastian.pop@amd.com>
+ Reza Yazdani <reza.yazdani@amd.com>
+
+ PR middle-end/43065
+ * graphite-sese-to-poly.c (add_param_constraints): Insert bounds
+ on pointer type parameters.
+
+ * gcc.dg/graphite/run-id-4.c: New.
+
+2010-03-05 Sebastian Pop <sebastian.pop@amd.com>
PR middle-end/43065
* gcc.dg/graphite/run-id-3.c: New.
diff --git a/gcc/graphite-sese-to-poly.c b/gcc/graphite-sese-to-poly.c
index 279a905..89330727 100644
--- a/gcc/graphite-sese-to-poly.c
+++ b/gcc/graphite-sese-to-poly.c
@@ -1499,13 +1499,19 @@ add_param_constraints (scop_p scop, ppl_Polyhedron_t context, graphite_dim_t p)
ppl_Linear_Expression_t le;
tree parameter = VEC_index (tree, SESE_PARAMS (SCOP_REGION (scop)), p);
tree type = TREE_TYPE (parameter);
- tree lb, ub;
+ tree lb = NULL_TREE;
+ tree ub = NULL_TREE;
- if (!INTEGRAL_TYPE_P (type))
- return;
-
- lb = TYPE_MIN_VALUE (type);
- ub = TYPE_MAX_VALUE (type);
+ if (INTEGRAL_TYPE_P (type))
+ {
+ lb = TYPE_MIN_VALUE (type);
+ ub = TYPE_MAX_VALUE (type);
+ }
+ else if (POINTER_TYPE_P (type))
+ {
+ lb = TYPE_MIN_VALUE (unsigned_type_node);
+ ub = TYPE_MAX_VALUE (unsigned_type_node);
+ }
if (lb)
{
diff --git a/gcc/testsuite/gcc.dg/graphite/run-id-4.c b/gcc/testsuite/gcc.dg/graphite/run-id-4.c
new file mode 100644
index 0000000..143a449
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/run-id-4.c
@@ -0,0 +1,28 @@
+/* PR rtl-optimization/24899 */
+
+extern void abort (void);
+
+__attribute__ ((noinline)) int
+foo (int x, int y, int *z)
+{
+ int a, b, c, d;
+
+ a = b = 0;
+ for (d = 0; d < y; d++)
+ {
+ if (z)
+ b = d * *z;
+ for (c = 0; c < x; c++)
+ a += b;
+ }
+
+ return a;
+}
+
+int
+main (void)
+{
+ if (foo (3, 2, 0) != 0)
+ abort ();
+ return 0;
+}