|
GCC Middle and Back End API Reference
|
#include <function.h>

Datastructures maintained for currently processed function in RTL form.
| bool rtl_data::accesses_prior_frames |
For reorg.
Nonzero if function being compiled called builtin_return_addr or
builtin_frame_address with nonzero count.
| bool rtl_data::all_throwers_are_sibcalls |
This bit is used by the exception handling logic. It is set if all
calls (if any) are sibling calls. Such functions do not have to
have EH tables generated, as they cannot throw. A call to such a
function, however, should be treated as throwing if any of its callees
can throw.
| bool rtl_data::arg_pointer_save_area_init |
Nonzero if code to initialize arg_pointer_save_area has been emitted.
| struct incoming_args rtl_data::args |
| HARD_REG_SET rtl_data::asm_clobbers |
Like regs_ever_live, but 1 if a reg is set or clobbered from an
asm. Unlike regs_ever_live, elements of this array corresponding
to eliminable regs (like the frame pointer) are set if an asm
sets them.
| bool rtl_data::bb_reorder_complete |
Nonzero if the function being compiled has completed the bb reordering
pass.
| bool rtl_data::calls_eh_return |
Nonzero if the function calls __builtin_eh_return.
| bool rtl_data::dbr_scheduled_p |
True if dbr_schedule has already been called for this function.
| rtx rtl_data::drap_reg |
Dynamic Realign Argument Pointer used for realigning stack.
| struct rtl_eh rtl_data::eh |
| struct emit_status rtl_data::emit |
| struct expr_status rtl_data::expr |
| bool rtl_data::frame_pointer_needed |
Nonzero if current function must be given a frame pointer.
Set in reload1.c or lra-eliminations.c if anything is allocated
on the stack there.
| struct frame_space* rtl_data::frame_space_list |
List of empty areas in the stack frame.
| struct initial_value_struct* rtl_data::hard_reg_initial_vals |
Vector of initial-value pairs. Each pair consists of a pseudo
register of approprite mode that stores the initial value a hard
register REGNO, and that hard register itself. ??? This could be a VEC but there is currently no way to define an
opaque VEC type.
| bool rtl_data::has_asm_statement |
Nonzero if function being compiled has an asm statement.
| bool rtl_data::has_bb_partition |
Nonzero if the function being compiled has undergone hot/cold partitioning
(under flag_reorder_blocks_and_partition) and has at least one cold
block.
| bool rtl_data::has_nonlocal_goto |
Nonzero if function being compiled has nonlocal gotos to parent
function.
| bool rtl_data::is_leaf |
Nonzero if function being compiled doesn't contain any calls
(ignoring the prologue and epilogue). This is set prior to
local register allocation and is valid for the remaining
compiler passes.
| bool rtl_data::limit_stack |
Nonzero if stack limit checking should be enabled in the current
function.
| unsigned int rtl_data::max_used_stack_slot_alignment |
The largest alignment of slot allocated on the stack.
| bool rtl_data::maybe_hot_insn_p |
When set, expand should optimize for speed.
| bool rtl_data::need_drap |
Nonzero if function being compiled needs dynamic realigned
argument pointer (drap) if stack needs realigning.
| bool rtl_data::nothrow |
True if current function can not throw. Unlike
TREE_NOTHROW (current_function_decl) it is set even for overwritable
function where currently compiled version of it is nothrow.
| int rtl_data::outgoing_args_size |
For function.c
# of bytes of outgoing arguments. If ACCUMULATE_OUTGOING_ARGS is
defined, the needed space is pushed by the prologue.
| unsigned int rtl_data::parm_stack_boundary |
The minimum alignment of parameter stack.
| unsigned int rtl_data::preferred_stack_boundary |
Preferred alignment of the end of stack frame, which is preferred
to call other functions.
| bool rtl_data::profile |
Nonzero if profiling code should be generated.
| rtx rtl_data::return_rtx |
If nonzero, an RTL expression for the location at which the current
function returns its result. If the current function returns its
result in a register, current_function_return_rtx will always be
the hard register containing the result.
| bool rtl_data::saves_all_registers |
Nonzero if function saves all registers, e.g. if it has a nonlocal
label that can reach the exit block via non-exceptional paths.
| bool rtl_data::shrink_wrapped |
True if we performed shrink-wrapping for the current function.
| bool rtl_data::sp_is_unchanging |
Nonzero if function being compiled doesn't modify the stack pointer
(ignoring the prologue and epilogue). This is only valid after
pass_stack_ptr_mod has run.
| unsigned int rtl_data::stack_alignment_estimated |
The stack alignment estimated before reload, with consideration of
following factors:
1. Alignment of local stack variables (max_used_stack_slot_alignment)
2. Alignment requirement to call other functions
(preferred_stack_boundary)
3. Alignment of non-local stack variables but might be spilled in
local stack.
| unsigned int rtl_data::stack_alignment_needed |
The largest alignment needed on the stack, including requirement
for outgoing stack alignment.
| tree rtl_data::stack_protect_guard |
A variable living at the top of the frame that holds a known value.
Used for detecting stack clobbers.
| bool rtl_data::stack_realign_finalized |
Nonzero if function stack realignment has been finalized, namely
stack_realign_needed flag has been set and finalized after reload.
| bool rtl_data::stack_realign_needed |
Nonzero if function stack realignment is needed. This flag may be
set twice: before and after reload. It is set before reload wrt
stack alignment estimation before reload. It will be changed after
reload if by then criteria of stack realignment is different.
The value set after reload is the accurate one and is finalized.
| bool rtl_data::stack_realign_processed |
Nonzero if function stack realignment estimation is done, namely
stack_realign_needed flag has been set before reload wrt estimated
stack alignment info.
| bool rtl_data::stack_realign_tried |
Nonzero if function stack realignment is tried. This flag is set
only once before reload. It affects register elimination. This
is used to generate DWARF debug info for stack variables.
| struct function_subsections rtl_data::subsections |
| bool rtl_data::tail_call_emit |
Set when the tail call has been produced.
| bool rtl_data::uses_const_pool |
Nonzero if the current function uses the constant pool.
| bool rtl_data::uses_eh_lsda |
Nonzero if the current function needs an lsda for exception handling.
| bool rtl_data::uses_only_leaf_regs |
Nonzero if the function being compiled is a leaf function which only
uses leaf registers. This is valid after reload (specifically after
sched2) and is useful only if the port defines LEAF_REGISTERS.
| bool rtl_data::uses_pic_offset_table |
Nonzero if the current function uses pic_offset_table_rtx.
| struct varasm_status rtl_data::varasm |
| rtx rtl_data::x_arg_pointer_save_area |
Location at which to save the argument pointer if it will need to be
referenced. There are two cases where this is done: if nonlocal gotos
exist, or if vars stored at an offset from the argument pointer will be
needed by inner routines.
| struct temp_slot* rtl_data::x_avail_temp_slots |
List of available temp slots.
| HOST_WIDE_INT rtl_data::x_frame_offset |
Offset to end of allocated area of stack frame.
If stack grows down, this is the address of the last stack slot allocated.
If stack grows up, this is the address for the next slot.
| rtx rtl_data::x_naked_return_label |
Label that will go on the end of function epilogue.
Jumping to this label serves as a "naked return" instruction
on machines which require execution of the epilogue on all returns.
| rtx rtl_data::x_nonlocal_goto_handler_labels |
List (chain of EXPR_LIST) of labels heading the current handlers for
nonlocal gotos.
| rtx rtl_data::x_parm_birth_insn |
Insn after which register parms and SAVE_EXPRs are born, if nonopt.
| rtx rtl_data::x_return_label |
Label that will go on function epilogue.
Jumping to this label serves as a "return" instruction
on machines which require execution of the epilogue on all returns.
| rtx rtl_data::x_stack_check_probe_note |
Place after which to insert the tail_recursion_label if we need one.
| rtx rtl_data::x_stack_slot_list |
List (chain of EXPR_LISTs) of all stack slots in this function.
Made for the sake of unshare_all_rtl.
| int rtl_data::x_temp_slot_level |
Current nesting level for temporaries.
| vec<temp_slot_p, va_gc>* rtl_data::x_used_temp_slots |
List of all used temporaries allocated, by level.