diff --git a/gcc/ChangeLog.graphite b/gcc/ChangeLog.graphite
index 456555538b260ed6d0aac2b828ee42f42a84d9a3..eec4f010782854b8657276276f4848f0df5dc104 100644
--- a/gcc/ChangeLog.graphite
+++ b/gcc/ChangeLog.graphite
@@ -1,3 +1,11 @@
+2009-11-03  Sebastian Pop  <sebastian.pop@amd.com>
+
+	* graphite-clast-to-gimple.c (gloog): Free if_region,
+	if_region->true_region, and if_region->region.
+	* sese.c (if_region_set_false_region): Free if_region->false_region.
+	(create_if_region_on_edge): Do not use GGC_NEW.
+	(move_sese_in_condition): Remove useless initialization.
+
 2009-11-03  Sebastian Pop  <sebastian.pop@amd.com>
 
 	* graphite-interchange.c (lst_perfect_nestify): Pass 3 parameters
diff --git a/gcc/graphite-clast-to-gimple.c b/gcc/graphite-clast-to-gimple.c
index 85941908663dc75e296919145258b9a35f87fdcb..2df86fa2ac9e0d448f25b244bb60e1c6cfb2f408 100644
--- a/gcc/graphite-clast-to-gimple.c
+++ b/gcc/graphite-clast-to-gimple.c
@@ -1201,6 +1201,10 @@ gloog (scop_p scop, htab_t bb_pbb_mapping)
   recompute_all_dominators ();
   graphite_verify ();
 
+  free (if_region->true_region);
+  free (if_region->region);
+  free (if_region);
+
   htab_delete (rename_map);
   htab_delete (newivs_index);
   VEC_free (tree, heap, newivs);
diff --git a/gcc/sese.c b/gcc/sese.c
index 76c92bd08b78e2e501ea7459c672ee54e688dfae..bf315f97a262a46d6b5bca427c2aee1eb417c649 100644
--- a/gcc/sese.c
+++ b/gcc/sese.c
@@ -1384,6 +1384,9 @@ if_region_set_false_region (ifsese if_region, sese region)
   recompute_all_dominators ();
 
   SESE_EXIT (region) = false_edge;
+
+  if (if_region->false_region)
+    free (if_region->false_region);
   if_region->false_region = region;
 
   if (slot)
@@ -1409,10 +1412,10 @@ create_if_region_on_edge (edge entry, tree condition)
 {
   edge e;
   edge_iterator ei;
-  sese sese_region = GGC_NEW (struct sese_s);
-  sese true_region = GGC_NEW (struct sese_s);
-  sese false_region = GGC_NEW (struct sese_s);
-  ifsese if_region = GGC_NEW (struct ifsese_s);
+  sese sese_region = XNEW (struct sese_s);
+  sese true_region = XNEW (struct sese_s);
+  sese false_region = XNEW (struct sese_s);
+  ifsese if_region = XNEW (struct ifsese_s);
   edge exit = create_empty_if_region_on_edge (entry, condition);
 
   if_region->region = sese_region;
@@ -1449,7 +1452,7 @@ ifsese
 move_sese_in_condition (sese region)
 {
   basic_block pred_block = split_edge (SESE_ENTRY (region));
-  ifsese if_region = NULL;
+  ifsese if_region;
 
   SESE_ENTRY (region) = single_succ_edge (pred_block);
   if_region = create_if_region_on_edge (single_pred_edge (pred_block), integer_one_node);