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

Data Fields

rtx last_death
rtx last_set
rtx last_set_value
int last_set_table_tick
int last_set_label
unsigned HOST_WIDE_INT last_set_nonzero_bits
char last_set_sign_bit_copies

Field Documentation

rtx reg_stat_struct::last_death
     Record last point of death of (hard or pseudo) register n.  
rtx reg_stat_struct::last_set
     Record last point of modification of (hard or pseudo) register n.  
int reg_stat_struct::last_set_label
     Record the value of label_tick when the value for register n is placed in
unsigned HOST_WIDE_INT reg_stat_struct::last_set_nonzero_bits
     These fields are maintained in parallel with last_set_value and are
     used to store the mode in which the register was last set, the bits
     that were known to be zero when it was last set, and the number of
     sign bits copies it was known to have when it was last set.  
char reg_stat_struct::last_set_sign_bit_copies
int reg_stat_struct::last_set_table_tick
     Record the value of label_tick when an expression involving register n
     is placed in last_set_value.  
rtx reg_stat_struct::last_set_value
     The next group of fields allows the recording of the last value assigned
     to (hard or pseudo) register n.  We use this information to see if an
     operation being processed is redundant given a prior operation performed
     on the register.  For example, an `and' with a constant is redundant if
     all the zero bits are already known to be turned off.

     We use an approach similar to that used by cse, but change it in the
     following ways:

     (1) We do not want to reinitialize at each label.
     (2) It is useful, but not critical, to know the actual value assigned
         to a register.  Often just its form is helpful.

     Therefore, we maintain the following fields:

     last_set_value             the last value assigned
     last_set_label             records the value of label_tick when the
                                register was assigned
     last_set_table_tick        records the value of label_tick when a
                                value using the register is assigned
     last_set_invalid           set to nonzero when it is not valid
                                to use the value of this register in some
                                register's value

     To understand the usage of these tables, it is important to understand
     the distinction between the value in last_set_value being valid and
     the register being validly contained in some other expression in the

     (The next two parameters are out of date).

     reg_stat[i].last_set_value is valid if it is nonzero, and either
     reg_n_sets[i] is 1 or reg_stat[i].last_set_label == label_tick.

     Register I may validly appear in any expression returned for the value
     of another register if reg_n_sets[i] is 1.  It may also appear in the
     value for register J if reg_stat[j].last_set_invalid is zero, or
     reg_stat[i].last_set_label < reg_stat[j].last_set_label.

     If an expression is found in the table containing a register which may
     not validly appear in an expression, the register is replaced by
     something that won't match, (clobber (const_int 0)).  
     Record last value assigned to (hard or pseudo) register n.  

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