From: Laurynas Biveinis Date: Wed, 5 Sep 2007 15:50:41 +0000 (+0000) Subject: Makefile.in (stmt.o): Add alloc-pool.h dependency. X-Git-Tag: releases/gcc-4.3.0~2864 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ac1b3a475230d82bfa5c80ea3ac70ca0e1ac8cd;p=thirdparty%2Fgcc.git Makefile.in (stmt.o): Add alloc-pool.h dependency. 2007-09-05 Laurynas Biveinis * Makefile.in (stmt.o): Add alloc-pool.h dependency. * stmt.c: Include alloc-pool.h. (struct case_node): Remove GTY marker. (add_case_node): New parameter case_node_pool. Use it for allocation of r. (expand_case): New allocation pool case_node_pool. Initialize it, pass to add_case_node and free it. From-SVN: r128139 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2051ef1a05c5..389edbfc1467 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2007-09-05 Laurynas Biveinis + + * Makefile.in (stmt.o): Add alloc-pool.h dependency. + * stmt.c: Include alloc-pool.h. + (struct case_node): Remove GTY marker. + (add_case_node): New parameter case_node_pool. Use it for + allocation of r. + (expand_case): New allocation pool case_node_pool. Initialize it, + pass to add_case_node and free it. + 2007-09-05 Sandra Loosemore David Ung Nigel Stephens diff --git a/gcc/Makefile.in b/gcc/Makefile.in index 1846b8e6baf3..56c79144b815 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -2366,7 +2366,7 @@ stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(FLAGS_H) $(FUNCTION_H) insn-config.h hard-reg-set.h $(EXPR_H) \ libfuncs.h except.h $(RECOG_H) toplev.h output.h $(GGC_H) $(TM_P_H) \ langhooks.h $(PREDICT_H) $(OPTABS_H) $(TARGET_H) $(MACHMODE_H) \ - $(REGS_H) + $(REGS_H) alloc-pool.h except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ $(TREE_H) $(FLAGS_H) except.h $(FUNCTION_H) $(EXPR_H) libfuncs.h \ langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \ diff --git a/gcc/stmt.c b/gcc/stmt.c index 7192dcaf2919..69cb5e0b8603 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -49,6 +49,7 @@ along with GCC; see the file COPYING3. If not see #include "optabs.h" #include "target.h" #include "regs.h" +#include "alloc-pool.h" /* Functions and data structures for expanding case statements. */ @@ -79,7 +80,7 @@ along with GCC; see the file COPYING3. If not see For very small, suitable switch statements, we can generate a series of simple bit test and branches instead. */ -struct case_node GTY(()) +struct case_node { struct case_node *left; /* Left son in binary tree */ struct case_node *right; /* Right son in binary tree; also node chain */ @@ -121,7 +122,7 @@ static int node_has_high_bound (case_node_ptr, tree); static int node_is_bounded (case_node_ptr, tree); static void emit_case_nodes (rtx, case_node_ptr, rtx, tree); static struct case_node *add_case_node (struct case_node *, tree, - tree, tree, tree); + tree, tree, tree, alloc_pool); /* Return the rtx-label that corresponds to a LABEL_DECL, @@ -2067,7 +2068,7 @@ expand_anon_union_decl (tree decl, tree cleanup ATTRIBUTE_UNUSED, static struct case_node * add_case_node (struct case_node *head, tree type, tree low, tree high, - tree label) + tree label, alloc_pool case_node_pool) { tree min_value, max_value; struct case_node *r; @@ -2119,7 +2120,7 @@ add_case_node (struct case_node *head, tree type, tree low, tree high, /* Add this label to the chain. Make sure to drop overflow flags. */ - r = ggc_alloc (sizeof (struct case_node)); + r = (struct case_node *) pool_alloc (case_node_pool); r->low = build_int_cst_wide (TREE_TYPE (low), TREE_INT_CST_LOW (low), TREE_INT_CST_HIGH (low)); r->high = build_int_cst_wide (TREE_TYPE (high), TREE_INT_CST_LOW (high), @@ -2322,6 +2323,10 @@ expand_case (tree exp) /* Label to jump to if no case matches. */ tree default_label_decl; + alloc_pool case_node_pool = create_alloc_pool ("struct case_node pool", + sizeof (struct case_node), + 100); + /* The switch body is lowered in gimplify.c, we should never have switches with a non-NULL SWITCH_BODY here. */ gcc_assert (!SWITCH_BODY (exp)); @@ -2359,7 +2364,7 @@ expand_case (tree exp) continue; case_list = add_case_node (case_list, index_type, low, high, - CASE_LABEL (elt)); + CASE_LABEL (elt), case_node_pool); } @@ -2410,6 +2415,7 @@ expand_case (tree exp) if (count == 0) { emit_jump (default_label); + free_alloc_pool (case_node_pool); return; } @@ -2580,6 +2586,7 @@ expand_case (tree exp) } free_temp_slots (); + free_alloc_pool (case_node_pool); } /* Generate code to jump to LABEL if OP0 and OP1 are equal in mode MODE. */