GCC Middle and Back End API Reference
rtl_data Struct Reference

#include <function.h>

Collaboration diagram for rtl_data:

Data Fields

struct expr_status expr
struct emit_status emit
struct varasm_status varasm
struct incoming_args args
struct function_subsections subsections
struct rtl_eh eh
int outgoing_args_size
rtx return_rtx
struct initial_value_structhard_reg_initial_vals
tree stack_protect_guard
rtx x_nonlocal_goto_handler_labels
rtx x_return_label
rtx x_naked_return_label
rtx x_stack_slot_list
struct frame_spaceframe_space_list
rtx x_stack_check_probe_note
rtx x_arg_pointer_save_area
rtx drap_reg
HOST_WIDE_INT x_frame_offset
rtx x_parm_birth_insn
vec< temp_slot_p, va_gc > * x_used_temp_slots
struct temp_slotx_avail_temp_slots
int x_temp_slot_level
unsigned int stack_alignment_needed
unsigned int preferred_stack_boundary
unsigned int parm_stack_boundary
unsigned int max_used_stack_slot_alignment
unsigned int stack_alignment_estimated
bool accesses_prior_frames
bool calls_eh_return
bool saves_all_registers
bool has_nonlocal_goto
bool has_asm_statement
bool all_throwers_are_sibcalls
bool limit_stack
bool profile
bool uses_const_pool
bool uses_pic_offset_table
bool uses_eh_lsda
bool tail_call_emit
bool arg_pointer_save_area_init
bool frame_pointer_needed
bool maybe_hot_insn_p
bool stack_realign_needed
bool stack_realign_tried
bool need_drap
bool stack_realign_processed
bool stack_realign_finalized
bool dbr_scheduled_p
bool nothrow
bool shrink_wrapped
bool sp_is_unchanging
bool is_leaf
bool uses_only_leaf_regs
bool has_bb_partition
bool bb_reorder_complete
HARD_REG_SET asm_clobbers

Detailed Description

   Datastructures maintained for currently processed function in RTL form.  

Field Documentation

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.  

The documentation for this struct was generated from the following file: