]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/function.h
Change copyright header to refer to version 3 of the GNU General Public License and...
[thirdparty/gcc.git] / gcc / function.h
CommitLineData
bf6beae5 1/* Structure for saving state for a nested function.
af841dbd 2 Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
6fb5fa3c 3 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc.
bf6beae5 4
1322177d 5This file is part of GCC.
bf6beae5 6
1322177d
LB
7GCC is free software; you can redistribute it and/or modify it under
8the terms of the GNU General Public License as published by the Free
9dcd6f09 9Software Foundation; either version 3, or (at your option) any later
1322177d 10version.
bf6beae5 11
1322177d
LB
12GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13WARRANTY; without even the implied warranty of MERCHANTABILITY or
14FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15for more details.
bf6beae5
CH
16
17You should have received a copy of the GNU General Public License
9dcd6f09
NC
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
bf6beae5 20
264fa2db
ZL
21#ifndef GCC_FUNCTION_H
22#define GCC_FUNCTION_H
90f90283 23#include "tree.h"
33c9159e 24#include "hashtab.h"
90f90283 25
e2500fed 26struct var_refs_queue GTY(())
a00b8dfa
RK
27{
28 rtx modified;
29 enum machine_mode promoted_mode;
30 int unsignedp;
31 struct var_refs_queue *next;
32};
bf6beae5
CH
33
34/* Stack of pending (incomplete) sequences saved by `start_sequence'.
35 Each element describes one pending sequence.
36 The main insn-chain is saved in the last element of the chain,
37 unless the chain is empty. */
38
e2500fed 39struct sequence_stack GTY(())
bf6beae5
CH
40{
41 /* First and last insns in the chain of the saved sequence. */
e2500fed
GK
42 rtx first;
43 rtx last;
bf6beae5
CH
44 struct sequence_stack *next;
45};
46
a0dabda5
JM
47/* Stack of single obstacks. */
48
49struct simple_obstack_stack
50{
51 struct obstack *obstack;
52 struct simple_obstack_stack *next;
53};
bf6beae5 54\f
e2500fed 55struct emit_status GTY(())
49ad7cfa
BS
56{
57 /* This is reset to LAST_VIRTUAL_REGISTER + 1 at the start of each function.
58 After rtl generation, it is 1 plus the largest register number used. */
59 int x_reg_rtx_no;
60
61 /* Lowest label number in current function. */
62 int x_first_label_num;
63
64 /* The ends of the doubly-linked chain of rtl for the current function.
65 Both are reset to null at the start of rtl generation for the function.
fa8db1f7 66
4dfa0342
RH
67 start_sequence saves both of these on `sequence_stack' and then starts
68 a new, nested sequence of insns. */
49ad7cfa
BS
69 rtx x_first_insn;
70 rtx x_last_insn;
71
49ad7cfa
BS
72 /* Stack of pending (incomplete) sequences saved by `start_sequence'.
73 Each element describes one pending sequence.
74 The main insn-chain is saved in the last element of the chain,
75 unless the chain is empty. */
76 struct sequence_stack *sequence_stack;
77
78 /* INSN_UID for next insn emitted.
79 Reset to 1 for each function compiled. */
80 int x_cur_insn_uid;
81
fd3acbb3 82 /* Location the last line-number NOTE emitted.
49ad7cfa 83 This is used to avoid generating duplicates. */
fd3acbb3 84 location_t x_last_location;
49ad7cfa 85
0d4903b8
RK
86 /* The length of the regno_pointer_align, regno_decl, and x_regno_reg_rtx
87 vectors. Since these vectors are needed during the expansion phase when
88 the total number of registers in the function is not yet known, the
89 vectors are copied and made bigger when necessary. */
3502dc9c 90 int regno_pointer_align_length;
49ad7cfa
BS
91
92 /* Indexed by pseudo register number, if nonzero gives the known alignment
3502dc9c
JDA
93 for that pseudo (if REG_POINTER is set in x_regno_reg_rtx).
94 Allocated in parallel with x_regno_reg_rtx. */
ddb0ae00 95 unsigned char * GTY ((length ("%h.x_reg_rtx_no")))
e2500fed 96 regno_pointer_align;
49ad7cfa
BS
97
98 /* Indexed by pseudo register number, gives the rtx for that pseudo.
8fff4fc1 99 Allocated in parallel with regno_pointer_align. */
ddb0ae00 100 rtx * GTY ((length ("%h.x_reg_rtx_no"))) x_regno_reg_rtx;
49ad7cfa
BS
101};
102
103/* For backward compatibility... eventually these should all go away. */
01d939e8 104#define reg_rtx_no (cfun->emit->x_reg_rtx_no)
01d939e8
BS
105#define regno_reg_rtx (cfun->emit->x_regno_reg_rtx)
106#define seq_stack (cfun->emit->sequence_stack)
49ad7cfa 107
01d939e8 108#define REGNO_POINTER_ALIGN(REGNO) (cfun->emit->regno_pointer_align[REGNO])
49ad7cfa 109
e2500fed 110struct expr_status GTY(())
49ad7cfa
BS
111{
112 /* Number of units that we should eventually pop off the stack.
113 These are the arguments to function calls that have already returned. */
114 int x_pending_stack_adjust;
115
116 /* Under some ABIs, it is the caller's responsibility to pop arguments
117 pushed for function calls. A naive implementation would simply pop
118 the arguments immediately after each call. However, if several
119 function calls are made in a row, it is typically cheaper to pop
120 all the arguments after all of the calls are complete since a
121 single pop instruction can be used. Therefore, GCC attempts to
122 defer popping the arguments until absolutely necessary. (For
123 example, at the end of a conditional, the arguments must be popped,
124 since code outside the conditional won't know whether or not the
125 arguments need to be popped.)
126
cc2902df 127 When INHIBIT_DEFER_POP is nonzero, however, the compiler does not
49ad7cfa
BS
128 attempt to defer pops. Instead, the stack is popped immediately
129 after each call. Rather then setting this variable directly, use
130 NO_DEFER_POP and OK_DEFER_POP. */
131 int x_inhibit_defer_pop;
132
1503a7ec 133 /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
98ef4163 134 boundary can be momentarily unaligned while pushing the arguments.
1503a7ec
JH
135 Record the delta since last aligned boundary here in order to get
136 stack alignment in the nested function calls working right. */
137 int x_stack_pointer_delta;
138
49ad7cfa
BS
139 /* Nonzero means __builtin_saveregs has already been done in this function.
140 The value is the pseudoreg containing the value __builtin_saveregs
141 returned. */
142 rtx x_saveregs_value;
143
144 /* Similarly for __builtin_apply_args. */
145 rtx x_apply_args_value;
146
147 /* List of labels that must never be deleted. */
148 rtx x_forced_labels;
49ad7cfa
BS
149};
150
01d939e8
BS
151#define pending_stack_adjust (cfun->expr->x_pending_stack_adjust)
152#define inhibit_defer_pop (cfun->expr->x_inhibit_defer_pop)
153#define saveregs_value (cfun->expr->x_saveregs_value)
154#define apply_args_value (cfun->expr->x_apply_args_value)
155#define forced_labels (cfun->expr->x_forced_labels)
1503a7ec 156#define stack_pointer_delta (cfun->expr->x_stack_pointer_delta)
49ad7cfa 157
5cd4ec7f 158struct gimple_df;
6370682a
KH
159struct temp_slot;
160typedef struct temp_slot *temp_slot_p;
161
162DEF_VEC_P(temp_slot_p);
163DEF_VEC_ALLOC_P(temp_slot_p,gc);
164
55dea919
RG
165enum function_frequency {
166 /* This function most likely won't be executed at all.
52bf96d2 167 (set only when profile feedback is available or via function attribute). */
55dea919
RG
168 FUNCTION_FREQUENCY_UNLIKELY_EXECUTED,
169 /* The default value. */
170 FUNCTION_FREQUENCY_NORMAL,
171 /* Optimize this function hard
52bf96d2 172 (set only when profile feedback is available or via function attribute). */
55dea919
RG
173 FUNCTION_FREQUENCY_HOT
174};
175
bf6beae5
CH
176/* This structure can save all the important global and static variables
177 describing the status of the current function. */
178
e2500fed 179struct function GTY(())
bf6beae5 180{
b384405b 181 struct eh_status *eh;
49ad7cfa
BS
182 struct expr_status *expr;
183 struct emit_status *emit;
36edd3cc 184 struct varasm_status *varasm;
b384405b 185
997de8ed
SB
186 /* The control flow graph for this function. */
187 struct control_flow_graph *cfg;
5cd4ec7f
JH
188 /* SSA and dataflow information. */
189 struct gimple_df *gimple_df;
997de8ed 190
598ec7bd 191 /* The loops in this function. */
9e2f83a5 192 struct loops *x_current_loops;
598ec7bd 193
6946b3f7
JH
194 /* Value histograms attached to particular statements. */
195 htab_t GTY((skip)) value_histograms;
196
bf6beae5 197 /* For function.c. */
49ad7cfa 198
19eb1ad7 199 /* Points to the FUNCTION_DECL of this function. */
bf6beae5 200 tree decl;
49ad7cfa 201
eb3ae3e1
ZW
202 /* Function containing this function, if any. */
203 struct function *outer;
204
49ad7cfa
BS
205 /* Number of bytes of args popped by function being compiled on its return.
206 Zero if no bytes are to be popped.
207 May affect compilation of return insn or of function epilogue. */
bf6beae5 208 int pops_args;
49ad7cfa 209
49ad7cfa
BS
210 /* If function's args have a fixed size, this is that size, in bytes.
211 Otherwise, it is -1.
212 May affect compilation of return insn or of function epilogue. */
bf6beae5 213 int args_size;
49ad7cfa
BS
214
215 /* # bytes the prologue should push and pretend that the caller pushed them.
216 The prologue must do this, but only if parms can be passed in
217 registers. */
bf6beae5 218 int pretend_args_size;
49ad7cfa
BS
219
220 /* # of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is
221 defined, the needed space is pushed by the prologue. */
222 int outgoing_args_size;
223
224 /* This is the offset from the arg pointer to the place where the first
225 anonymous arg can be found, if there is one. */
bf6beae5 226 rtx arg_offset_rtx;
49ad7cfa 227
49ad7cfa
BS
228 /* Quantities of various kinds of registers
229 used for the current function's args. */
230 CUMULATIVE_ARGS args_info;
231
cc2902df 232 /* If nonzero, an RTL expression for the location at which the current
49ad7cfa
BS
233 function returns its result. If the current function returns its
234 result in a register, current_function_return_rtx will always be
235 the hard register containing the result. */
bf6beae5 236 rtx return_rtx;
49ad7cfa
BS
237
238 /* The arg pointer hard register, or the pseudo into which it was copied. */
bf6beae5 239 rtx internal_arg_pointer;
49ad7cfa 240
c0e7830f 241 /* Opaque pointer used by get_hard_reg_initial_val and
19eb1ad7 242 has_hard_reg_initial_val (see integrate.[hc]). */
c0e7830f
DD
243 struct initial_value_struct *hard_reg_initial_vals;
244
49ad7cfa
BS
245 /* List (chain of EXPR_LIST) of labels heading the current handlers for
246 nonlocal gotos. */
247 rtx x_nonlocal_goto_handler_labels;
248
49ad7cfa
BS
249 /* Label that will go on function epilogue.
250 Jumping to this label serves as a "return" instruction
251 on machines which require execution of the epilogue on all returns. */
252 rtx x_return_label;
253
6e3077c6
EB
254 /* Label that will go on the end of function epilogue.
255 Jumping to this label serves as a "naked return" instruction
256 on machines which require execution of the epilogue on all returns. */
257 rtx x_naked_return_label;
258
49ad7cfa
BS
259 /* List (chain of EXPR_LISTs) of all stack slots in this function.
260 Made for the sake of unshare_all_rtl. */
261 rtx x_stack_slot_list;
262
49ad7cfa 263 /* Place after which to insert the tail_recursion_label if we need one. */
ede497cf 264 rtx x_stack_check_probe_note;
49ad7cfa
BS
265
266 /* Location at which to save the argument pointer if it will need to be
267 referenced. There are two cases where this is done: if nonlocal gotos
268 exist, or if vars stored at an offset from the argument pointer will be
269 needed by inner routines. */
270 rtx x_arg_pointer_save_area;
271
272 /* Offset to end of allocated area of stack frame.
273 If stack grows down, this is the address of the last stack slot allocated.
274 If stack grows up, this is the address for the next slot. */
275 HOST_WIDE_INT x_frame_offset;
276
1a837f77 277 /* A PARM_DECL that should contain the static chain for this function.
6de9cd9a
DN
278 It will be initialized at the beginning of the function. */
279 tree static_chain_decl;
49ad7cfa 280
6de9cd9a
DN
281 /* An expression that contains the non-local goto save area. The first
282 word is the saved frame pointer and the second is the saved stack
283 pointer. */
284 tree nonlocal_goto_save_area;
49ad7cfa
BS
285
286 /* Insn after which register parms and SAVE_EXPRs are born, if nonopt. */
287 rtx x_parm_birth_insn;
288
0aea6467 289 /* List of all used temporaries allocated, by level. */
6370682a 290 VEC(temp_slot_p,gc) *x_used_temp_slots;
0aea6467
ZD
291
292 /* List of available temp slots. */
293 struct temp_slot *x_avail_temp_slots;
49ad7cfa 294
49ad7cfa
BS
295 /* This slot is initialized as 0 and is added to
296 during the nested function. */
297 struct var_refs_queue *fixup_var_refs_queue;
bf6beae5 298
55dea919
RG
299 /* Current nesting level for temporaries. */
300 int x_temp_slot_level;
a310245f 301
49ad7cfa
BS
302 /* Highest label number in current function. */
303 int inl_max_label_num;
304
df696a75
RH
305 /* Function sequence number for profiling, debugging, etc. */
306 int funcdef_no;
f6f315fe 307
bf6beae5 308 /* For md files. */
49ad7cfa 309
d6e1b011 310 /* tm.h can use this to store whatever it likes. */
1431042e 311 struct machine_function * GTY ((maybe_undef)) machine;
55dea919 312
a0871656 313 /* The largest alignment of slot allocated on the stack. */
95899b34 314 unsigned int stack_alignment_needed;
55dea919 315
c2f8b491 316 /* Preferred alignment of the end of stack frame. */
95899b34 317 unsigned int preferred_stack_boundary;
bd231550 318
8c5666b4 319 /* Language-specific code can use this to store whatever it likes. */
e2500fed 320 struct language_function * language;
8c5666b4 321
33c9159e
AH
322 /* Used types hash table. */
323 htab_t GTY ((param_is (union tree_node))) used_types_hash;
324
bd231550 325 /* For reorg. */
49ad7cfa
BS
326
327 /* If some insns can be deferred to the delay slots of the epilogue, the
328 delay list for them is recorded here. */
bd231550 329 rtx epilogue_delay_list;
89996b6e 330
23b6da10
RH
331 /* Maximal number of entities in the single jumptable. Used to estimate
332 final flowgraph size. */
333 int max_jumptable_ents;
334
6de9cd9a
DN
335 /* UIDs for LABEL_DECLs. */
336 int last_label_uid;
337
338 /* Line number of the end of the function. */
339 location_t function_end_locus;
340
6de9cd9a
DN
341 /* The variables unexpanded so far. */
342 tree unexpanded_var_list;
343
c7466dee
CT
344 /* Assembly labels for the hot and cold text sections, to
345 be used by debugger functions for determining the size of text
346 sections. */
347
1ad435a5
CT
348 const char *hot_section_label;
349 const char *cold_section_label;
350 const char *hot_section_end_label;
351 const char *cold_section_end_label;
c7466dee
CT
352
353 /* String to be used for name of cold text sections, via
354 targetm.asm_out.named_section. */
355
356 const char *unlikely_text_section_name;
357
7d69de61
RH
358 /* A variable living at the top of the frame that holds a known value.
359 Used for detecting stack clobbers. */
360 tree stack_protect_guard;
361
a5093353
JH
362 /* Properties used by the pass manager. */
363 unsigned int curr_properties;
364 unsigned int last_verified;
365
89996b6e
RH
366 /* Collected bit flags. */
367
ecaebb9e
NS
368 /* Number of units of general registers that need saving in stdarg
369 function. What unit is depends on the backend, either it is number
370 of bytes, or it can be number of registers. */
371 unsigned int va_list_gpr_size : 8;
372
373 /* Number of units of floating point registers that need saving in stdarg
374 function. */
375 unsigned int va_list_fpr_size : 8;
376
377 /* How commonly executed the function is. Initialized during branch
378 probabilities pass. */
379 ENUM_BITFIELD (function_frequency) function_frequency : 2;
380
89996b6e
RH
381 /* Nonzero if function being compiled needs to be given an address
382 where the value should be stored. */
383 unsigned int returns_struct : 1;
384
385 /* Nonzero if function being compiled needs to
386 return the address of where it has put a structure value. */
387 unsigned int returns_pcc_struct : 1;
fa8db1f7 388
89996b6e
RH
389 /* Nonzero if the current function returns a pointer type. */
390 unsigned int returns_pointer : 1;
391
89996b6e
RH
392 /* Nonzero if function being compiled can call setjmp. */
393 unsigned int calls_setjmp : 1;
394
89996b6e
RH
395 /* Nonzero if function being compiled can call alloca,
396 either as a subroutine or builtin. */
397 unsigned int calls_alloca : 1;
398
c8f27794 399 /* Nonzero if function being compiled called builtin_return_addr or
c0220ea4 400 builtin_frame_address with nonzero count. */
c8f27794
JW
401 unsigned int accesses_prior_frames : 1;
402
52a11cbf
RH
403 /* Nonzero if the function calls __builtin_eh_return. */
404 unsigned int calls_eh_return : 1;
405
89996b6e
RH
406 /* Nonzero if function being compiled receives nonlocal gotos
407 from nested functions. */
408 unsigned int has_nonlocal_label : 1;
409
ecaebb9e
NS
410 /* Nonzero if function calls builtin_unwind_init. */
411 unsigned int calls_unwind_init : 1;
412
89996b6e
RH
413 /* Nonzero if function being compiled has nonlocal gotos to parent
414 function. */
415 unsigned int has_nonlocal_goto : 1;
d8d72314
PB
416
417 /* Nonzero if function being compiled has an asm statement. */
418 unsigned int has_asm_statement : 1;
89996b6e 419
dd292d0a
MM
420 /* Nonzero if the current function is a thunk, i.e., a lightweight
421 function implemented by the output_mi_thunk hook) that just
422 adjusts one of its arguments and forwards to another
423 function. */
89996b6e
RH
424 unsigned int is_thunk : 1;
425
b6128b8c
SH
426 /* This bit is used by the exception handling logic. It is set if all
427 calls (if any) are sibling calls. Such functions do not have to
428 have EH tables generated, as they cannot throw. A call to such a
429 function, however, should be treated as throwing if any of its callees
4b7e68e7 430 can throw. */
b6128b8c 431 unsigned int all_throwers_are_sibcalls : 1;
fa8db1f7 432
70f4f91c
WC
433 /* Nonzero if profiling code should be generated. */
434 unsigned int profile : 1;
435
89996b6e
RH
436 /* Nonzero if stack limit checking should be enabled in the current
437 function. */
438 unsigned int limit_stack : 1;
439
6c535c69 440 /* Nonzero if current function uses stdarg.h or equivalent. */
89996b6e
RH
441 unsigned int stdarg : 1;
442
89996b6e
RH
443 /* Nonzero if the back-end should not keep track of expressions that
444 determine the size of variable-sized objects. Normally, such
445 expressions are saved away, and then expanded when the next
446 function is started. For example, if a parameter has a
447 variable-sized type, then the size of the parameter is computed
448 when the function body is entered. However, some front-ends do
449 not desire this behavior. */
450 unsigned int x_dont_save_pending_sizes_p : 1;
451
452 /* Nonzero if the current function uses the constant pool. */
453 unsigned int uses_const_pool : 1;
454
455 /* Nonzero if the current function uses pic_offset_table_rtx. */
456 unsigned int uses_pic_offset_table : 1;
457
458 /* Nonzero if the current function needs an lsda for exception handling. */
459 unsigned int uses_eh_lsda : 1;
964be02f 460
e0bb17a8 461 /* Nonzero if code to initialize arg_pointer_save_area has been emitted. */
964be02f 462 unsigned int arg_pointer_save_area_init : 1;
9d30f3c1 463
55dea919
RG
464 unsigned int after_inlining : 1;
465
466 /* Set when the call to function itself has been emit. */
467 unsigned int recursive_call_emit : 1;
468
469 /* Set when the tail call has been produced. */
470 unsigned int tail_call_emit : 1;
471
07beea0d
AH
472 /* FIXME tuples: This bit is temporarily here to mark when a
473 function has been gimplified, so we can make sure we're not
474 creating non GIMPLE tuples after gimplification. */
475 unsigned gimplified : 1;
bf6beae5
CH
476};
477
9d30f3c1
JJ
478/* If va_list_[gf]pr_size is set to this, it means we don't know how
479 many units need to be saved. */
480#define VA_LIST_MAX_GPR_SIZE 255
481#define VA_LIST_MAX_FPR_SIZE 255
482
01d939e8 483/* The function currently being compiled. */
e2500fed 484extern GTY(()) struct function *cfun;
01d939e8 485
1be4cd1f
WH
486/* Pointer to chain of `struct function' for containing functions. */
487extern GTY(()) struct function *outer_function_chain;
488
c39ada04
DD
489/* Nonzero if we've already converted virtual regs to hard regs. */
490extern int virtuals_instantiated;
491
3edc56a9
JJ
492/* Nonzero if at least one trampoline has been created. */
493extern int trampolines_created;
494
49ad7cfa 495/* For backward compatibility... eventually these should all go away. */
01d939e8
BS
496#define current_function_pops_args (cfun->pops_args)
497#define current_function_returns_struct (cfun->returns_struct)
498#define current_function_returns_pcc_struct (cfun->returns_pcc_struct)
499#define current_function_returns_pointer (cfun->returns_pointer)
01d939e8
BS
500#define current_function_calls_setjmp (cfun->calls_setjmp)
501#define current_function_calls_alloca (cfun->calls_alloca)
c8f27794 502#define current_function_accesses_prior_frames (cfun->accesses_prior_frames)
52a11cbf 503#define current_function_calls_eh_return (cfun->calls_eh_return)
01d939e8
BS
504#define current_function_is_thunk (cfun->is_thunk)
505#define current_function_args_info (cfun->args_info)
506#define current_function_args_size (cfun->args_size)
507#define current_function_pretend_args_size (cfun->pretend_args_size)
508#define current_function_outgoing_args_size (cfun->outgoing_args_size)
509#define current_function_arg_offset_rtx (cfun->arg_offset_rtx)
01d939e8
BS
510#define current_function_stdarg (cfun->stdarg)
511#define current_function_internal_arg_pointer (cfun->internal_arg_pointer)
512#define current_function_return_rtx (cfun->return_rtx)
70f4f91c 513#define current_function_profile (cfun->profile)
df696a75 514#define current_function_funcdef_no (cfun->funcdef_no)
01d939e8
BS
515#define current_function_limit_stack (cfun->limit_stack)
516#define current_function_uses_pic_offset_table (cfun->uses_pic_offset_table)
517#define current_function_uses_const_pool (cfun->uses_const_pool)
01d939e8
BS
518#define current_function_epilogue_delay_list (cfun->epilogue_delay_list)
519#define current_function_has_nonlocal_label (cfun->has_nonlocal_label)
ecaebb9e 520#define current_function_calls_unwind_init (cfun->calls_unwind_init)
01d939e8 521#define current_function_has_nonlocal_goto (cfun->has_nonlocal_goto)
d8d72314 522#define current_function_has_asm_statement (cfun->has_asm_statement)
01d939e8 523
01d939e8 524#define return_label (cfun->x_return_label)
6e3077c6 525#define naked_return_label (cfun->x_naked_return_label)
01d939e8
BS
526#define stack_slot_list (cfun->x_stack_slot_list)
527#define parm_birth_insn (cfun->x_parm_birth_insn)
528#define frame_offset (cfun->x_frame_offset)
ede497cf 529#define stack_check_probe_note (cfun->x_stack_check_probe_note)
01d939e8 530#define arg_pointer_save_area (cfun->x_arg_pointer_save_area)
0aea6467
ZD
531#define used_temp_slots (cfun->x_used_temp_slots)
532#define avail_temp_slots (cfun->x_avail_temp_slots)
01d939e8 533#define temp_slot_level (cfun->x_temp_slot_level)
01d939e8 534#define nonlocal_goto_handler_labels (cfun->x_nonlocal_goto_handler_labels)
6fb5fa3c 535#define rtl_df (cfun->df)
598ec7bd 536#define current_loops (cfun->x_current_loops)
6946b3f7 537#define VALUE_HISTOGRAMS(fun) (fun)->value_histograms
bf6beae5 538
ba534a45
JW
539/* Given a function decl for a containing function,
540 return the `struct function' for it. */
fa8db1f7 541struct function *find_function_data (tree);
ba534a45 542
116eebd6
MM
543/* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
544 and create duplicate blocks. */
fa8db1f7 545extern void reorder_blocks (void);
d6e1b011 546
18c038b9 547/* Set BLOCK_NUMBER for all the blocks in FN. */
fa8db1f7 548extern void number_blocks (tree);
18c038b9 549
6de9cd9a
DN
550extern void clear_block_marks (tree);
551extern tree blocks_nreverse (tree);
6de9cd9a 552
9a807d3a
RK
553/* Return size needed for stack frame based on slots so far allocated.
554 This size counts from zero. It is not rounded to STACK_BOUNDARY;
555 the caller may have to do that. */
fa8db1f7 556extern HOST_WIDE_INT get_frame_size (void);
9a807d3a 557
9fb798d7
EB
558/* Issue an error message and return TRUE if frame OFFSET overflows in
559 the signed target pointer arithmetics for function FUNC. Otherwise
560 return FALSE. */
561extern bool frame_offset_overflow (HOST_WIDE_INT, tree);
562
e2500fed
GK
563/* A pointer to a function to create target specific, per-function
564 data structures. */
fa8db1f7 565extern struct machine_function * (*init_machine_status) (void);
ba534a45 566
154bba13 567/* Save and restore status information for a nested function. */
fa8db1f7
AJ
568extern void free_after_parsing (struct function *);
569extern void free_after_compilation (struct function *);
a00b8dfa 570
fa8db1f7 571extern void init_varasm_status (struct function *);
fa51b01b 572
bd695e1e 573#ifdef RTX_CODE
fa8db1f7
AJ
574extern void diddle_return_value (void (*)(rtx, void*), void*);
575extern void clobber_return_register (void);
bd695e1e
RH
576#endif
577
fa8db1f7 578extern rtx get_arg_pointer_save_area (struct function *);
278ed218 579
faed5cc3
SB
580/* Returns the name of the current function. */
581extern const char *current_function_name (void);
6fb5fa3c
DB
582/* Returns the assembler name (raw, mangled) of the current function. */
583extern const char *current_function_assembler_name (void);
faed5cc3 584
902edd36
JH
585extern void do_warn_unused_parameter (tree);
586
0976078c
RH
587extern bool pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
588 tree, bool);
6cdd5672
RH
589extern bool reference_callee_copied (CUMULATIVE_ARGS *, enum machine_mode,
590 tree, bool);
0976078c 591
8d8d1a28 592extern void used_types_insert (tree);
33c9159e 593
3e87758a 594extern int get_next_funcdef_no (void);
264fa2db 595#endif /* GCC_FUNCTION_H */