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

Data Structures

struct  key
 

Public Types

typedef keycompare_type
 
typedef Typevalue_type
 

Static Public Member Functions

static hashval_t hash (const cselib_val *)
 
static bool equal (const cselib_val *, const key *)
 
static hashval_t hash (const value_type &)
 
static bool equal (const value_type &existing, const compare_type &candidate)
 
static void mark_deleted (Type *&)
 
static void mark_empty (Type *&)
 
static bool is_deleted (Type *)
 
static bool is_empty (Type *)
 
static void remove (Type &)
 

Static Public Attributes

static const bool empty_zero_p = true
 

Detailed Description

There are three ways in which cselib can look up an rtx:
- for a REG, the reg_values table (which is indexed by regno) is used
- for a MEM, we recursively look up its address and then follow the
  addr_list of that value
- for everything else, we compute a hash value and go through the hash
  table.  Since different rtx's can still have the same hash value,
  this involves walking the table entries for a given value and comparing
  the locations of the entries with the rtx we are looking up.   

Member Typedef Documentation

◆ compare_type

◆ value_type

template<typename Type >
typedef Type* pointer_hash< Type >::value_type
inherited

Member Function Documentation

◆ equal() [1/2]

bool cselib_hasher::equal ( const cselib_val * v,
const key * x_arg )
inlinestatic
The equality test for our hash table.  The first argument V is a table
element (i.e. a cselib_val), while the second arg X is an rtx.  We know
that all callers of htab_find_slot_with_hash will wrap CONST_INTs into a
CONST of an appropriate mode.   

References autoinc_split(), cselib_current_insn, DEBUG_INSN_P, GET_CODE, GET_MODE, ggc_alloc(), elt_loc_list::loc, cselib_val::locs, elt_loc_list::next, NULL, NULL_RTX, promote_debug_loc(), rtx_equal_for_cselib_1(), elt_loc_list::setting_insn, SP_DERIVED_VALUE_P, and cselib_val::val_rtx.

◆ equal() [2/2]

template<typename Type >
bool pointer_hash< Type >::equal ( const value_type & existing,
const compare_type & candidate )
inlinestaticinherited

References candidate(), and ggc_alloc().

◆ hash() [1/2]

hashval_t cselib_hasher::hash ( const cselib_val * v)
inlinestatic
The hash function for our hash table.  The value is always computed with
cselib_hash_rtx when adding an element; this function just extracts the
hash value from a cselib_val structure.   

References cselib_val::hash.

◆ hash() [2/2]

template<typename Type >
hashval_t pointer_hash< Type >::hash ( const value_type & candidate)
inlinestaticinherited

References candidate(), and ggc_alloc().

◆ is_deleted()

template<typename Type >
bool pointer_hash< Type >::is_deleted ( Type * e)
inlinestaticinherited

References ggc_alloc().

◆ is_empty()

template<typename Type >
bool pointer_hash< Type >::is_empty ( Type * e)
inlinestaticinherited

References NULL.

◆ mark_deleted()

template<typename Type >
void pointer_hash< Type >::mark_deleted ( Type *& e)
inlinestaticinherited

References ggc_alloc().

◆ mark_empty()

template<typename Type >
void pointer_hash< Type >::mark_empty ( Type *& e)
inlinestaticinherited

References NULL.

◆ remove()

template<typename Type >
void typed_noop_remove< Type >::remove ( Type & )
inlinestaticinherited
Remove doing nothing.   

Field Documentation

◆ empty_zero_p

template<typename Type >
const bool pointer_hash< Type >::empty_zero_p = true
staticinherited

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