diff mbox

[GSoC] A bug related to induction variables and blocks

Message ID CABGF_ge0PNB4wzpHigRwRAENTw9E4pVguR5asFiqMDfnZbiOKQ@mail.gmail.com
State New
Headers show

Commit Message

Roman Gareev July 24, 2014, 10:09 a.m. UTC
> Is there a reason you have those global values? To my understanding they
> could possibly just be function parameters?

Yes, it would be fine for this test case. I've implemented this in the
improved version.

--
                                   Cheers, Roman Gareev.
2014-07-23  Roman Gareev  <gareevroman@gmail.com>

[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.

Comments

Tobias Grosser July 24, 2014, 10:33 a.m. UTC | #1
On 24/07/2014 12:09, Roman Gareev wrote:
>> Is there a reason you have those global values? To my understanding they
>> could possibly just be function parameters?
>
> Yes, it would be fine for this test case. I've implemented this in the
> improved version.

LGTM.

Tobias
diff mbox

Patch

Index: gcc/graphite-isl-ast-to-gimple.c
===================================================================
--- gcc/graphite-isl-ast-to-gimple.c	(revision 212922)
+++ gcc/graphite-isl-ast-to-gimple.c	(working copy)
@@ -383,6 +383,10 @@ 
 
   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;
Index: gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c
===================================================================
--- gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c	(revision 0)
+++ gcc/testsuite/gcc.dg/graphite/isl-ast-gen-blocks-4.c	(working copy)
@@ -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;
+}