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