From f70de156ee79126bdb86837e6a2e41930c531836 Mon Sep 17 00:00:00 2001
From: Sebastian Pop <sebastian.pop@amd.com>
Date: Wed, 25 Nov 2009 05:21:26 +0000
Subject: [PATCH] graphite-poly.c (new_scop): Initialize
 SCOP_ORIGINAL_SCHEDULE...

2009-10-22  Sebastian Pop  <sebastian.pop@amd.com>

	* graphite-poly.c (new_scop): Initialize SCOP_ORIGINAL_SCHEDULE,
	SCOP_TRANSFORMED_SCHEDULE, and SCOP_SAVED_SCHEDULE.
	(free_scop): Call free_lst on SCOP_ORIGINAL_SCHEDULE,
	SCOP_TRANSFORMED_SCHEDULE, and SCOP_SAVED_SCHEDULE.
	* graphite-poly.h (free_lst): New.
	(store_lst_schedule): Free SCOP_SAVED_SCHEDULE.
	(restore_lst_schedule): Free SCOP_TRANSFORMED_SCHEDULE.

From-SVN: r154618
---
 gcc/ChangeLog.graphite | 10 ++++++++++
 gcc/graphite-poly.c    |  6 ++++++
 gcc/graphite-poly.h    | 28 ++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+)

diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 2450045b0182..4f077da488d8 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,13 @@
+2009-10-22  Sebastian Pop  <sebastian.pop@amd.com>
+
+	* graphite-poly.c (new_scop): Initialize SCOP_ORIGINAL_SCHEDULE,
+	SCOP_TRANSFORMED_SCHEDULE, and SCOP_SAVED_SCHEDULE.
+	(free_scop): Call free_lst on SCOP_ORIGINAL_SCHEDULE,
+	SCOP_TRANSFORMED_SCHEDULE, and SCOP_SAVED_SCHEDULE.
+	* graphite-poly.h (free_lst): New.
+	(store_lst_schedule): Free SCOP_SAVED_SCHEDULE.
+	(restore_lst_schedule): Free SCOP_TRANSFORMED_SCHEDULE.
+
 2009-10-22  Sebastian Pop  <sebastian.pop@amd.com>
 
 	* graphite-poly.h (struct scop): Add a field saved_schedule.
diff --git a/gcc/graphite-poly.c b/gcc/graphite-poly.c
index bed662aaf005..d76397a13d31 100644
--- a/gcc/graphite-poly.c
+++ b/gcc/graphite-poly.c
@@ -463,6 +463,9 @@ new_scop (void *region)
   SCOP_BBS (scop) = VEC_alloc (poly_bb_p, heap, 3);
   SCOP_ORIGINAL_PDDRS (scop) = htab_create (10, hash_poly_ddr_p,
 					    eq_poly_ddr_p, free_poly_ddr);
+  SCOP_ORIGINAL_SCHEDULE (scop) = NULL;
+  SCOP_TRANSFORMED_SCHEDULE (scop) = NULL;
+  SCOP_SAVED_SCHEDULE (scop) = NULL;
   return scop;
 }
 
@@ -483,6 +486,9 @@ free_scop (scop_p scop)
     ppl_delete_Pointset_Powerset_C_Polyhedron (SCOP_CONTEXT (scop));
 
   htab_delete (SCOP_ORIGINAL_PDDRS (scop));
+  free_lst (SCOP_ORIGINAL_SCHEDULE (scop));
+  free_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
+  free_lst (SCOP_SAVED_SCHEDULE (scop));
   XDELETE (scop);
 }
 
diff --git a/gcc/graphite-poly.h b/gcc/graphite-poly.h
index 3782c788463e..0de58ba519dd 100644
--- a/gcc/graphite-poly.h
+++ b/gcc/graphite-poly.h
@@ -670,6 +670,28 @@ new_lst_stmt (poly_bb_p pbb)
   return lst;
 }
 
+/* Frees the memory used by LST.  */
+
+static inline void
+free_lst (lst_p lst)
+{
+  if (!lst)
+    return;
+
+  if (LST_LOOP_P (lst))
+    {
+      int i;
+      lst_p l;
+
+      for (i = 0; VEC_iterate (lst_p, LST_SEQ (lst), i, l); i++)
+	free_lst (l);
+
+      VEC_free (lst_p, heap, LST_SEQ (lst));
+    }
+
+  free (lst);
+}
+
 /* Returns a copy of LST.  */
 
 static inline lst_p
@@ -945,6 +967,9 @@ store_scattering_pbb (poly_bb_p pbb)
 static inline void
 store_lst_schedule (scop_p scop)
 {
+  if (SCOP_SAVED_SCHEDULE (scop))
+    free_lst (SCOP_SAVED_SCHEDULE (scop));
+
   SCOP_SAVED_SCHEDULE (scop) = copy_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
 }
 
@@ -953,6 +978,9 @@ store_lst_schedule (scop_p scop)
 static inline void
 restore_lst_schedule (scop_p scop)
 {
+  if (SCOP_TRANSFORMED_SCHEDULE (scop))
+    free_lst (SCOP_TRANSFORMED_SCHEDULE (scop));
+
   SCOP_TRANSFORMED_SCHEDULE (scop) = copy_lst (SCOP_SAVED_SCHEDULE (scop));
 }
 
-- 
GitLab