From 96df4529dc098109a5616d81feedade2f7b3922f Mon Sep 17 00:00:00 2001 From: Alex Samuel Date: Thu, 16 Sep 1999 12:27:01 -0700 Subject: ggc.h (ggc_root): Move to ggc-common.c. Thu Sep 16 11:50:52 1999 Alex Samuel * ggc.h (ggc_root): Move to ggc-common.c. (roots): Remove. (ggc_mark_rtx, ggc_mark_tree): Change to macro. (ggc_mark_rtvec, ggc_mark_tree_varray): Declare extern. (ggc_mark_tree_hash_table, ggc_mark_string, ggc_mark): Likewise. (ggc_mark_roots, ggc_mark_rtx_children, ggc_mark_tree_children): New. * ggc-common.c (ggc_root): Move from ggc.h. (roots): Declare, static. (ggc_mark_rtx, ggc_mark_tree): Renamed to... (ggc_mark_rtx_children, ggc_mark_tree_children): Don't check for null or check/set mark bit. (ggc_mark_roots): New. * ggc-simple.c (ggc_collect): Call ggc_mark_roots. From-SVN: r29461 --- gcc/ggc-common.c | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) (limited to 'gcc/ggc-common.c') diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c index 30725a2..319623b 100644 --- a/gcc/ggc-common.c +++ b/gcc/ggc-common.c @@ -32,7 +32,18 @@ /* Maintain global roots that are preserved during GC. */ -struct ggc_root *roots; +/* Global roots that are preserved during calls to gc. */ + +struct ggc_root +{ + struct ggc_root *next; + void *base; + int nelt; + int size; + void (*cb) PROTO ((void *)); +}; + +static struct ggc_root *roots; /* Type-correct function to pass to ggc_add_root. It just forwards *ELT (which is an rtx) to ggc_mark_tree_varray. */ @@ -170,15 +181,29 @@ ggc_del_root (base) } void -ggc_mark_rtx (r) +ggc_mark_roots () +{ + struct ggc_root* x; + + for (x = roots; x != NULL; x = x->next) + { + char *elt = x->base; + int s = x->size, n = x->nelt; + void (*cb) PROTO ((void *)) = x->cb; + int i; + + for (i = 0; i < n; ++i, elt += s) + (*cb)(elt); + } +} + +void +ggc_mark_rtx_children (r) rtx r; { const char *fmt; int i; - if (r == NULL_RTX || ggc_set_mark_rtx (r)) - return; - /* ??? If (some of) these are really pass-dependant info, do we have any right poking our noses in? */ switch (GET_CODE (r)) @@ -256,13 +281,9 @@ ggc_mark_rtvec (v) } void -ggc_mark_tree (t) +ggc_mark_tree_children (t) tree t; { - /* FIXME what if t == NULL_TREE ? */ - if (t == NULL || ggc_set_mark_tree (t)) - return; - /* Bits from common. */ ggc_mark_tree (TREE_TYPE (t)); ggc_mark_tree (TREE_CHAIN (t)); -- cgit v1.1