OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [function.h] - Blame information for rev 826

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 280 jeremybenn
/* Structure for saving state for a nested function.
2
   Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3
   1999, 2000, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4
   Free Software Foundation, Inc.
5
 
6
This file is part of GCC.
7
 
8
GCC is free software; you can redistribute it and/or modify it under
9
the terms of the GNU General Public License as published by the Free
10
Software Foundation; either version 3, or (at your option) any later
11
version.
12
 
13
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14
WARRANTY; without even the implied warranty of MERCHANTABILITY or
15
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
16
for more details.
17
 
18
You should have received a copy of the GNU General Public License
19
along with GCC; see the file COPYING3.  If not see
20
<http://www.gnu.org/licenses/>.  */
21
 
22
#ifndef GCC_FUNCTION_H
23
#define GCC_FUNCTION_H
24
 
25
#include "tree.h"
26
#include "hashtab.h"
27
#include "vecprim.h"
28
 
29
/* Stack of pending (incomplete) sequences saved by `start_sequence'.
30
   Each element describes one pending sequence.
31
   The main insn-chain is saved in the last element of the chain,
32
   unless the chain is empty.  */
33
 
34
struct GTY(()) sequence_stack {
35
  /* First and last insns in the chain of the saved sequence.  */
36
  rtx first;
37
  rtx last;
38
  struct sequence_stack *next;
39
};
40
 
41
struct GTY(()) emit_status {
42
  /* This is reset to LAST_VIRTUAL_REGISTER + 1 at the start of each function.
43
     After rtl generation, it is 1 plus the largest register number used.  */
44
  int x_reg_rtx_no;
45
 
46
  /* Lowest label number in current function.  */
47
  int x_first_label_num;
48
 
49
  /* The ends of the doubly-linked chain of rtl for the current function.
50
     Both are reset to null at the start of rtl generation for the function.
51
 
52
     start_sequence saves both of these on `sequence_stack' and then starts
53
     a new, nested sequence of insns.  */
54
  rtx x_first_insn;
55
  rtx x_last_insn;
56
 
57
  /* Stack of pending (incomplete) sequences saved by `start_sequence'.
58
     Each element describes one pending sequence.
59
     The main insn-chain is saved in the last element of the chain,
60
     unless the chain is empty.  */
61
  struct sequence_stack *sequence_stack;
62
 
63
  /* INSN_UID for next insn emitted.
64
     Reset to 1 for each function compiled.  */
65
  int x_cur_insn_uid;
66
 
67
  /* INSN_UID for next debug insn emitted.  Only used if
68
     --param min-nondebug-insn-uid=<value> is given with nonzero value.  */
69
  int x_cur_debug_insn_uid;
70
 
71
  /* Location the last line-number NOTE emitted.
72
     This is used to avoid generating duplicates.  */
73
  location_t x_last_location;
74
 
75
  /* The length of the regno_pointer_align, regno_decl, and x_regno_reg_rtx
76
     vectors.  Since these vectors are needed during the expansion phase when
77
     the total number of registers in the function is not yet known, the
78
     vectors are copied and made bigger when necessary.  */
79
  int regno_pointer_align_length;
80
 
81
  /* Indexed by pseudo register number, if nonzero gives the known alignment
82
     for that pseudo (if REG_POINTER is set in x_regno_reg_rtx).
83
     Allocated in parallel with x_regno_reg_rtx.  */
84
  unsigned char * GTY((skip)) regno_pointer_align;
85
};
86
 
87
 
88
/* Indexed by pseudo register number, gives the rtx for that pseudo.
89
   Allocated in parallel with regno_pointer_align.
90
   FIXME: We could put it into emit_status struct, but gengtype is not able to deal
91
   with length attribute nested in top level structures.  */
92
 
93
extern GTY ((length ("crtl->emit.x_reg_rtx_no"))) rtx * regno_reg_rtx;
94
 
95
/* For backward compatibility... eventually these should all go away.  */
96
#define reg_rtx_no (crtl->emit.x_reg_rtx_no)
97
#define seq_stack (crtl->emit.sequence_stack)
98
 
99
#define REGNO_POINTER_ALIGN(REGNO) (crtl->emit.regno_pointer_align[REGNO])
100
 
101
struct GTY(()) expr_status {
102
  /* Number of units that we should eventually pop off the stack.
103
     These are the arguments to function calls that have already returned.  */
104
  int x_pending_stack_adjust;
105
 
106
  /* Under some ABIs, it is the caller's responsibility to pop arguments
107
     pushed for function calls.  A naive implementation would simply pop
108
     the arguments immediately after each call.  However, if several
109
     function calls are made in a row, it is typically cheaper to pop
110
     all the arguments after all of the calls are complete since a
111
     single pop instruction can be used.  Therefore, GCC attempts to
112
     defer popping the arguments until absolutely necessary.  (For
113
     example, at the end of a conditional, the arguments must be popped,
114
     since code outside the conditional won't know whether or not the
115
     arguments need to be popped.)
116
 
117
     When INHIBIT_DEFER_POP is nonzero, however, the compiler does not
118
     attempt to defer pops.  Instead, the stack is popped immediately
119
     after each call.  Rather then setting this variable directly, use
120
     NO_DEFER_POP and OK_DEFER_POP.  */
121
  int x_inhibit_defer_pop;
122
 
123
  /* If PREFERRED_STACK_BOUNDARY and PUSH_ROUNDING are defined, the stack
124
     boundary can be momentarily unaligned while pushing the arguments.
125
     Record the delta since last aligned boundary here in order to get
126
     stack alignment in the nested function calls working right.  */
127
  int x_stack_pointer_delta;
128
 
129
  /* Nonzero means __builtin_saveregs has already been done in this function.
130
     The value is the pseudoreg containing the value __builtin_saveregs
131
     returned.  */
132
  rtx x_saveregs_value;
133
 
134
  /* Similarly for __builtin_apply_args.  */
135
  rtx x_apply_args_value;
136
 
137
  /* List of labels that must never be deleted.  */
138
  rtx x_forced_labels;
139
};
140
 
141
typedef struct call_site_record_d *call_site_record;
142
DEF_VEC_P(call_site_record);
143
DEF_VEC_ALLOC_P(call_site_record, gc);
144
 
145
/* RTL representation of exception handling.  */
146
struct GTY(()) rtl_eh {
147
  rtx ehr_stackadj;
148
  rtx ehr_handler;
149
  rtx ehr_label;
150
 
151
  rtx sjlj_fc;
152
  rtx sjlj_exit_after;
153
 
154
  VEC(uchar,gc) *action_record_data;
155
 
156
  VEC(call_site_record,gc) *call_site_record[2];
157
};
158
 
159
#define pending_stack_adjust (crtl->expr.x_pending_stack_adjust)
160
#define inhibit_defer_pop (crtl->expr.x_inhibit_defer_pop)
161
#define saveregs_value (crtl->expr.x_saveregs_value)
162
#define apply_args_value (crtl->expr.x_apply_args_value)
163
#define forced_labels (crtl->expr.x_forced_labels)
164
#define stack_pointer_delta (crtl->expr.x_stack_pointer_delta)
165
 
166
struct gimple_df;
167
struct temp_slot;
168
typedef struct temp_slot *temp_slot_p;
169
struct call_site_record_d;
170
 
171
DEF_VEC_P(temp_slot_p);
172
DEF_VEC_ALLOC_P(temp_slot_p,gc);
173
struct ipa_opt_pass_d;
174
typedef struct ipa_opt_pass_d *ipa_opt_pass;
175
 
176
DEF_VEC_P(ipa_opt_pass);
177
DEF_VEC_ALLOC_P(ipa_opt_pass,heap);
178
 
179
enum function_frequency {
180
  /* This function most likely won't be executed at all.
181
     (set only when profile feedback is available or via function attribute). */
182
  FUNCTION_FREQUENCY_UNLIKELY_EXECUTED,
183
  /* The default value.  */
184
  FUNCTION_FREQUENCY_NORMAL,
185
  /* Optimize this function hard
186
     (set only when profile feedback is available or via function attribute). */
187
  FUNCTION_FREQUENCY_HOT
188
};
189
 
190
struct GTY(()) varasm_status {
191
  /* If we're using a per-function constant pool, this is it.  */
192
  struct rtx_constant_pool *pool;
193
 
194
  /* Number of tree-constants deferred during the expansion of this
195
     function.  */
196
  unsigned int deferred_constants;
197
};
198
 
199
/* Information mainlined about RTL representation of incoming arguments.  */
200
struct GTY(()) incoming_args {
201
  /* Number of bytes of args popped by function being compiled on its return.
202
     Zero if no bytes are to be popped.
203
     May affect compilation of return insn or of function epilogue.  */
204
  int pops_args;
205
 
206
  /* If function's args have a fixed size, this is that size, in bytes.
207
     Otherwise, it is -1.
208
     May affect compilation of return insn or of function epilogue.  */
209
  int size;
210
 
211
  /* # bytes the prologue should push and pretend that the caller pushed them.
212
     The prologue must do this, but only if parms can be passed in
213
     registers.  */
214
  int pretend_args_size;
215
 
216
  /* This is the offset from the arg pointer to the place where the first
217
     anonymous arg can be found, if there is one.  */
218
  rtx arg_offset_rtx;
219
 
220
  /* Quantities of various kinds of registers
221
     used for the current function's args.  */
222
  CUMULATIVE_ARGS info;
223
 
224
  /* The arg pointer hard register, or the pseudo into which it was copied.  */
225
  rtx internal_arg_pointer;
226
};
227
 
228
/* Data for function partitioning.  */
229
struct GTY(()) function_subsections {
230
  /* Assembly labels for the hot and cold text sections, to
231
     be used by debugger functions for determining the size of text
232
     sections.  */
233
 
234
  const char *hot_section_label;
235
  const char *cold_section_label;
236
  const char *hot_section_end_label;
237
  const char *cold_section_end_label;
238
 
239
  /* String to be used for name of cold text sections, via
240
     targetm.asm_out.named_section.  */
241
 
242
  const char *unlikely_text_section_name;
243
};
244
 
245
/* Datastructures maintained for currently processed function in RTL form.  */
246
struct GTY(()) rtl_data {
247
  struct expr_status expr;
248
  struct emit_status emit;
249
  struct varasm_status varasm;
250
  struct incoming_args args;
251
  struct function_subsections subsections;
252
  struct rtl_eh eh;
253
 
254
  /* For function.c  */
255
 
256
  /* # of bytes of outgoing arguments.  If ACCUMULATE_OUTGOING_ARGS is
257
     defined, the needed space is pushed by the prologue.  */
258
  int outgoing_args_size;
259
 
260
  /* If nonzero, an RTL expression for the location at which the current
261
     function returns its result.  If the current function returns its
262
     result in a register, current_function_return_rtx will always be
263
     the hard register containing the result.  */
264
  rtx return_rtx;
265
 
266
  /* Opaque pointer used by get_hard_reg_initial_val and
267
     has_hard_reg_initial_val (see integrate.[hc]).  */
268
  struct initial_value_struct *hard_reg_initial_vals;
269
 
270
  /* A variable living at the top of the frame that holds a known value.
271
     Used for detecting stack clobbers.  */
272
  tree stack_protect_guard;
273
 
274
  /* List (chain of EXPR_LIST) of labels heading the current handlers for
275
     nonlocal gotos.  */
276
  rtx x_nonlocal_goto_handler_labels;
277
 
278
  /* Label that will go on function epilogue.
279
     Jumping to this label serves as a "return" instruction
280
     on machines which require execution of the epilogue on all returns.  */
281
  rtx x_return_label;
282
 
283
  /* Label that will go on the end of function epilogue.
284
     Jumping to this label serves as a "naked return" instruction
285
     on machines which require execution of the epilogue on all returns.  */
286
  rtx x_naked_return_label;
287
 
288
  /* List (chain of EXPR_LISTs) of all stack slots in this function.
289
     Made for the sake of unshare_all_rtl.  */
290
  rtx x_stack_slot_list;
291
 
292
  /* Place after which to insert the tail_recursion_label if we need one.  */
293
  rtx x_stack_check_probe_note;
294
 
295
  /* Location at which to save the argument pointer if it will need to be
296
     referenced.  There are two cases where this is done: if nonlocal gotos
297
     exist, or if vars stored at an offset from the argument pointer will be
298
     needed by inner routines.  */
299
  rtx x_arg_pointer_save_area;
300
 
301
  /* Dynamic Realign Argument Pointer used for realigning stack.  */
302
  rtx drap_reg;
303
 
304
  /* Offset to end of allocated area of stack frame.
305
     If stack grows down, this is the address of the last stack slot allocated.
306
     If stack grows up, this is the address for the next slot.  */
307
  HOST_WIDE_INT x_frame_offset;
308
 
309
  /* Insn after which register parms and SAVE_EXPRs are born, if nonopt.  */
310
  rtx x_parm_birth_insn;
311
 
312
  /* List of all used temporaries allocated, by level.  */
313
  VEC(temp_slot_p,gc) *x_used_temp_slots;
314
 
315
  /* List of available temp slots.  */
316
  struct temp_slot *x_avail_temp_slots;
317
 
318
  /* Current nesting level for temporaries.  */
319
  int x_temp_slot_level;
320
 
321
  /* The largest alignment needed on the stack, including requirement
322
     for outgoing stack alignment.  */
323
  unsigned int stack_alignment_needed;
324
 
325
  /* Preferred alignment of the end of stack frame, which is preferred
326
     to call other functions.  */
327
  unsigned int preferred_stack_boundary;
328
 
329
  /* The minimum alignment of parameter stack.  */
330
  unsigned int parm_stack_boundary;
331
 
332
  /* The largest alignment of slot allocated on the stack.  */
333
  unsigned int max_used_stack_slot_alignment;
334
 
335
  /* The stack alignment estimated before reload, with consideration of
336
     following factors:
337
     1. Alignment of local stack variables (max_used_stack_slot_alignment)
338
     2. Alignment requirement to call other functions
339
        (preferred_stack_boundary)
340
     3. Alignment of non-local stack variables but might be spilled in
341
        local stack.  */
342
  unsigned int stack_alignment_estimated;
343
 
344
  /* For reorg.  */
345
 
346
  /* If some insns can be deferred to the delay slots of the epilogue, the
347
     delay list for them is recorded here.  */
348
  rtx epilogue_delay_list;
349
 
350
  /* Nonzero if function being compiled called builtin_return_addr or
351
     builtin_frame_address with nonzero count.  */
352
  bool accesses_prior_frames;
353
 
354
  /* Nonzero if the function calls __builtin_eh_return.  */
355
  bool calls_eh_return;
356
 
357
  /* Nonzero if function saves all registers, e.g. if it has a nonlocal
358
     label that can reach the exit block via non-exceptional paths. */
359
  bool saves_all_registers;
360
 
361
  /* Nonzero if function being compiled has nonlocal gotos to parent
362
     function.  */
363
  bool has_nonlocal_goto;
364
 
365
  /* Nonzero if function being compiled has an asm statement.  */
366
  bool has_asm_statement;
367
 
368
  /* This bit is used by the exception handling logic.  It is set if all
369
     calls (if any) are sibling calls.  Such functions do not have to
370
     have EH tables generated, as they cannot throw.  A call to such a
371
     function, however, should be treated as throwing if any of its callees
372
     can throw.  */
373
  bool all_throwers_are_sibcalls;
374
 
375
  /* Nonzero if stack limit checking should be enabled in the current
376
     function.  */
377
  bool limit_stack;
378
 
379
  /* Nonzero if profiling code should be generated.  */
380
  bool profile;
381
 
382
  /* Nonzero if the current function uses the constant pool.  */
383
  bool uses_const_pool;
384
 
385
  /* Nonzero if the current function uses pic_offset_table_rtx.  */
386
  bool uses_pic_offset_table;
387
 
388
  /* Nonzero if the current function needs an lsda for exception handling.  */
389
  bool uses_eh_lsda;
390
 
391
  /* Set when the tail call has been produced.  */
392
  bool tail_call_emit;
393
 
394
  /* Nonzero if code to initialize arg_pointer_save_area has been emitted.  */
395
  bool arg_pointer_save_area_init;
396
 
397
  /* Nonzero if current function must be given a frame pointer.
398
     Set in global.c if anything is allocated on the stack there.  */
399
  bool frame_pointer_needed;
400
 
401
  /* When set, expand should optimize for speed.  */
402
  bool maybe_hot_insn_p;
403
 
404
  /* Nonzero if function stack realignment is needed.  This flag may be
405
     set twice: before and after reload.  It is set before reload wrt
406
     stack alignment estimation before reload.  It will be changed after
407
     reload if by then criteria of stack realignment is different.
408
     The value set after reload is the accurate one and is finalized.  */
409
  bool stack_realign_needed;
410
 
411
  /* Nonzero if function stack realignment is tried.  This flag is set
412
     only once before reload.  It affects register elimination.  This
413
     is used to generate DWARF debug info for stack variables.  */
414
  bool stack_realign_tried;
415
 
416
  /* Nonzero if function being compiled needs dynamic realigned
417
     argument pointer (drap) if stack needs realigning.  */
418
  bool need_drap;
419
 
420
  /* Nonzero if function stack realignment estimation is done, namely
421
     stack_realign_needed flag has been set before reload wrt estimated
422
     stack alignment info.  */
423
  bool stack_realign_processed;
424
 
425
  /* Nonzero if function stack realignment has been finalized, namely
426
     stack_realign_needed flag has been set and finalized after reload.  */
427
  bool stack_realign_finalized;
428
 
429
  /* True if dbr_schedule has already been called for this function.  */
430
  bool dbr_scheduled_p;
431
 
432
  /* True if current function can not throw.  Unlike
433
     TREE_NOTHROW (current_function_decl) it is set even for overwritable
434
     function where currently compiled version of it is nothrow.  */
435
  bool nothrow;
436
};
437
 
438
#define return_label (crtl->x_return_label)
439
#define naked_return_label (crtl->x_naked_return_label)
440
#define stack_slot_list (crtl->x_stack_slot_list)
441
#define parm_birth_insn (crtl->x_parm_birth_insn)
442
#define frame_offset (crtl->x_frame_offset)
443
#define stack_check_probe_note (crtl->x_stack_check_probe_note)
444
#define arg_pointer_save_area (crtl->x_arg_pointer_save_area)
445
#define used_temp_slots (crtl->x_used_temp_slots)
446
#define avail_temp_slots (crtl->x_avail_temp_slots)
447
#define temp_slot_level (crtl->x_temp_slot_level)
448
#define nonlocal_goto_handler_labels (crtl->x_nonlocal_goto_handler_labels)
449
#define frame_pointer_needed (crtl->frame_pointer_needed)
450
#define stack_realign_fp (crtl->stack_realign_needed && !crtl->need_drap)
451
#define stack_realign_drap (crtl->stack_realign_needed && crtl->need_drap)
452
 
453
extern GTY(()) struct rtl_data x_rtl;
454
 
455
/* Accessor to RTL datastructures.  We keep them statically allocated now since
456
   we never keep multiple functions.  For threaded compiler we might however
457
   want to do differently.  */
458
#define crtl (&x_rtl)
459
 
460
/* This structure can save all the important global and static variables
461
   describing the status of the current function.  */
462
 
463
struct GTY(()) function {
464
  struct eh_status *eh;
465
 
466
  /* The control flow graph for this function.  */
467
  struct control_flow_graph *cfg;
468
 
469
  /* GIMPLE body for this function.  */
470
  struct gimple_seq_d *gimple_body;
471
 
472
  /* SSA and dataflow information.  */
473
  struct gimple_df *gimple_df;
474
 
475
  /* The loops in this function.  */
476
  struct loops *x_current_loops;
477
 
478
  /* Value histograms attached to particular statements.  */
479
  htab_t GTY((skip)) value_histograms;
480
 
481
  /* For function.c.  */
482
 
483
  /* Points to the FUNCTION_DECL of this function.  */
484
  tree decl;
485
 
486
  /* A PARM_DECL that should contain the static chain for this function.
487
     It will be initialized at the beginning of the function.  */
488
  tree static_chain_decl;
489
 
490
  /* An expression that contains the non-local goto save area.  The first
491
     word is the saved frame pointer and the second is the saved stack
492
     pointer.  */
493
  tree nonlocal_goto_save_area;
494
 
495
  /* List of function local variables, functions, types and constants.  */
496
  tree local_decls;
497
 
498
  /* For md files.  */
499
 
500
  /* tm.h can use this to store whatever it likes.  */
501
  struct machine_function * GTY ((maybe_undef)) machine;
502
 
503
  /* Language-specific code can use this to store whatever it likes.  */
504
  struct language_function * language;
505
 
506
  /* Used types hash table.  */
507
  htab_t GTY ((param_is (union tree_node))) used_types_hash;
508
 
509
  /* Last statement uid.  */
510
  int last_stmt_uid;
511
 
512
  /* Function sequence number for profiling, debugging, etc.  */
513
  int funcdef_no;
514
 
515
  /* Line number of the start of the function for debugging purposes.  */
516
  location_t function_start_locus;
517
 
518
  /* Line number of the end of the function.  */
519
  location_t function_end_locus;
520
 
521
  /* Properties used by the pass manager.  */
522
  unsigned int curr_properties;
523
  unsigned int last_verified;
524
 
525
  /* Non-null if the function does something that would prevent it from
526
     being copied; this applies to both versioning and inlining.  Set to
527
     a string describing the reason for failure.  */
528
  const char * GTY((skip)) cannot_be_copied_reason;
529
 
530
  /* Collected bit flags.  */
531
 
532
  /* Number of units of general registers that need saving in stdarg
533
     function.  What unit is depends on the backend, either it is number
534
     of bytes, or it can be number of registers.  */
535
  unsigned int va_list_gpr_size : 8;
536
 
537
  /* Number of units of floating point registers that need saving in stdarg
538
     function.  */
539
  unsigned int va_list_fpr_size : 8;
540
 
541
  /* How commonly executed the function is.  Initialized during branch
542
     probabilities pass.  */
543
  ENUM_BITFIELD (function_frequency) function_frequency : 2;
544
 
545
  /* Nonzero if function being compiled can call setjmp.  */
546
  unsigned int calls_setjmp : 1;
547
 
548
  /* Nonzero if function being compiled can call alloca,
549
     either as a subroutine or builtin.  */
550
  unsigned int calls_alloca : 1;
551
 
552
  /* Nonzero if function being compiled receives nonlocal gotos
553
     from nested functions.  */
554
  unsigned int has_nonlocal_label : 1;
555
 
556
  /* Nonzero if we've set cannot_be_copied_reason.  I.e. if
557
     (cannot_be_copied_set && !cannot_be_copied_reason), the function
558
     can in fact be copied.  */
559
  unsigned int cannot_be_copied_set : 1;
560
 
561
  /* Nonzero if current function uses stdarg.h or equivalent.  */
562
  unsigned int stdarg : 1;
563
 
564
  /* Nonzero if the back-end should not keep track of expressions that
565
     determine the size of variable-sized objects.  Normally, such
566
     expressions are saved away, and then expanded when the next
567
     function is started.  For example, if a parameter has a
568
     variable-sized type, then the size of the parameter is computed
569
     when the function body is entered.  However, some front-ends do
570
     not desire this behavior.  */
571
  unsigned int dont_save_pending_sizes_p : 1;
572
 
573
  unsigned int after_inlining : 1;
574
  unsigned int always_inline_functions_inlined : 1;
575
 
576
  /* Fields below this point are not set for abstract functions; see
577
     allocate_struct_function.  */
578
 
579
  /* Nonzero if function being compiled needs to be given an address
580
     where the value should be stored.  */
581
  unsigned int returns_struct : 1;
582
 
583
  /* Nonzero if function being compiled needs to
584
     return the address of where it has put a structure value.  */
585
  unsigned int returns_pcc_struct : 1;
586
 
587
  /* Nonzero if pass_tree_profile was run on this function.  */
588
  unsigned int after_tree_profile : 1;
589
 
590
  /* Nonzero if this function has local DECL_HARD_REGISTER variables.
591
     In this case code motion has to be done more carefully.  */
592
  unsigned int has_local_explicit_reg_vars : 1;
593
 
594
  /* Nonzero if the current function is a thunk, i.e., a lightweight
595
     function implemented by the output_mi_thunk hook) that just
596
     adjusts one of its arguments and forwards to another
597
     function.  */
598
  unsigned int is_thunk : 1;
599
};
600
 
601
/* If va_list_[gf]pr_size is set to this, it means we don't know how
602
   many units need to be saved.  */
603
#define VA_LIST_MAX_GPR_SIZE    255
604
#define VA_LIST_MAX_FPR_SIZE    255
605
 
606
/* The function currently being compiled.  */
607
extern GTY(()) struct function *cfun;
608
 
609
/* In order to ensure that cfun is not set directly, we redefine it so
610
   that it is not an lvalue.  Rather than assign to cfun, use
611
   push_cfun or set_cfun.  */
612
#define cfun (cfun + 0)
613
 
614
/* Nonzero if we've already converted virtual regs to hard regs.  */
615
extern int virtuals_instantiated;
616
 
617
/* Nonzero if at least one trampoline has been created.  */
618
extern int trampolines_created;
619
 
620
struct GTY(()) types_used_by_vars_entry {
621
  tree type;
622
  tree var_decl;
623
};
624
 
625
/* Hash table making the relationship between a global variable
626
   and the types it references in its initializer. The key of the
627
   entry is a referenced type, and the value is the DECL of the global
628
   variable. types_use_by_vars_do_hash and types_used_by_vars_eq below are
629
   the hash and equality functions to use for this hash table.  */
630
extern GTY((param_is (struct types_used_by_vars_entry))) htab_t
631
  types_used_by_vars_hash;
632
 
633
hashval_t types_used_by_vars_do_hash (const void*);
634
int types_used_by_vars_eq (const void *, const void *);
635
void types_used_by_var_decl_insert (tree type, tree var_decl);
636
 
637
/* During parsing of a global variable, this linked list points to
638
   the list of types referenced by the global variable.  */
639
extern GTY(()) tree types_used_by_cur_var_decl;
640
 
641
 
642
/* cfun shouldn't be set directly; use one of these functions instead.  */
643
extern void set_cfun (struct function *new_cfun);
644
extern void push_cfun (struct function *new_cfun);
645
extern void pop_cfun (void);
646
extern void instantiate_decl_rtl (rtx x);
647
 
648
/* For backward compatibility... eventually these should all go away.  */
649
#define current_function_funcdef_no (cfun->funcdef_no)
650
 
651
#define current_loops (cfun->x_current_loops)
652
#define dom_computed (cfun->cfg->x_dom_computed)
653
#define n_bbs_in_dom_tree (cfun->cfg->x_n_bbs_in_dom_tree)
654
#define VALUE_HISTOGRAMS(fun) (fun)->value_histograms
655
 
656
/* Identify BLOCKs referenced by more than one NOTE_INSN_BLOCK_{BEG,END},
657
   and create duplicate blocks.  */
658
extern void reorder_blocks (void);
659
 
660
/* Set BLOCK_NUMBER for all the blocks in FN.  */
661
extern void number_blocks (tree);
662
 
663
extern void clear_block_marks (tree);
664
extern tree blocks_nreverse (tree);
665
 
666
/* Return size needed for stack frame based on slots so far allocated.
667
   This size counts from zero.  It is not rounded to STACK_BOUNDARY;
668
   the caller may have to do that.  */
669
extern HOST_WIDE_INT get_frame_size (void);
670
 
671
/* Issue an error message and return TRUE if frame OFFSET overflows in
672
   the signed target pointer arithmetics for function FUNC.  Otherwise
673
   return FALSE.  */
674
extern bool frame_offset_overflow (HOST_WIDE_INT, tree);
675
 
676
/* A pointer to a function to create target specific, per-function
677
   data structures.  */
678
extern struct machine_function * (*init_machine_status) (void);
679
 
680
/* Save and restore status information for a nested function.  */
681
extern void free_after_parsing (struct function *);
682
extern void free_after_compilation (struct function *);
683
 
684
extern void init_varasm_status (void);
685
 
686
#ifdef RTX_CODE
687
extern void diddle_return_value (void (*)(rtx, void*), void*);
688
extern void clobber_return_register (void);
689
#endif
690
 
691
extern rtx get_arg_pointer_save_area (void);
692
 
693
/* Returns the name of the current function.  */
694
extern const char *current_function_name (void);
695
 
696
extern void do_warn_unused_parameter (tree);
697
 
698
extern bool pass_by_reference (CUMULATIVE_ARGS *, enum machine_mode,
699
                               tree, bool);
700
extern bool reference_callee_copied (CUMULATIVE_ARGS *, enum machine_mode,
701
                                     tree, bool);
702
 
703
extern void used_types_insert (tree);
704
 
705
extern int get_next_funcdef_no (void);
706
#endif  /* GCC_FUNCTION_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.