| 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 */
 |