GCC Middle and Back End API Reference
temp_slot Struct Reference
Collaboration diagram for temp_slot:

Data Fields

struct temp_slotnext
struct temp_slotprev
rtx slot
tree type
unsigned int align
char in_use
int level
HOST_WIDE_INT base_offset
HOST_WIDE_INT full_size

Detailed Description

   In order to evaluate some expressions, such as function calls returning
   structures in memory, we need to temporarily allocate stack locations.
   We record each allocated temporary in the following structure.

   Associated with each temporary slot is a nesting level.  When we pop up
   one level, all temporaries associated with the previous level are freed.
   Normally, all temporaries are freed after the execution of the statement
   in which they were created.  However, if we are inside a ({...}) grouping,
   the result may be in a temporary and hence must be preserved.  If the
   result could be in a temporary, we preserve it if we can determine which
   one it is in.  If we cannot determine which temporary may contain the
   result, all temporaries are preserved.  A temporary is preserved by
   pretending it was allocated at the previous nesting level.  

Field Documentation

unsigned int temp_slot::align
     The alignment (in bits) of the slot.  
HOST_WIDE_INT temp_slot::base_offset
     The offset of the slot from the frame_pointer, including extra space
     for alignment.  This info is for combine_temp_slots.  

Referenced by assign_temp().

HOST_WIDE_INT temp_slot::full_size
     The size of the slot, including extra space for alignment.  This
     info is for combine_temp_slots.  

Referenced by assign_temp().

char temp_slot::in_use
     Nonzero if this temporary is currently in use.  

Referenced by make_slot_available().

int temp_slot::level
     Nesting level at which this slot is being used.  

Referenced by cut_slot_from_list().

struct temp_slot* temp_slot::next
     Points to next temporary slot.  

Referenced by assign_stack_temp(), assign_temp(), insert_temp_slot_address(), and update_temp_slot_address().

struct temp_slot* temp_slot::prev
     Points to previous temporary slot.  
HOST_WIDE_INT temp_slot::size
     The size, in units, of the slot.  

Referenced by assign_temp().

rtx temp_slot::slot
     The rtx to used to reference the slot.  

Referenced by assign_temp(), and remove_unused_temp_slot_addresses().

tree temp_slot::type
     The type of the object in the slot, or zero if it doesn't correspond
     to a type.  We use this to determine whether a slot can be reused.
     It can be reused if objects of the type of the new slot will always
     conflict with objects of the type of the old slot.  

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