OSDN Git Service

(struct function): Add apply_args_value field.
[pf3gnuchains/gcc-fork.git] / gcc / function.h
1 /* Structure for saving state for a nested function.
2    Copyright (C) 1989, 1992 Free Software Foundation, Inc.
3
4 This file is part of GNU CC.
5
6 GNU CC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10
11 GNU CC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GNU CC; see the file COPYING.  If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
19
20
21 #ifndef NULL_TREE
22 #define tree int *
23 #endif
24 #ifndef GET_CODE
25 #define rtx int *
26 #endif
27
28 struct var_refs_queue
29   {
30     rtx modified;
31     enum machine_mode promoted_mode;
32     int unsignedp;
33     struct var_refs_queue *next;
34   };
35
36 /* Stack of pending (incomplete) sequences saved by `start_sequence'.
37    Each element describes one pending sequence.
38    The main insn-chain is saved in the last element of the chain,
39    unless the chain is empty.  */
40
41 struct sequence_stack
42 {
43   /* First and last insns in the chain of the saved sequence.  */
44   rtx first, last;
45   struct sequence_stack *next;
46 };
47
48 extern struct sequence_stack *sequence_stack;
49 \f
50 /* This structure can save all the important global and static variables
51    describing the status of the current function.  */
52
53 struct function
54 {
55   struct function *next;
56
57   /* For function.c.  */
58   char *name;
59   tree decl;
60   int pops_args;
61   int returns_struct;
62   int returns_pcc_struct;
63   int needs_context;
64   int calls_setjmp;
65   int calls_longjmp;
66   int calls_alloca;
67   int has_nonlocal_label;
68   rtx nonlocal_goto_handler_slot;
69   rtx nonlocal_goto_stack_level;
70   tree nonlocal_labels;
71   int args_size;
72   int pretend_args_size;
73   rtx arg_offset_rtx;
74   int max_parm_reg;
75   rtx *parm_reg_stack_loc;
76   int outgoing_args_size;
77   rtx return_rtx;
78   rtx cleanup_label;
79   rtx return_label;
80   rtx save_expr_regs;
81   rtx stack_slot_list;
82   rtx parm_birth_insn;
83   int frame_offset;
84   rtx tail_recursion_label;
85   rtx tail_recursion_reentry;
86   rtx internal_arg_pointer;
87   rtx arg_pointer_save_area;
88   tree rtl_expr_chain;
89   rtx last_parm_insn;
90   tree context_display;
91   tree trampoline_list;
92   int function_call_count;
93   struct temp_slot *temp_slots;
94   int temp_slot_level;
95   /* This slot is initialized as 0 and is added to
96      during the nested function.  */
97   struct var_refs_queue *fixup_var_refs_queue;
98
99   /* For stmt.c  */
100   struct nesting *block_stack;
101   struct nesting *stack_block_stack;
102   struct nesting *cond_stack;
103   struct nesting *loop_stack;
104   struct nesting *case_stack;
105   struct nesting *nesting_stack;
106   int nesting_depth;
107   int block_start_count;
108   tree last_expr_type;
109   rtx last_expr_value;
110   int expr_stmts_for_value;
111   char *emit_filename;
112   int emit_lineno;
113   struct goto_fixup *goto_fixup_chain;
114
115   /* For expr.c.  */
116   int pending_stack_adjust;
117   int inhibit_defer_pop;
118   tree cleanups_this_call;
119   rtx saveregs_value;
120   rtx apply_args_value;
121   rtx forced_labels;
122
123   /* For emit-rtl.c.  */
124   int reg_rtx_no;
125   int first_label_num;
126   rtx first_insn;
127   rtx last_insn;
128   struct sequence_stack *sequence_stack;
129   int cur_insn_uid;
130   int last_linenum;
131   char *last_filename;
132   char *regno_pointer_flag;
133   int regno_pointer_flag_length;
134   rtx *regno_reg_rtx;
135
136   /* For stor-layout.c.  */
137   tree permanent_type_chain;
138   tree temporary_type_chain;
139   tree permanent_type_end;
140   tree temporary_type_end;
141   tree pending_sizes;
142   int immediate_size_expand;
143
144   /* For tree.c.  */
145   int all_types_permanent;
146   struct momentary_level *momentary_stack;
147   char *maybepermanent_firstobj;
148   char *temporary_firstobj;
149   char *momentary_firstobj;
150   struct obstack *current_obstack;
151   struct obstack *function_obstack;
152   struct obstack *function_maybepermanent_obstack;
153   struct obstack *expression_obstack;
154   struct obstack *saveable_obstack;
155   struct obstack *rtl_obstack;
156
157   /* For integrate.c.  */
158   int uses_const_pool;
159
160   /* For md files.  */
161   int uses_pic_offset_table;
162
163   /* For reorg.  */
164   rtx epilogue_delay_list;
165
166   /* For varasm.  */
167   struct constant_descriptor **const_rtx_hash_table;
168   struct pool_sym **const_rtx_sym_hash_table;
169   struct pool_constant *first_pool, *last_pool;
170   int pool_offset;
171 };
172
173 /* The FUNCTION_DECL for an inline function currently being expanded.  */
174 extern tree inline_function_decl;
175
176 /* Label that will go on function epilogue.
177    Jumping to this label serves as a "return" instruction
178    on machines which require execution of the epilogue on all returns.  */
179 extern rtx return_label;
180
181 /* List (chain of EXPR_LISTs) of all stack slots in this function.
182    Made for the sake of unshare_all_rtl.  */
183 extern rtx stack_slot_list;
184
185 /* Given a function decl for a containing function,
186    return the `struct function' for it.  */
187 struct function *find_function_data PROTO((tree));
188
189 /* Pointer to chain of `struct function' for containing functions.  */
190 extern struct function *outer_function_chain;
191
192 /* Put all this function's BLOCK nodes into a vector and return it.
193    Also store in each NOTE for the beginning or end of a block
194    the index of that block in the vector.  */
195 tree *identify_blocks PROTO((tree, rtx));
196
197 #ifdef rtx
198 #undef rtx
199 #endif
200
201 #ifdef tree
202 #undef tree
203 #endif