diff options
Diffstat (limited to 'gcc/ggc-common.c')
| -rw-r--r-- | gcc/ggc-common.c | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c index dcff4614001..2674cec52a1 100644 --- a/gcc/ggc-common.c +++ b/gcc/ggc-common.c @@ -34,7 +34,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA /* Statistics about the allocation. */ static ggc_statistics *ggc_stats; -static void ggc_mark_rtx_children_1 PARAMS ((rtx)); static int ggc_htab_delete PARAMS ((void **, void *)); /* Maintain global roots that are preserved during GC. */ @@ -132,140 +131,6 @@ ggc_mark_roots () htab_traverse (*cti->base, ggc_htab_delete, (PTR) cti); } -/* R had not been previously marked, but has now been marked via - ggc_set_mark. Now recurse and process the children. */ - -void -ggc_mark_rtx_children (r) - rtx r; -{ - rtx i, last; - - /* Special case the instruction chain. This is a data structure whose - chain length is potentially unbounded, and which contain references - within the chain (e.g. label_ref and insn_list). If do nothing here, - we risk blowing the stack recursing through a long chain of insns. - - Combat this by marking all of the instructions in the chain before - marking the contents of those instructions. */ - - switch (GET_CODE (r)) - { - case INSN: - case JUMP_INSN: - case CALL_INSN: - case NOTE: - case CODE_LABEL: - case BARRIER: - for (i = NEXT_INSN (r); ; i = NEXT_INSN (i)) - if (! ggc_test_and_set_mark (i)) - break; - last = i; - - for (i = NEXT_INSN (r); i != last; i = NEXT_INSN (i)) - ggc_mark_rtx_children_1 (i); - - default: - break; - } - - ggc_mark_rtx_children_1 (r); -} - -static void -ggc_mark_rtx_children_1 (r) - rtx r; -{ - const char *fmt; - int i; - rtx next_rtx; - - do - { - enum rtx_code code = GET_CODE (r); - /* This gets set to a child rtx to eliminate tail recursion. */ - next_rtx = NULL; - - /* Collect statistics, if appropriate. */ - if (ggc_stats) - { - ++ggc_stats->num_rtxs[(int) code]; - ggc_stats->size_rtxs[(int) code] += ggc_get_size (r); - } - - /* ??? If (some of) these are really pass-dependent info, do we - have any right poking our noses in? */ - switch (code) - { - case MEM: - gt_ggc_m_mem_attrs (MEM_ATTRS (r)); - break; - case JUMP_INSN: - ggc_mark_rtx (JUMP_LABEL (r)); - break; - case CODE_LABEL: - ggc_mark_rtx (LABEL_REFS (r)); - break; - case LABEL_REF: - ggc_mark_rtx (LABEL_NEXTREF (r)); - ggc_mark_rtx (CONTAINING_INSN (r)); - break; - case ADDRESSOF: - ggc_mark_tree (ADDRESSOF_DECL (r)); - break; - case NOTE: - switch (NOTE_LINE_NUMBER (r)) - { - case NOTE_INSN_EXPECTED_VALUE: - ggc_mark_rtx (NOTE_EXPECTED_VALUE (r)); - break; - - case NOTE_INSN_BLOCK_BEG: - case NOTE_INSN_BLOCK_END: - ggc_mark_tree (NOTE_BLOCK (r)); - break; - - default: - break; - } - break; - - default: - break; - } - - for (fmt = GET_RTX_FORMAT (GET_CODE (r)), i = 0; *fmt ; ++fmt, ++i) - { - rtx exp; - switch (*fmt) - { - case 'e': case 'u': - exp = XEXP (r, i); - if (ggc_test_and_set_mark (exp)) - { - if (next_rtx == NULL) - next_rtx = exp; - else - ggc_mark_rtx_children (exp); - } - break; - case 'V': case 'E': - gt_ggc_m_rtvec_def (XVEC (r, i)); - break; - } - } - } - while ((r = next_rtx) != NULL); -} - -/* Various adaptor functions. */ -void -gt_ggc_mx_rtx_def (x) - void *x; -{ - ggc_mark_rtx((rtx)x); -} - /* Allocate a block of memory, then clear it. */ void * ggc_alloc_cleared (size) |

