GCC Middle and Back End API Reference
ana::binding_cluster Class Reference

#include <store.h>

Collaboration diagram for ana::binding_cluster:

Public Types

typedef hash_map< const binding_key *, const svalue * > map_t
 
typedef map_t::iterator iterator_t
 

Public Member Functions

 binding_cluster (const region *base_region)
 
 binding_cluster (const binding_cluster &other)
 
binding_clusteroperator= (const binding_cluster &other)
 
bool operator== (const binding_cluster &other) const
 
bool operator!= (const binding_cluster &other) const
 
hashval_t hash () const
 
bool symbolic_p () const
 
const regionget_base_region () const
 
void dump_to_pp (pretty_printer *pp, bool simple, bool multiline) const
 
void dump (bool simple) const
 
void validate () const
 
json::objectto_json () const
 
void bind (store_manager *mgr, const region *, const svalue *)
 
void clobber_region (store_manager *mgr, const region *reg)
 
void purge_region (store_manager *mgr, const region *reg)
 
void fill_region (store_manager *mgr, const region *reg, const svalue *sval)
 
void zero_fill_region (store_manager *mgr, const region *reg)
 
void mark_region_as_unknown (store_manager *mgr, const region *reg_to_bind, const region *reg_for_overlap, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
 
void purge_state_involving (const svalue *sval, region_model_manager *sval_mgr)
 
const svalueget_binding (store_manager *mgr, const region *reg) const
 
const svalueget_binding_recursive (store_manager *mgr, const region *reg) const
 
const svalueget_any_binding (store_manager *mgr, const region *reg) const
 
const svaluemaybe_get_compound_binding (store_manager *mgr, const region *reg) const
 
void remove_overlapping_bindings (store_manager *mgr, const region *reg, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
 
template<typename T >
void for_each_value (void(*cb)(const svalue *sval, T user_data), T user_data) const
 
void make_unknown_relative_to (const binding_cluster *other_cluster, store *out_store, store_manager *mgr)
 
void mark_as_escaped ()
 
void on_unknown_fncall (const gcall *call, store_manager *mgr, const conjured_purge &p)
 
void on_asm (const gasm *stmt, store_manager *mgr, const conjured_purge &p)
 
bool escaped_p () const
 
bool touched_p () const
 
bool redundant_p () const
 
bool empty_p () const
 
void get_representative_path_vars (const region_model *model, svalue_set *visited, const region *base_reg, const svalue *sval, auto_vec< path_var > *out_pvs) const
 
const svaluemaybe_get_simple_value (store_manager *mgr) const
 
template<typename BindingVisitor >
void for_each_binding (BindingVisitor &v) const
 
iterator_t begin () const
 
iterator_t end () const
 
const binding_mapget_map () const
 

Static Public Member Functions

static bool can_merge_p (const binding_cluster *cluster_a, const binding_cluster *cluster_b, binding_cluster *out_cluster, store *out_store, store_manager *mgr, model_merger *merger)
 

Private Member Functions

const svalueget_any_value (const binding_key *key) const
 
void bind_compound_sval (store_manager *mgr, const region *reg, const compound_svalue *compound_sval)
 
void bind_key (const binding_key *key, const svalue *sval)
 

Private Attributes

const regionm_base_region
 
binding_map m_map
 
bool m_escaped
 
bool m_touched
 

Friends

class store
 

Detailed Description

Concept: BindingVisitor, for use by binding_cluster::for_each_binding
  and store::for_each_binding.

  Should implement:
    void on_binding (const binding_key *key, const svalue *&sval);
All of the bindings within a store for regions that share the same
base region.   

Member Typedef Documentation

◆ iterator_t

◆ map_t

Constructor & Destructor Documentation

◆ binding_cluster() [1/2]

ana::binding_cluster::binding_cluster ( const region * base_region)

◆ binding_cluster() [2/2]

ana::binding_cluster::binding_cluster ( const binding_cluster & other)

Member Function Documentation

◆ begin()

iterator_t ana::binding_cluster::begin ( ) const
inline

References ana::binding_map::begin(), and m_map.

◆ bind()

void ana::binding_cluster::bind ( store_manager * mgr,
const region * ,
const svalue *  )

◆ bind_compound_sval()

void ana::binding_cluster::bind_compound_sval ( store_manager * mgr,
const region * reg,
const compound_svalue * compound_sval )
private

◆ bind_key()

void ana::binding_cluster::bind_key ( const binding_key * key,
const svalue * sval )
private

◆ can_merge_p()

static bool ana::binding_cluster::can_merge_p ( const binding_cluster * cluster_a,
const binding_cluster * cluster_b,
binding_cluster * out_cluster,
store * out_store,
store_manager * mgr,
model_merger * merger )
static

◆ clobber_region()

void ana::binding_cluster::clobber_region ( store_manager * mgr,
const region * reg )

◆ dump()

void ana::binding_cluster::dump ( bool simple) const

◆ dump_to_pp()

void ana::binding_cluster::dump_to_pp ( pretty_printer * pp,
bool simple,
bool multiline ) const

◆ empty_p()

bool ana::binding_cluster::empty_p ( ) const
inline

◆ end()

iterator_t ana::binding_cluster::end ( ) const
inline

References ana::binding_map::end(), and m_map.

◆ escaped_p()

bool ana::binding_cluster::escaped_p ( ) const

◆ fill_region()

void ana::binding_cluster::fill_region ( store_manager * mgr,
const region * reg,
const svalue * sval )

◆ for_each_binding()

void ana::binding_cluster::for_each_binding ( BindingVisitor & v) const
inline

◆ for_each_value()

template<typename T >
void ana::binding_cluster::for_each_value ( void(*)(const svalue *sval, T user_data) cb,
T user_data ) const
inline

◆ get_any_binding()

const svalue * ana::binding_cluster::get_any_binding ( store_manager * mgr,
const region * reg ) const

◆ get_any_value()

const svalue * ana::binding_cluster::get_any_value ( const binding_key * key) const
private

◆ get_base_region()

const region * ana::binding_cluster::get_base_region ( ) const
inline

References m_base_region.

◆ get_binding()

const svalue * ana::binding_cluster::get_binding ( store_manager * mgr,
const region * reg ) const

◆ get_binding_recursive()

const svalue * ana::binding_cluster::get_binding_recursive ( store_manager * mgr,
const region * reg ) const

◆ get_map()

const binding_map & ana::binding_cluster::get_map ( ) const
inline

References m_map.

◆ get_representative_path_vars()

void ana::binding_cluster::get_representative_path_vars ( const region_model * model,
svalue_set * visited,
const region * base_reg,
const svalue * sval,
auto_vec< path_var > * out_pvs ) const

◆ hash()

hashval_t ana::binding_cluster::hash ( ) const

◆ make_unknown_relative_to()

void ana::binding_cluster::make_unknown_relative_to ( const binding_cluster * other_cluster,
store * out_store,
store_manager * mgr )

◆ mark_as_escaped()

void ana::binding_cluster::mark_as_escaped ( )

◆ mark_region_as_unknown()

void ana::binding_cluster::mark_region_as_unknown ( store_manager * mgr,
const region * reg_to_bind,
const region * reg_for_overlap,
uncertainty_t * uncertainty,
svalue_set * maybe_live_values )

◆ maybe_get_compound_binding()

const svalue * ana::binding_cluster::maybe_get_compound_binding ( store_manager * mgr,
const region * reg ) const

◆ maybe_get_simple_value()

const svalue * ana::binding_cluster::maybe_get_simple_value ( store_manager * mgr) const

◆ on_asm()

void ana::binding_cluster::on_asm ( const gasm * stmt,
store_manager * mgr,
const conjured_purge & p )

◆ on_unknown_fncall()

void ana::binding_cluster::on_unknown_fncall ( const gcall * call,
store_manager * mgr,
const conjured_purge & p )

◆ operator!=()

bool ana::binding_cluster::operator!= ( const binding_cluster & other) const
inline

◆ operator=()

binding_cluster & ana::binding_cluster::operator= ( const binding_cluster & other)

◆ operator==()

bool ana::binding_cluster::operator== ( const binding_cluster & other) const

◆ purge_region()

void ana::binding_cluster::purge_region ( store_manager * mgr,
const region * reg )

◆ purge_state_involving()

void ana::binding_cluster::purge_state_involving ( const svalue * sval,
region_model_manager * sval_mgr )

◆ redundant_p()

bool ana::binding_cluster::redundant_p ( ) const

◆ remove_overlapping_bindings()

void ana::binding_cluster::remove_overlapping_bindings ( store_manager * mgr,
const region * reg,
uncertainty_t * uncertainty,
svalue_set * maybe_live_values )

◆ symbolic_p()

bool ana::binding_cluster::symbolic_p ( ) const

◆ to_json()

json::object * ana::binding_cluster::to_json ( ) const

◆ touched_p()

bool ana::binding_cluster::touched_p ( ) const
inline

References m_touched.

◆ validate()

void ana::binding_cluster::validate ( ) const

◆ zero_fill_region()

void ana::binding_cluster::zero_fill_region ( store_manager * mgr,
const region * reg )

Friends And Related Symbol Documentation

◆ store

friend class store
friend

Field Documentation

◆ m_base_region

const region* ana::binding_cluster::m_base_region
private

Referenced by get_base_region().

◆ m_escaped

bool ana::binding_cluster::m_escaped
private

◆ m_map

binding_map ana::binding_cluster::m_map
private

◆ m_touched

bool ana::binding_cluster::m_touched
private

Referenced by touched_p().


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