aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Gareev <gareevroman@gmail.com>2014-07-24 14:08:29 +0000
committerRoman Gareev <romangareev@gcc.gnu.org>2014-07-24 14:08:29 +0000
commita663102770082432f660f5e3e572221f5a48655d (patch)
tree48a5d78f5dc33dd2c062d14b1d20c34fc61dc00a
parentdacd445e14adb14de376a623d8686f93d3697729 (diff)
downloadgcc-a663102770082432f660f5e3e572221f5a48655d.zip
gcc-a663102770082432f660f5e3e572221f5a48655d.tar.gz
gcc-a663102770082432f660f5e3e572221f5a48655d.tar.bz2
[gcc/]
* graphite-isl-ast-to-gimple.c: (graphite_create_new_loop): Add calling of isl_id_free to properly decrement reference counts. [gcc/testsuite] * gcc.dg/graphite/isl-ast-gen-blocks-4.c: New testcase. From-SVN: r212994
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/graphite-isl-ast-to-gimple.c4
-rw-r--r--gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c32
3 files changed, 44 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cee82ab..f1a0b3c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2014-07-24 Roman Gareev <gareevroman@gmail.com>
+
+ * graphite-isl-ast-to-gimple.c:
+ (graphite_create_new_loop): Add calling of isl_id_free to properly
+ decrement reference counts.
+
+ * gcc.dg/graphite/isl-ast-gen-blocks-4.c: New testcase.
+
2014-07-24 Martin Liska <mliska@suse.cz>
* cgraphunit.c (compile): Correct function used.
diff --git a/gcc/graphite-isl-ast-to-gimple.c b/gcc/graphite-isl-ast-to-gimple.c
index b42d331..77b5ed4 100644
--- a/gcc/graphite-isl-ast-to-gimple.c
+++ b/gcc/graphite-isl-ast-to-gimple.c
@@ -389,6 +389,10 @@ graphite_create_new_loop (edge entry_edge, __isl_keep isl_ast_node *node_for,
isl_ast_expr *for_iterator = isl_ast_node_for_get_iterator (node_for);
isl_id *id = isl_ast_expr_get_id (for_iterator);
+ std::map<isl_id *, tree>::iterator res;
+ res = ip.find (id);
+ if (ip.count (id))
+ isl_id_free (res->first);
ip[id] = iv;
isl_ast_expr_free (for_iterator);
return loop;
diff --git a/gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c b/gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c
new file mode 100644
index 0000000..36c0159
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c
@@ -0,0 +1,32 @@
+/* { dg-do run } */
+/* { dg-options "-O2 -fgraphite-identity -fgraphite-code-generator=isl" } */
+
+static int __attribute__((noinline))
+foo (int k, int n1, int n2, int n3)
+{
+ int j, res = 0;
+ for (j = 0; j < k; j++)
+ {
+ int i;
+ for (i = 0; i < n1; i++)
+ res += i;
+ for (i = 0; i < n2; i++)
+ res += i;
+ for (i = 0; i < n3; i++)
+ res += i;
+ }
+
+ return res;
+}
+
+extern void abort ();
+
+int
+main (void)
+{
+ int res = foo (4, 50, 50, 50);
+ if (res != 14700)
+ abort ();
+
+ return 0;
+}