参照元†
/* This structure can save all the important global and static variables
describing the status of the current function. */
struct GTY(()) function {
struct eh_status *eh;
/* The control flow graph for this function. */
struct control_flow_graph *cfg;
/* GIMPLE body for this function. */
gimple_seq gimple_body;
/* SSA and dataflow information. */
struct gimple_df *gimple_df;
/* The loops in this function. */
struct loops *x_current_loops;
/* Filled by the GIMPLE and RTL FEs, pass to start compilation with. */
char *pass_startwith;
/* The stack usage of this function. */
struct stack_usage *su;
/* Value histograms attached to particular statements. */
htab_t GTY((skip)) value_histograms;
/* For function.c. */
/* Points to the FUNCTION_DECL of this function. */
tree decl;
/* A PARM_DECL that should contain the static chain for this function.
It will be initialized at the beginning of the function. */
tree static_chain_decl;
/* An expression that contains the non-local goto save area. The first
word is the saved frame pointer and the second is the saved stack
pointer. */
tree nonlocal_goto_save_area;
/* Vector of function local variables, functions, types and constants. */
vec<tree, va_gc> *local_decls;
/* For md files. */
/* tm.h can use this to store whatever it likes. */
struct machine_function * GTY ((maybe_undef)) machine;
/* Language-specific code can use this to store whatever it likes. */
struct language_function * language;
/* Used types hash table. */
hash_set<tree> *GTY (()) used_types_hash;
/* Dwarf2 Frame Description Entry, containing the Call Frame Instructions
used for unwinding. Only set when either dwarf2 unwinding or dwarf2
debugging is enabled. */
struct dw_fde_node *fde;
/* Last statement uid. */
int last_stmt_uid;
/* Debug marker counter. Count begin stmt markers. We don't have
to keep it exact, it's more of a rough estimate to enable us to
decide whether they are too many to copy during inlining, or when
expanding to RTL. */
int debug_marker_count;
/* Function sequence number for profiling, debugging, etc. */
int funcdef_no;
/* Line number of the start of the function for debugging purposes. */
location_t function_start_locus;
/* Line number of the end of the function. */
location_t function_end_locus;
/* Properties used by the pass manager. */
unsigned int curr_properties;
unsigned int last_verified;
/* Non-null if the function does something that would prevent it from
being copied; this applies to both versioning and inlining. Set to
a string describing the reason for failure. */
const char * GTY((skip)) cannot_be_copied_reason;
/* Last assigned dependence info clique. */
unsigned short last_clique;
/* Collected bit flags. */
/* Number of units of general registers that need saving in stdarg
function. What unit is depends on the backend, either it is number
of bytes, or it can be number of registers. */
unsigned int va_list_gpr_size : 8;
/* Number of units of floating point registers that need saving in stdarg
function. */
unsigned int va_list_fpr_size : 8;
/* Nonzero if function being compiled can call setjmp. */
unsigned int calls_setjmp : 1;
/* Nonzero if function being compiled can call alloca,
either as a subroutine or builtin. */
unsigned int calls_alloca : 1;
/* Nonzero if function being compiled receives nonlocal gotos
from nested functions. */
unsigned int has_nonlocal_label : 1;
/* Nonzero if function being compiled has a forced label
placed into static storage. */
unsigned int has_forced_label_in_static : 1;
/* Nonzero if we've set cannot_be_copied_reason. I.e. if
(cannot_be_copied_set && !cannot_be_copied_reason), the function
can in fact be copied. */
unsigned int cannot_be_copied_set : 1;
/* Nonzero if current function uses stdarg.h or equivalent. */
unsigned int stdarg : 1;
unsigned int after_inlining : 1;
unsigned int always_inline_functions_inlined : 1;
/* Nonzero if function being compiled can throw synchronous non-call
exceptions. */
unsigned int can_throw_non_call_exceptions : 1;
/* Nonzero if instructions that may throw exceptions but don't otherwise
contribute to the execution of the program can be deleted. */
unsigned int can_delete_dead_exceptions : 1;
/* Fields below this point are not set for abstract functions; see
allocate_struct_function. */
/* Nonzero if function being compiled needs to be given an address
where the value should be stored. */
unsigned int returns_struct : 1;
/* Nonzero if function being compiled needs to
return the address of where it has put a structure value. */
unsigned int returns_pcc_struct : 1;
/* Nonzero if this function has local DECL_HARD_REGISTER variables.
In this case code motion has to be done more carefully. */
unsigned int has_local_explicit_reg_vars : 1;
/* Nonzero if the current function is a thunk, i.e., a lightweight
function implemented by the output_mi_thunk hook) that just
adjusts one of its arguments and forwards to another
function. */
unsigned int is_thunk : 1;
/* Nonzero if the current function contains any loops with
loop->force_vectorize set. */
unsigned int has_force_vectorize_loops : 1;
/* Nonzero if the current function contains any loops with
nonzero value in loop->simduid. */
unsigned int has_simduid_loops : 1;
/* Nonzero when the tail call has been identified. */
unsigned int tail_call_marked : 1;
/* Nonzero if the current function contains a #pragma GCC unroll. */
unsigned int has_unroll : 1;
/* Set when the function was compiled with generation of debug
(begin stmt, inline entry, ...) markers enabled. */
unsigned int debug_nonbind_markers : 1;
};
コメント†