From: Roman Gareev Date: Thu, 24 Jul 2014 14:08:29 +0000 (+0000) Subject: [gcc/] X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a663102770082432f660f5e3e572221f5a48655d;p=gcc.git [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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cee82abe9d4..f1a0b3c0277 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2014-07-24 Roman Gareev + + * 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 * 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 b42d3317a6f..77b5ed4afe1 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::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 00000000000..36c0159631b --- /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; +}