GCC Middle and Back End API Reference
|
Data Fields | |
rtx | exp |
rtx | canon_exp |
struct table_elt * | next_same_hash |
struct table_elt * | prev_same_hash |
struct table_elt * | next_same_value |
struct table_elt * | prev_same_value |
struct table_elt * | first_same_value |
struct table_elt * | related_value |
int | cost |
int | regcost |
The hash table contains buckets which are chains of `struct table_elt's, each recording one expression's information. That expression is in the `exp' field.
The canon_exp field contains a canonical (from the point of view of alias analysis) version of the `exp' field.
Those elements with the same hash code are chained in both directions through the `next_same_hash' and `prev_same_hash' fields.
Each set of expressions with equivalent values are on a two-way chain through the `next_same_value' and `prev_same_value' fields, and all point with the `first_same_value' field at the first element in that chain. The chain is in order of increasing cost. Each element's cost value is in its `cost' field.
The `in_memory' field is nonzero for elements that involve any reference to memory. These elements are removed whenever a write is done to an unidentified location in memory. To be safe, we assume that a memory address is unidentified unless the address is either a symbol constant or a constant plus the frame pointer or argument pointer.
The `related_value' field is used to connect related expressions (that differ by adding an integer). The related expressions are chained in a circular fashion. `related_value' is zero for expressions for which this chain is not useful.
The `cost' field stores the cost of this element's expression. The `regcost' field stores the value returned by approx_reg_cost for this element's expression.
The `is_const' flag is set if the element is a constant (including a fixed address).
The `flag' field is used as a temporary during some search routines.
The `mode' field is usually the same as GET_MODE (`exp'), but if `exp' is a CONST_INT and has no machine mode then the `mode' field is the mode it was being used as. Each constant is recorded separately for each mode it is used with.
rtx table_elt::canon_exp |
Referenced by flush_hash_table().
int table_elt::cost |
rtx table_elt::exp |
Referenced by canon_reg(), compute_const_anchors(), flush_hash_table(), lookup_as_function(), and remove_from_table().
struct table_elt* table_elt::first_same_value |
Referenced by find_reg_offset_for_const(), and lookup().
struct table_elt* table_elt::next_same_hash |
Referenced by flush_hash_table(), and remove_from_table().
struct table_elt* table_elt::next_same_value |
Referenced by find_reg_offset_for_const(), and lookup().
struct table_elt* table_elt::prev_same_hash |
struct table_elt* table_elt::prev_same_value |
Referenced by find_reg_offset_for_const().
int table_elt::regcost |
struct table_elt* table_elt::related_value |
Referenced by insert_with_costs(), and remove_invalid_refs().