xref: /dflybsd-src/contrib/gcc-4.7/gcc/ggc.h (revision 04febcfb30580676d3e95f58a16c5137ee478b32)
1*e4b17023SJohn Marino /* Garbage collection for the GNU compiler.
2*e4b17023SJohn Marino 
3*e4b17023SJohn Marino    Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007,
4*e4b17023SJohn Marino    2008, 2009, 2010, 2011 Free Software Foundation, Inc.
5*e4b17023SJohn Marino 
6*e4b17023SJohn Marino This file is part of GCC.
7*e4b17023SJohn Marino 
8*e4b17023SJohn Marino GCC is free software; you can redistribute it and/or modify it under
9*e4b17023SJohn Marino the terms of the GNU General Public License as published by the Free
10*e4b17023SJohn Marino Software Foundation; either version 3, or (at your option) any later
11*e4b17023SJohn Marino version.
12*e4b17023SJohn Marino 
13*e4b17023SJohn Marino GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14*e4b17023SJohn Marino WARRANTY; without even the implied warranty of MERCHANTABILITY or
15*e4b17023SJohn Marino FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16*e4b17023SJohn Marino for more details.
17*e4b17023SJohn Marino 
18*e4b17023SJohn Marino You should have received a copy of the GNU General Public License
19*e4b17023SJohn Marino along with GCC; see the file COPYING3.  If not see
20*e4b17023SJohn Marino <http://www.gnu.org/licenses/>.  */
21*e4b17023SJohn Marino 
22*e4b17023SJohn Marino #ifndef GCC_GGC_H
23*e4b17023SJohn Marino #define GCC_GGC_H
24*e4b17023SJohn Marino #include "statistics.h"
25*e4b17023SJohn Marino 
26*e4b17023SJohn Marino /* Symbols are marked with `ggc' for `gcc gc' so as not to interfere with
27*e4b17023SJohn Marino    an external gc library that might be linked in.  */
28*e4b17023SJohn Marino 
29*e4b17023SJohn Marino /* Constants for general use.  */
30*e4b17023SJohn Marino extern const char empty_string[];	/* empty string */
31*e4b17023SJohn Marino 
32*e4b17023SJohn Marino /* Internal functions and data structures used by the GTY
33*e4b17023SJohn Marino    machinery, including the generated gt*.[hc] files.  */
34*e4b17023SJohn Marino 
35*e4b17023SJohn Marino /* The first parameter is a pointer to a pointer, the second a cookie.  */
36*e4b17023SJohn Marino typedef void (*gt_pointer_operator) (void *, void *);
37*e4b17023SJohn Marino 
38*e4b17023SJohn Marino #include "gtype-desc.h"
39*e4b17023SJohn Marino 
40*e4b17023SJohn Marino /* One of these applies its third parameter (with cookie in the fourth
41*e4b17023SJohn Marino    parameter) to each pointer in the object pointed to by the first
42*e4b17023SJohn Marino    parameter, using the second parameter.  */
43*e4b17023SJohn Marino typedef void (*gt_note_pointers) (void *, void *, gt_pointer_operator,
44*e4b17023SJohn Marino 				  void *);
45*e4b17023SJohn Marino 
46*e4b17023SJohn Marino /* One of these is called before objects are re-ordered in memory.
47*e4b17023SJohn Marino    The first parameter is the original object, the second is the
48*e4b17023SJohn Marino    subobject that has had its pointers reordered, the third parameter
49*e4b17023SJohn Marino    can compute the new values of a pointer when given the cookie in
50*e4b17023SJohn Marino    the fourth parameter.  */
51*e4b17023SJohn Marino typedef void (*gt_handle_reorder) (void *, void *, gt_pointer_operator,
52*e4b17023SJohn Marino 				   void *);
53*e4b17023SJohn Marino 
54*e4b17023SJohn Marino /* Used by the gt_pch_n_* routines.  Register an object in the hash table.  */
55*e4b17023SJohn Marino extern int gt_pch_note_object (void *, void *, gt_note_pointers,
56*e4b17023SJohn Marino 			       enum gt_types_enum);
57*e4b17023SJohn Marino 
58*e4b17023SJohn Marino /* Used by the gt_pch_n_* routines.  Register that an object has a reorder
59*e4b17023SJohn Marino    function.  */
60*e4b17023SJohn Marino extern void gt_pch_note_reorder (void *, void *, gt_handle_reorder);
61*e4b17023SJohn Marino 
62*e4b17023SJohn Marino /* Mark the object in the first parameter and anything it points to.  */
63*e4b17023SJohn Marino typedef void (*gt_pointer_walker) (void *);
64*e4b17023SJohn Marino 
65*e4b17023SJohn Marino /* Structures for the easy way to mark roots.
66*e4b17023SJohn Marino    In an array, terminated by having base == NULL.  */
67*e4b17023SJohn Marino struct ggc_root_tab {
68*e4b17023SJohn Marino   void *base;
69*e4b17023SJohn Marino   size_t nelt;
70*e4b17023SJohn Marino   size_t stride;
71*e4b17023SJohn Marino   gt_pointer_walker cb;
72*e4b17023SJohn Marino   gt_pointer_walker pchw;
73*e4b17023SJohn Marino };
74*e4b17023SJohn Marino #define LAST_GGC_ROOT_TAB { NULL, 0, 0, NULL, NULL }
75*e4b17023SJohn Marino /* Pointers to arrays of ggc_root_tab, terminated by NULL.  */
76*e4b17023SJohn Marino extern const struct ggc_root_tab * const gt_ggc_rtab[];
77*e4b17023SJohn Marino extern const struct ggc_root_tab * const gt_ggc_deletable_rtab[];
78*e4b17023SJohn Marino extern const struct ggc_root_tab * const gt_pch_cache_rtab[];
79*e4b17023SJohn Marino extern const struct ggc_root_tab * const gt_pch_scalar_rtab[];
80*e4b17023SJohn Marino 
81*e4b17023SJohn Marino /* Structure for hash table cache marking.  */
82*e4b17023SJohn Marino struct htab;
83*e4b17023SJohn Marino struct ggc_cache_tab {
84*e4b17023SJohn Marino   struct htab * *base;
85*e4b17023SJohn Marino   size_t nelt;
86*e4b17023SJohn Marino   size_t stride;
87*e4b17023SJohn Marino   gt_pointer_walker cb;
88*e4b17023SJohn Marino   gt_pointer_walker pchw;
89*e4b17023SJohn Marino   int (*marked_p) (const void *);
90*e4b17023SJohn Marino };
91*e4b17023SJohn Marino #define LAST_GGC_CACHE_TAB { NULL, 0, 0, NULL, NULL, NULL }
92*e4b17023SJohn Marino /* Pointers to arrays of ggc_cache_tab, terminated by NULL.  */
93*e4b17023SJohn Marino extern const struct ggc_cache_tab * const gt_ggc_cache_rtab[];
94*e4b17023SJohn Marino 
95*e4b17023SJohn Marino /* If EXPR is not NULL and previously unmarked, mark it and evaluate
96*e4b17023SJohn Marino    to true.  Otherwise evaluate to false.  */
97*e4b17023SJohn Marino #define ggc_test_and_set_mark(EXPR) \
98*e4b17023SJohn Marino   ((EXPR) != NULL && ((void *) (EXPR)) != (void *) 1 && ! ggc_set_mark (EXPR))
99*e4b17023SJohn Marino 
100*e4b17023SJohn Marino #define ggc_mark(EXPR)				\
101*e4b17023SJohn Marino   do {						\
102*e4b17023SJohn Marino     const void *const a__ = (EXPR);		\
103*e4b17023SJohn Marino     if (a__ != NULL && a__ != (void *) 1)	\
104*e4b17023SJohn Marino       ggc_set_mark (a__);			\
105*e4b17023SJohn Marino   } while (0)
106*e4b17023SJohn Marino 
107*e4b17023SJohn Marino /* Actually set the mark on a particular region of memory, but don't
108*e4b17023SJohn Marino    follow pointers.  This function is called by ggc_mark_*.  It
109*e4b17023SJohn Marino    returns zero if the object was not previously marked; nonzero if
110*e4b17023SJohn Marino    the object was already marked, or if, for any other reason,
111*e4b17023SJohn Marino    pointers in this data structure should not be traversed.  */
112*e4b17023SJohn Marino extern int ggc_set_mark	(const void *);
113*e4b17023SJohn Marino 
114*e4b17023SJohn Marino /* Return 1 if P has been marked, zero otherwise.
115*e4b17023SJohn Marino    P must have been allocated by the GC allocator; it mustn't point to
116*e4b17023SJohn Marino    static objects, stack variables, or memory allocated with malloc.  */
117*e4b17023SJohn Marino extern int ggc_marked_p	(const void *);
118*e4b17023SJohn Marino 
119*e4b17023SJohn Marino /* PCH and GGC handling for strings, mostly trivial.  */
120*e4b17023SJohn Marino extern void gt_pch_n_S (const void *);
121*e4b17023SJohn Marino extern void gt_ggc_m_S (const void *);
122*e4b17023SJohn Marino 
123*e4b17023SJohn Marino /* End of GTY machinery API.  */
124*e4b17023SJohn Marino 
125*e4b17023SJohn Marino struct alloc_zone;
126*e4b17023SJohn Marino 
127*e4b17023SJohn Marino /* Initialize the string pool.  */
128*e4b17023SJohn Marino extern void init_stringpool (void);
129*e4b17023SJohn Marino 
130*e4b17023SJohn Marino /* Initialize the garbage collector.  */
131*e4b17023SJohn Marino extern void init_ggc (void);
132*e4b17023SJohn Marino 
133*e4b17023SJohn Marino /* When true, identifier nodes are considered as GC roots.  When
134*e4b17023SJohn Marino    false, identifier nodes are treated like any other GC-allocated
135*e4b17023SJohn Marino    object, and the identifier hash table is treated as a weak
136*e4b17023SJohn Marino    hash.  */
137*e4b17023SJohn Marino extern bool ggc_protect_identifiers;
138*e4b17023SJohn Marino 
139*e4b17023SJohn Marino /* Write out all GCed objects to F.  */
140*e4b17023SJohn Marino extern void gt_pch_save (FILE *f);
141*e4b17023SJohn Marino 
142*e4b17023SJohn Marino 
143*e4b17023SJohn Marino /* Allocation.  */
144*e4b17023SJohn Marino 
145*e4b17023SJohn Marino /* The internal primitive.  */
146*e4b17023SJohn Marino extern void *ggc_internal_alloc_stat (size_t MEM_STAT_DECL);
147*e4b17023SJohn Marino 
148*e4b17023SJohn Marino extern size_t ggc_round_alloc_size (size_t requested_size);
149*e4b17023SJohn Marino 
150*e4b17023SJohn Marino #define ggc_internal_alloc(s) ggc_internal_alloc_stat (s MEM_STAT_INFO)
151*e4b17023SJohn Marino 
152*e4b17023SJohn Marino /* Allocate an object of the specified type and size.  */
153*e4b17023SJohn Marino extern void *ggc_alloc_typed_stat (enum gt_types_enum, size_t MEM_STAT_DECL);
154*e4b17023SJohn Marino 
155*e4b17023SJohn Marino #define ggc_alloc_typed(s, z) ggc_alloc_typed_stat (s, z MEM_STAT_INFO)
156*e4b17023SJohn Marino 
157*e4b17023SJohn Marino /* Allocates cleared memory.  */
158*e4b17023SJohn Marino extern void *ggc_internal_cleared_alloc_stat (size_t MEM_STAT_DECL);
159*e4b17023SJohn Marino 
160*e4b17023SJohn Marino /* Resize a block.  */
161*e4b17023SJohn Marino extern void *ggc_realloc_stat (void *, size_t MEM_STAT_DECL);
162*e4b17023SJohn Marino 
163*e4b17023SJohn Marino /* Free a block.  To be used when known for certain it's not reachable.  */
164*e4b17023SJohn Marino extern void ggc_free (void *);
165*e4b17023SJohn Marino 
166*e4b17023SJohn Marino extern void ggc_record_overhead (size_t, size_t, void * MEM_STAT_DECL);
167*e4b17023SJohn Marino extern void ggc_free_overhead (void *);
168*e4b17023SJohn Marino extern void ggc_prune_overhead_list (void);
169*e4b17023SJohn Marino 
170*e4b17023SJohn Marino extern void dump_ggc_loc_statistics (bool);
171*e4b17023SJohn Marino 
172*e4b17023SJohn Marino /* Reallocators.  */
173*e4b17023SJohn Marino #define GGC_RESIZEVEC(T, P, N) \
174*e4b17023SJohn Marino     ((T *) ggc_realloc_stat ((P), (N) * sizeof (T) MEM_STAT_INFO))
175*e4b17023SJohn Marino 
176*e4b17023SJohn Marino #define GGC_RESIZEVAR(T, P, N)                          \
177*e4b17023SJohn Marino     ((T *) ggc_realloc_stat ((P), (N) MEM_STAT_INFO))
178*e4b17023SJohn Marino 
179*e4b17023SJohn Marino static inline void *
ggc_internal_vec_alloc_stat(size_t s,size_t c MEM_STAT_DECL)180*e4b17023SJohn Marino ggc_internal_vec_alloc_stat (size_t s, size_t c MEM_STAT_DECL)
181*e4b17023SJohn Marino {
182*e4b17023SJohn Marino     return ggc_internal_alloc_stat (c * s PASS_MEM_STAT);
183*e4b17023SJohn Marino }
184*e4b17023SJohn Marino 
185*e4b17023SJohn Marino static inline void *
ggc_internal_cleared_vec_alloc_stat(size_t s,size_t c MEM_STAT_DECL)186*e4b17023SJohn Marino ggc_internal_cleared_vec_alloc_stat (size_t s, size_t c MEM_STAT_DECL)
187*e4b17023SJohn Marino {
188*e4b17023SJohn Marino     return ggc_internal_cleared_alloc_stat (c * s PASS_MEM_STAT);
189*e4b17023SJohn Marino }
190*e4b17023SJohn Marino 
191*e4b17023SJohn Marino #define ggc_internal_cleared_vec_alloc(s, c) \
192*e4b17023SJohn Marino     (ggc_internal_cleared_vec_alloc_stat ((s), (c) MEM_STAT_INFO))
193*e4b17023SJohn Marino 
194*e4b17023SJohn Marino static inline void *
ggc_alloc_atomic_stat(size_t s MEM_STAT_DECL)195*e4b17023SJohn Marino ggc_alloc_atomic_stat (size_t s MEM_STAT_DECL)
196*e4b17023SJohn Marino {
197*e4b17023SJohn Marino     return ggc_internal_alloc_stat (s PASS_MEM_STAT);
198*e4b17023SJohn Marino }
199*e4b17023SJohn Marino 
200*e4b17023SJohn Marino #define ggc_alloc_atomic(S)  (ggc_alloc_atomic_stat ((S) MEM_STAT_INFO))
201*e4b17023SJohn Marino 
202*e4b17023SJohn Marino #define ggc_alloc_cleared_atomic(S)             \
203*e4b17023SJohn Marino     (ggc_internal_cleared_alloc_stat ((S) MEM_STAT_INFO))
204*e4b17023SJohn Marino 
205*e4b17023SJohn Marino extern void * ggc_cleared_alloc_htab_ignore_args (size_t, size_t);
206*e4b17023SJohn Marino 
207*e4b17023SJohn Marino extern void * ggc_cleared_alloc_ptr_array_two_args (size_t, size_t);
208*e4b17023SJohn Marino 
209*e4b17023SJohn Marino #define htab_create_ggc(SIZE, HASH, EQ, DEL) \
210*e4b17023SJohn Marino   htab_create_typed_alloc (SIZE, HASH, EQ, DEL,	\
211*e4b17023SJohn Marino 			   ggc_cleared_alloc_htab_ignore_args,		\
212*e4b17023SJohn Marino 			   ggc_cleared_alloc_ptr_array_two_args,	\
213*e4b17023SJohn Marino 			   ggc_free)
214*e4b17023SJohn Marino 
215*e4b17023SJohn Marino #define splay_tree_new_ggc(COMPARE, ALLOC_TREE, ALLOC_NODE)		     \
216*e4b17023SJohn Marino   splay_tree_new_typed_alloc (COMPARE, NULL, NULL, &ALLOC_TREE, &ALLOC_NODE, \
217*e4b17023SJohn Marino 			      &ggc_splay_dont_free, NULL)
218*e4b17023SJohn Marino 
219*e4b17023SJohn Marino extern void *ggc_splay_alloc (enum gt_types_enum, int, void *);
220*e4b17023SJohn Marino 
221*e4b17023SJohn Marino extern void ggc_splay_dont_free (void *, void *);
222*e4b17023SJohn Marino 
223*e4b17023SJohn Marino /* Allocate a gc-able string, and fill it with LENGTH bytes from CONTENTS.
224*e4b17023SJohn Marino    If LENGTH is -1, then CONTENTS is assumed to be a
225*e4b17023SJohn Marino    null-terminated string and the memory sized accordingly.  */
226*e4b17023SJohn Marino extern const char *ggc_alloc_string_stat (const char *contents, int length
227*e4b17023SJohn Marino                                           MEM_STAT_DECL);
228*e4b17023SJohn Marino 
229*e4b17023SJohn Marino #define ggc_alloc_string(c, l) ggc_alloc_string_stat (c, l MEM_STAT_INFO)
230*e4b17023SJohn Marino 
231*e4b17023SJohn Marino /* Make a copy of S, in GC-able memory.  */
232*e4b17023SJohn Marino #define ggc_strdup(S) ggc_alloc_string_stat ((S), -1 MEM_STAT_INFO)
233*e4b17023SJohn Marino 
234*e4b17023SJohn Marino /* Invoke the collector.  Garbage collection occurs only when this
235*e4b17023SJohn Marino    function is called, not during allocations.  */
236*e4b17023SJohn Marino extern void ggc_collect	(void);
237*e4b17023SJohn Marino 
238*e4b17023SJohn Marino /* Register an additional root table.  This can be useful for some
239*e4b17023SJohn Marino    plugins.  Does nothing if the passed pointer is NULL. */
240*e4b17023SJohn Marino extern void ggc_register_root_tab (const struct ggc_root_tab *);
241*e4b17023SJohn Marino 
242*e4b17023SJohn Marino /* Register an additional cache table.  This can be useful for some
243*e4b17023SJohn Marino    plugins.  Does nothing if the passed pointer is NULL. */
244*e4b17023SJohn Marino extern void ggc_register_cache_tab (const struct ggc_cache_tab *);
245*e4b17023SJohn Marino 
246*e4b17023SJohn Marino /* Read objects previously saved with gt_pch_save from F.  */
247*e4b17023SJohn Marino extern void gt_pch_restore (FILE *f);
248*e4b17023SJohn Marino 
249*e4b17023SJohn Marino /* Statistics.  */
250*e4b17023SJohn Marino 
251*e4b17023SJohn Marino /* Print allocation statistics.  */
252*e4b17023SJohn Marino extern void ggc_print_statistics (void);
253*e4b17023SJohn Marino 
254*e4b17023SJohn Marino extern void stringpool_statistics (void);
255*e4b17023SJohn Marino 
256*e4b17023SJohn Marino /* Heuristics.  */
257*e4b17023SJohn Marino extern void init_ggc_heuristics (void);
258*e4b17023SJohn Marino 
259*e4b17023SJohn Marino /* Zone collection.  */
260*e4b17023SJohn Marino 
261*e4b17023SJohn Marino /* For regular rtl allocations.  */
262*e4b17023SJohn Marino extern struct alloc_zone rtl_zone;
263*e4b17023SJohn Marino 
264*e4b17023SJohn Marino /* For regular tree allocations.  */
265*e4b17023SJohn Marino extern struct alloc_zone tree_zone;
266*e4b17023SJohn Marino 
267*e4b17023SJohn Marino /* For IDENTIFIER_NODE allocations.  */
268*e4b17023SJohn Marino extern struct alloc_zone tree_id_zone;
269*e4b17023SJohn Marino 
270*e4b17023SJohn Marino #define ggc_alloc_rtvec_sized(NELT)                                     \
271*e4b17023SJohn Marino   ggc_alloc_zone_rtvec_def (sizeof (struct rtvec_def)			\
272*e4b17023SJohn Marino 			    + ((NELT) - 1) * sizeof (rtx),		\
273*e4b17023SJohn Marino 			    &rtl_zone)
274*e4b17023SJohn Marino 
275*e4b17023SJohn Marino #if defined (GGC_ZONE) && !defined (GENERATOR_FILE)
276*e4b17023SJohn Marino 
277*e4b17023SJohn Marino /* Allocate an object into the specified allocation zone.  */
278*e4b17023SJohn Marino extern void *ggc_internal_alloc_zone_stat (size_t,
279*e4b17023SJohn Marino 					  struct alloc_zone * MEM_STAT_DECL);
280*e4b17023SJohn Marino 
281*e4b17023SJohn Marino extern void *ggc_internal_cleared_alloc_zone_stat (size_t,
282*e4b17023SJohn Marino 					  struct alloc_zone * MEM_STAT_DECL);
283*e4b17023SJohn Marino 
284*e4b17023SJohn Marino static inline void *
ggc_internal_zone_alloc_stat(struct alloc_zone * z,size_t s MEM_STAT_DECL)285*e4b17023SJohn Marino ggc_internal_zone_alloc_stat (struct alloc_zone * z, size_t s MEM_STAT_DECL)
286*e4b17023SJohn Marino {
287*e4b17023SJohn Marino     return ggc_internal_alloc_zone_stat (s, z PASS_MEM_STAT);
288*e4b17023SJohn Marino }
289*e4b17023SJohn Marino 
290*e4b17023SJohn Marino static inline void *
ggc_internal_zone_cleared_alloc_stat(struct alloc_zone * z,size_t s MEM_STAT_DECL)291*e4b17023SJohn Marino ggc_internal_zone_cleared_alloc_stat (struct alloc_zone * z, size_t s
292*e4b17023SJohn Marino                                       MEM_STAT_DECL)
293*e4b17023SJohn Marino {
294*e4b17023SJohn Marino     return ggc_internal_cleared_alloc_zone_stat (s, z PASS_MEM_STAT);
295*e4b17023SJohn Marino }
296*e4b17023SJohn Marino 
297*e4b17023SJohn Marino static inline void *
ggc_internal_zone_vec_alloc_stat(struct alloc_zone * z,size_t s,size_t n MEM_STAT_DECL)298*e4b17023SJohn Marino ggc_internal_zone_vec_alloc_stat (struct alloc_zone * z, size_t s, size_t n
299*e4b17023SJohn Marino                                   MEM_STAT_DECL)
300*e4b17023SJohn Marino {
301*e4b17023SJohn Marino     return ggc_internal_alloc_zone_stat (s * n, z PASS_MEM_STAT);
302*e4b17023SJohn Marino }
303*e4b17023SJohn Marino 
304*e4b17023SJohn Marino 
305*e4b17023SJohn Marino #else
306*e4b17023SJohn Marino 
307*e4b17023SJohn Marino static inline void *
ggc_internal_zone_alloc_stat(struct alloc_zone * z ATTRIBUTE_UNUSED,size_t s MEM_STAT_DECL)308*e4b17023SJohn Marino ggc_internal_zone_alloc_stat (struct alloc_zone * z ATTRIBUTE_UNUSED,
309*e4b17023SJohn Marino                               size_t s MEM_STAT_DECL)
310*e4b17023SJohn Marino {
311*e4b17023SJohn Marino     return ggc_internal_alloc_stat (s PASS_MEM_STAT);
312*e4b17023SJohn Marino }
313*e4b17023SJohn Marino 
314*e4b17023SJohn Marino static inline void *
ggc_internal_zone_cleared_alloc_stat(struct alloc_zone * z ATTRIBUTE_UNUSED,size_t s MEM_STAT_DECL)315*e4b17023SJohn Marino ggc_internal_zone_cleared_alloc_stat (struct alloc_zone * z ATTRIBUTE_UNUSED,
316*e4b17023SJohn Marino                                       size_t s MEM_STAT_DECL)
317*e4b17023SJohn Marino {
318*e4b17023SJohn Marino     return ggc_internal_cleared_alloc_stat (s PASS_MEM_STAT);
319*e4b17023SJohn Marino }
320*e4b17023SJohn Marino 
321*e4b17023SJohn Marino static inline void *
ggc_internal_zone_vec_alloc_stat(struct alloc_zone * z ATTRIBUTE_UNUSED,size_t s,size_t n MEM_STAT_DECL)322*e4b17023SJohn Marino ggc_internal_zone_vec_alloc_stat (struct alloc_zone * z ATTRIBUTE_UNUSED,
323*e4b17023SJohn Marino                                   size_t s, size_t n MEM_STAT_DECL)
324*e4b17023SJohn Marino {
325*e4b17023SJohn Marino     return ggc_internal_vec_alloc_stat (s, n PASS_MEM_STAT);
326*e4b17023SJohn Marino }
327*e4b17023SJohn Marino 
328*e4b17023SJohn Marino #endif
329*e4b17023SJohn Marino 
330*e4b17023SJohn Marino /* Memory statistics passing versions of some allocators.  Too few of them to
331*e4b17023SJohn Marino    make gengtype produce them, so just define the needed ones here.  */
332*e4b17023SJohn Marino static inline struct rtx_def *
ggc_alloc_zone_rtx_def_stat(struct alloc_zone * z,size_t s MEM_STAT_DECL)333*e4b17023SJohn Marino ggc_alloc_zone_rtx_def_stat (struct alloc_zone * z, size_t s MEM_STAT_DECL)
334*e4b17023SJohn Marino {
335*e4b17023SJohn Marino   return (struct rtx_def *) ggc_internal_zone_alloc_stat (z, s PASS_MEM_STAT);
336*e4b17023SJohn Marino }
337*e4b17023SJohn Marino 
338*e4b17023SJohn Marino static inline union tree_node *
ggc_alloc_zone_tree_node_stat(struct alloc_zone * z,size_t s MEM_STAT_DECL)339*e4b17023SJohn Marino ggc_alloc_zone_tree_node_stat (struct alloc_zone * z, size_t s MEM_STAT_DECL)
340*e4b17023SJohn Marino {
341*e4b17023SJohn Marino   return (union tree_node *) ggc_internal_zone_alloc_stat (z, s PASS_MEM_STAT);
342*e4b17023SJohn Marino }
343*e4b17023SJohn Marino 
344*e4b17023SJohn Marino static inline union tree_node *
ggc_alloc_zone_cleared_tree_node_stat(struct alloc_zone * z,size_t s MEM_STAT_DECL)345*e4b17023SJohn Marino ggc_alloc_zone_cleared_tree_node_stat (struct alloc_zone * z, size_t s
346*e4b17023SJohn Marino                                        MEM_STAT_DECL)
347*e4b17023SJohn Marino {
348*e4b17023SJohn Marino   return (union tree_node *)
349*e4b17023SJohn Marino     ggc_internal_zone_cleared_alloc_stat (z, s PASS_MEM_STAT);
350*e4b17023SJohn Marino }
351*e4b17023SJohn Marino 
352*e4b17023SJohn Marino static inline union gimple_statement_d *
ggc_alloc_cleared_gimple_statement_d_stat(size_t s MEM_STAT_DECL)353*e4b17023SJohn Marino ggc_alloc_cleared_gimple_statement_d_stat (size_t s MEM_STAT_DECL)
354*e4b17023SJohn Marino {
355*e4b17023SJohn Marino   return (union gimple_statement_d *)
356*e4b17023SJohn Marino     ggc_internal_cleared_alloc_stat (s PASS_MEM_STAT);
357*e4b17023SJohn Marino }
358*e4b17023SJohn Marino 
359*e4b17023SJohn Marino #endif
360