]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Makefile.in (stmt.o): Add alloc-pool.h dependency.
authorLaurynas Biveinis <laurynas.biveinis@gmail.com>
Wed, 5 Sep 2007 15:50:41 +0000 (15:50 +0000)
committerLaurynas Biveinis <lauras@gcc.gnu.org>
Wed, 5 Sep 2007 15:50:41 +0000 (15:50 +0000)
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

gcc/ChangeLog
gcc/Makefile.in
gcc/stmt.c

index 2051ef1a05c513fed192154706861a2ccd9f72ae..389edbfc14678e994a81b37707581f1f8d157444 100644 (file)
@@ -1,3 +1,13 @@
+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>
index 1846b8e6baf3313153a9c157cc3b46daa78cfafa..56c79144b8158012cb83c582ac0987e1147a2bb4 100644 (file)
@@ -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 \
index 7192dcaf29195e81dab8fe4abf7fe178d72fa581..69cb5e0b8603c44a306eb1a81c5d17dcbaa32007 100644 (file)
@@ -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"
 \f
 /* 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);
 
 \f
 /* 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.  */