* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154618
138bc75d-0d04-0410-961f-
82ee72b054a4
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.
(SCOP_SAVED_SCHEDULE): New.
(store_lst_schedule): New.
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;
}
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);
}
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
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));
}
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));
}