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

Public Types

typedef cselib_val value_type
typedef rtx_def compare_type

Static Public Member Functions

static hashval_t hash (const value_type *)
static bool equal (const value_type *, const compare_type *)
static void remove (cselib_val *p)

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

Member Function Documentation

bool cselib_hasher::equal ( const value_type v,
const compare_type x_arg 
   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.  
     Unwrap X if necessary.  
     We don't guarantee that distinct rtx's have different hash values,
     so we need to do a comparison.  
hashval_t cselib_hasher::hash ( const value_type v)
   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.  
static void typed_noop_remove< cselib_val >::remove ( cselib_val p)
   Remove doing nothing.  

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