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 |
enum machine_mode | mode: MACHINE_MODE_BITSIZE |
char | in_memory |
char | is_const |
char | flag |
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 insert_with_costs(), and invalidate().
int table_elt::cost |
Referenced by approx_reg_cost(), cse_insn(), fold_rtx(), insert_with_costs(), and merge_equiv_classes().
rtx table_elt::exp |
Referenced by cse_insn(), dump_class(), equiv_constant(), find_comparison_args(), find_reg_offset_for_const(), flush_hash_table(), fold_rtx(), insert_regs(), insert_with_costs(), invalidate(), invalidate_for_call(), invalidate_reg(), lookup(), lookup_as_function(), lookup_for_remove(), merge_equiv_classes(), rehash_using_reg(), remove_invalid_refs(), remove_invalid_subreg_refs(), and use_related_value().
struct table_elt* table_elt::first_same_value |
char table_elt::flag |
char table_elt::in_memory |
Referenced by cse_insn(), insert_with_costs(), invalidate(), invalidate_memory(), merge_equiv_classes(), and record_jump_cond().
char table_elt::is_const |
Referenced by equiv_constant(), find_comparison_args(), and insert_with_costs().
enum machine_mode table_elt::mode |
Referenced by canon_hash(), check_dependence(), cse_insn(), fold_rtx(), hash_rtx(), insert(), insert_const_anchor(), insert_const_anchors(), insert_with_costs(), lookup(), lookup_for_remove(), merge_equiv_classes(), notreg_cost(), record_jump_cond(), record_jump_cond_subreg(), record_jump_equiv(), rehash_using_reg(), remove_invalid_subreg_refs(), safe_hash(), try_const_anchors(), and use_related_value().
struct table_elt* table_elt::next_same_hash |
struct table_elt* table_elt::next_same_value |
struct table_elt* table_elt::prev_same_hash |
Referenced by insert_with_costs(), rehash_using_reg(), and remove_from_table().
struct table_elt* table_elt::prev_same_value |
Referenced by cse_insn(), insert_with_costs(), and remove_from_table().
int table_elt::regcost |
Referenced by cse_insn(), and insert_with_costs().
struct table_elt* table_elt::related_value |
Referenced by cse_insn(), insert_with_costs(), remove_from_table(), and use_related_value().