Commit 6ac1b3a4 by Laurynas Biveinis Committed by Laurynas Biveinis

Makefile.in (stmt.o): Add alloc-pool.h dependency.

2007-09-05  Laurynas Biveinis  <laurynas.biveinis@gmail.com>

	* 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
parent 5783dbc4
2007-09-05 Laurynas Biveinis <laurynas.biveinis@gmail.com>
* 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 <sandra@codesourcery.com>
David Ung <davidu@mips.com>
Nigel Stephens <nigel@mips.com>
......
......@@ -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 \
......
......@@ -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. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment