GCC Middle and Back End API Reference
deps_desc Struct Reference

#include <sched-int.h>

Collaboration diagram for deps_desc:

Data Fields

rtx pending_read_insns
rtx pending_read_mems
rtx pending_write_insns
rtx pending_write_mems
rtx pending_jump_insns
int pending_read_list_length
int pending_write_list_length
int pending_flush_length
rtx last_pending_memory_flush
rtx last_function_call
rtx last_function_call_may_noreturn
rtx sched_before_next_call
rtx sched_before_next_jump
enum post_call_group in_post_call_group_p
rtx last_debug_insn
int max_reg
struct deps_regreg_last
regset_head reg_last_in_use
enum reg_pending_barrier_mode last_reg_pending_barrier
BOOL_BITFIELD readonly: 1

Detailed Description

   Describe state of dependencies used during sched_analyze phase.  

Field Documentation

enum post_call_group deps_desc::in_post_call_group_p
     Used to keep post-call pseudo/hard reg movements together with
     the call.  
rtx deps_desc::last_debug_insn
     The last debug insn we've seen.  
rtx deps_desc::last_function_call
     A list of the last function calls we have seen.  We use a list to
     represent last function calls from multiple predecessor blocks.
     Used to prevent register lifetimes from expanding unnecessarily.  
rtx deps_desc::last_function_call_may_noreturn
     A list of the last function calls that may not return normally
     we have seen.  We use a list to represent last function calls from
     multiple predecessor blocks.  Used to prevent moving trapping insns
     across such calls.  
rtx deps_desc::last_pending_memory_flush
     The last insn upon which all memory references must depend.
     This is an insn which flushed the pending lists, creating a dependency
     between it and all previously pending memory references.  This creates
     a barrier (or a checkpoint) which no memory reference is allowed to cross.

     This includes all non constant CALL_INSNs.  When we do interprocedural
     alias analysis, this restriction can be relaxed.
     This may also be an INSN that writes memory if the pending lists grow
     too large.  
enum reg_pending_barrier_mode deps_desc::last_reg_pending_barrier
     Shows the last value of reg_pending_barrier associated with the insn.  
int deps_desc::max_reg
     The maximum register number for the following arrays.  Before reload
     this is max_reg_num; after reload it is FIRST_PSEUDO_REGISTER.  

Referenced by mark_reg_death().

int deps_desc::pending_flush_length
     Length of the pending memory flush list plus the length of the pending
     jump insn list.  Large functions with no calls may build up extremely
     large lists.  
rtx deps_desc::pending_jump_insns
     An INSN_LIST containing all jump insns.  

Referenced by add_branch_dependences().

rtx deps_desc::pending_read_insns
     The *_insns and *_mems are paired lists.  Each pending memory operation
     will have a pointer to the MEM rtx on one list and a pointer to the
     containing insn on the other list in the same place in the list.  
     We can't use add_dependence like the old code did, because a single insn
     may have multiple memory accesses, and hence needs to be on the list
     once for each memory access.  Add_dependence won't let you add an insn
     to a list more than once.  
     An INSN_LIST containing all insns with pending read operations.  

Referenced by add_branch_dependences(), and remove_from_dependence_list().

int deps_desc::pending_read_list_length
     We must prevent the above lists from ever growing too large since
     the number of dependencies produced is at least O(N*N),
     and execution time is at least O(4*N*N), as a function of the
     length of these pending lists.  
     Indicates the length of the pending_read list.  

Referenced by remove_from_dependence_list().

rtx deps_desc::pending_read_mems
     An EXPR_LIST containing all MEM rtx's which are pending reads.  

Referenced by add_branch_dependences(), and remove_from_dependence_list().

rtx deps_desc::pending_write_insns
     An INSN_LIST containing all insns with pending write operations.  

Referenced by add_branch_dependences().

int deps_desc::pending_write_list_length
     Indicates the length of the pending_write list.  
rtx deps_desc::pending_write_mems
     An EXPR_LIST containing all MEM rtx's which are pending writes.  

Referenced by add_branch_dependences().

BOOL_BITFIELD deps_desc::readonly
     True when this context should be treated as a readonly by
     the analysis.  

Referenced by add_dependence_list_and_free().

struct deps_reg* deps_desc::reg_last
     Element N is the next insn that sets (hard or pseudo) register
     N within the current basic block; or zero, if there is no
     such insn.  Needed for new registers which may be introduced
     by splitting insns.  

Referenced by haifa_note_mem_dep().

regset_head deps_desc::reg_last_in_use
     Element N is set for each register that has any nonzero element
     in reg_last[N].{uses,sets,clobbers}.  
rtx deps_desc::sched_before_next_call
     A list of insns which use a pseudo register that does not already
     cross a call.  We create dependencies between each of those insn
     and the next call insn, to ensure that they won't cross a call after
     scheduling is done.  
rtx deps_desc::sched_before_next_jump
     Similarly, a list of insns which should not cross a branch.  

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