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

#include <store.h>

Collaboration diagram for ana::store:

Public Types

typedef hash_map< const region *, binding_cluster * > cluster_map_t
 

Public Member Functions

 store ()
 
 store (const store &other)
 
 ~store ()
 
storeoperator= (const store &other)
 
bool operator== (const store &other) const
 
bool operator!= (const store &other) const
 
hashval_t hash () const
 
void dump_to_pp (pretty_printer *pp, bool summarize, bool multiline, store_manager *mgr) const
 
void dump (bool simple) const
 
void summarize_to_pp (pretty_printer *pp, bool simple) const
 
void validate () const
 
std::unique_ptr< json::objectto_json () const
 
std::unique_ptr< text_art::tree_widget > make_dump_widget (const text_art::dump_widget_info &dwi, store_manager *mgr) const
 
const svalueget_any_binding (store_manager *mgr, const region *reg) const
 
bool called_unknown_fn_p () const
 
void set_value (store_manager *mgr, const region *lhs_reg, const svalue *rhs_sval, uncertainty_t *uncertainty)
 
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, uncertainty_t *uncertainty, svalue_set *maybe_live_values)
 
void purge_state_involving (const svalue *sval, region_model_manager *sval_mgr)
 
const binding_clusterget_cluster (const region *base_reg) const
 
binding_clusterget_cluster (const region *base_reg)
 
binding_clusterget_or_create_cluster (const region *base_reg)
 
void purge_cluster (const region *base_reg)
 
template<typename T >
void for_each_cluster (void(*cb)(const region *base_reg, T user_data), T user_data) const
 
void mark_as_escaped (const region *base_reg)
 
void on_unknown_fncall (const gcall *call, store_manager *mgr, const conjured_purge &p)
 
bool escaped_p (const region *reg) const
 
void get_representative_path_vars (const region_model *model, svalue_set *visited, const svalue *sval, logger *logger, auto_vec< path_var > *out_pvs) const
 
cluster_map_t::iterator begin () const
 
cluster_map_t::iterator end () const
 
tristate eval_alias (const region *base_reg_a, const region *base_reg_b) const
 
template<typename BindingVisitor >
void for_each_binding (BindingVisitor &v)
 
void canonicalize (store_manager *mgr)
 
void loop_replay_fixup (const store *other_store, region_model_manager *mgr)
 
void replay_call_summary (call_summary_replay &r, const store &summary)
 
void replay_call_summary_cluster (call_summary_replay &r, const store &summary, const region *base_reg)
 
void on_maybe_live_values (const svalue_set &maybe_live_values)
 

Static Public Member Functions

static bool can_merge_p (const store *store_a, const store *store_b, store *out_store, store_manager *mgr, model_merger *merger)
 

Private Member Functions

void remove_overlapping_bindings (store_manager *mgr, const region *reg, uncertainty_t *uncertainty)
 
tristate eval_alias_1 (const region *base_reg_a, const region *base_reg_b) const
 

Private Attributes

cluster_map_t m_cluster_map
 
bool m_called_unknown_fn
 

Detailed Description

The mapping from regions to svalues.
This is actually expressed by subdividing into clusters, to better
handle aliasing.   

Member Typedef Documentation

◆ cluster_map_t

Constructor & Destructor Documentation

◆ store() [1/2]

ana::store::store ( )

◆ store() [2/2]

ana::store::store ( const store & other)

◆ ~store()

ana::store::~store ( )

Member Function Documentation

◆ begin()

cluster_map_t::iterator ana::store::begin ( ) const
inline

◆ called_unknown_fn_p()

bool ana::store::called_unknown_fn_p ( ) const
inline

References m_called_unknown_fn.

◆ can_merge_p()

static bool ana::store::can_merge_p ( const store * store_a,
const store * store_b,
store * out_store,
store_manager * mgr,
model_merger * merger )
static

◆ canonicalize()

void ana::store::canonicalize ( store_manager * mgr)

◆ clobber_region()

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

◆ dump()

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

◆ dump_to_pp()

void ana::store::dump_to_pp ( pretty_printer * pp,
bool summarize,
bool multiline,
store_manager * mgr ) const

◆ end()

cluster_map_t::iterator ana::store::end ( ) const
inline

◆ escaped_p()

bool ana::store::escaped_p ( const region * reg) const

◆ eval_alias()

tristate ana::store::eval_alias ( const region * base_reg_a,
const region * base_reg_b ) const

◆ eval_alias_1()

tristate ana::store::eval_alias_1 ( const region * base_reg_a,
const region * base_reg_b ) const
private

◆ fill_region()

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

◆ for_each_binding()

template<typename BindingVisitor >
void ana::store::for_each_binding ( BindingVisitor & v)
inline

◆ for_each_cluster()

template<typename T >
void ana::store::for_each_cluster ( void(* cb )(const region *base_reg, T user_data),
T user_data ) const
inline

◆ get_any_binding()

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

◆ get_cluster() [1/2]

binding_cluster * ana::store::get_cluster ( const region * base_reg)

◆ get_cluster() [2/2]

const binding_cluster * ana::store::get_cluster ( const region * base_reg) const

◆ get_or_create_cluster()

binding_cluster * ana::store::get_or_create_cluster ( const region * base_reg)

◆ get_representative_path_vars()

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

◆ hash()

hashval_t ana::store::hash ( ) const

◆ loop_replay_fixup()

void ana::store::loop_replay_fixup ( const store * other_store,
region_model_manager * mgr )

◆ make_dump_widget()

std::unique_ptr< text_art::tree_widget > ana::store::make_dump_widget ( const text_art::dump_widget_info & dwi,
store_manager * mgr ) const

◆ mark_as_escaped()

void ana::store::mark_as_escaped ( const region * base_reg)

◆ mark_region_as_unknown()

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

◆ on_maybe_live_values()

void ana::store::on_maybe_live_values ( const svalue_set & maybe_live_values)

◆ on_unknown_fncall()

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

◆ operator!=()

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

◆ operator=()

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

◆ operator==()

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

◆ purge_cluster()

void ana::store::purge_cluster ( const region * base_reg)

◆ purge_region()

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

◆ purge_state_involving()

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

◆ remove_overlapping_bindings()

void ana::store::remove_overlapping_bindings ( store_manager * mgr,
const region * reg,
uncertainty_t * uncertainty )
private

◆ replay_call_summary()

void ana::store::replay_call_summary ( call_summary_replay & r,
const store & summary )

◆ replay_call_summary_cluster()

void ana::store::replay_call_summary_cluster ( call_summary_replay & r,
const store & summary,
const region * base_reg )

◆ set_value()

void ana::store::set_value ( store_manager * mgr,
const region * lhs_reg,
const svalue * rhs_sval,
uncertainty_t * uncertainty )

◆ summarize_to_pp()

void ana::store::summarize_to_pp ( pretty_printer * pp,
bool simple ) const

◆ to_json()

std::unique_ptr< json::object > ana::store::to_json ( ) const

◆ validate()

void ana::store::validate ( ) const

◆ zero_fill_region()

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

Field Documentation

◆ m_called_unknown_fn

bool ana::store::m_called_unknown_fn
private

Referenced by called_unknown_fn_p().

◆ m_cluster_map

cluster_map_t ana::store::m_cluster_map
private

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