aboutsummaryrefslogtreecommitdiff
path: root/gcc/lto/lto.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/lto/lto.c')
-rw-r--r--gcc/lto/lto.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index a8027a4..9407a17 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -1127,19 +1127,19 @@ free_section_data (struct lto_file_decl_data *file_data ATTRIBUTE_UNUSED,
/* Structure describing ltrans partitions. */
-struct GTY (()) ltrans_partition_def
+struct ltrans_partition_def
{
cgraph_node_set cgraph_set;
varpool_node_set varpool_set;
- const char * GTY ((skip)) name;
+ const char * name;
int insns;
};
typedef struct ltrans_partition_def *ltrans_partition;
DEF_VEC_P(ltrans_partition);
-DEF_VEC_ALLOC_P(ltrans_partition,gc);
+DEF_VEC_ALLOC_P(ltrans_partition,heap);
-static GTY (()) VEC(ltrans_partition, gc) *ltrans_partitions;
+static VEC(ltrans_partition, heap) *ltrans_partitions;
static void add_cgraph_node_to_partition (ltrans_partition part, struct cgraph_node *node);
static void add_varpool_node_to_partition (ltrans_partition part, struct varpool_node *vnode);
@@ -1148,15 +1148,29 @@ static void add_varpool_node_to_partition (ltrans_partition part, struct varpool
static ltrans_partition
new_partition (const char *name)
{
- ltrans_partition part = ggc_alloc_ltrans_partition_def ();
+ ltrans_partition part = XCNEW (struct ltrans_partition_def);
part->cgraph_set = cgraph_node_set_new ();
part->varpool_set = varpool_node_set_new ();
part->name = name;
part->insns = 0;
- VEC_safe_push (ltrans_partition, gc, ltrans_partitions, part);
+ VEC_safe_push (ltrans_partition, heap, ltrans_partitions, part);
return part;
}
+/* Free memory used by ltrans datastructures. */
+static void
+free_ltrans_partitions ()
+{
+ unsigned int idx;
+ ltrans_partition part;
+ for (idx = 0; VEC_iterate (ltrans_partition, ltrans_partitions, idx, part); idx++)
+ {
+ free_cgraph_node_set (part->cgraph-set);
+ free (part);
+ }
+ VEC_free (latrans_partition, heap, ltrans_partitions);
+}
+
/* See all references that go to comdat objects and bring them into partition too. */
static void
add_references_to_partition (ltrans_partition part, struct ipa_ref_list *refs)
@@ -1977,6 +1991,8 @@ lto_wpa_write_files (void)
if (fclose (ltrans_output_list_stream))
fatal_error ("closing LTRANS output list %s: %m", ltrans_output_list);
+ free_ltrans_partitions();
+
timevar_pop (TV_WHOPR_WPA_IO);
}