7 #ifndef RETDEC_LLVMIR2HLL_ANALYSIS_VAR_USES_VISITOR_H
8 #define RETDEC_LLVMIR2HLL_ANALYSIS_VAR_USES_VISITOR_H
56 bool doNotIncludeFirstUse =
false);
A visitor that visits everything in an ordered way.
Definition: ordered_all_visitor.h:44
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
A visitor for obtaining the uses of variables in a function.
Definition: var_uses_visitor.h:53
std::map< ShPtr< Function >, VarUsesMap > FuncVarUsesMap
Mapping of a function into uses of its variables.
Definition: var_uses_visitor.h:80
void enableCaching()
Enables caching.
Definition: var_uses_visitor.cpp:136
std::map< ShPtr< Variable >, ShPtr< VarUses > > VarUsesMap
Mapping of a variable into its uses.
Definition: var_uses_visitor.h:77
void precomputeEverything(ShPtr< Module > module)
Pre-computes uses of variables in all functions of the given module.
Definition: var_uses_visitor.cpp:355
bool precomputingHasBeenDone
Has everything been successfully precomputed?
Definition: var_uses_visitor.h:125
bool cachingEnabled
Is caching enabled?
Definition: var_uses_visitor.h:128
bool precomputing
Are we pre-computing everything?
Definition: var_uses_visitor.h:122
VarUsesVisitor(ShPtr< ValueAnalysis > va, bool enableCaching=false)
Constructs a new provider.
Definition: var_uses_visitor.cpp:43
void stmtHasBeenAdded(ShPtr< Statement > stmt, ShPtr< Function > func)
Forces cache update (a new statement has been added to a function).
Definition: var_uses_visitor.cpp:183
ShPtr< ValueAnalysis > va
Analysis of values.
Definition: var_uses_visitor.h:116
bool isUsed(ShPtr< Variable > var, ShPtr< Function > func, bool doNotIncludeFirstUse=false)
Returns true if var is used in func, false otherwise.
Definition: var_uses_visitor.cpp:66
ShPtr< VarUses > getUses(ShPtr< Variable > var, ShPtr< Function > func)
Returns all uses of var in func.
Definition: var_uses_visitor.cpp:103
bool isCachingEnabled() const
Returns true if caching is enabled, false otherwise.
Definition: var_uses_visitor.cpp:162
ShPtr< VarUses > varUses
Uses of var.
Definition: var_uses_visitor.h:119
void clearCache()
Clears the cache of the already cached results.
Definition: var_uses_visitor.cpp:154
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
ShPtr< Variable > var
Variable whose uses are obtained.
Definition: var_uses_visitor.h:110
void disableCaching()
Disables caching.
Definition: var_uses_visitor.cpp:146
void stmtHasBeenRemoved(ShPtr< Statement > stmt, ShPtr< Function > func)
Forces cache update (the given statement in the given function has been removed).
Definition: var_uses_visitor.cpp:299
void dumpCache()
Dumps cache to standard error.
Definition: var_uses_visitor.cpp:440
FuncVarUsesMap cache
Cache.
Definition: var_uses_visitor.h:131
void findAndStoreUses(ShPtr< Statement > stmt)
Finds uses of var in the given statement and stores them.
Definition: var_uses_visitor.cpp:392
ShPtr< Function > func
Function whose body is being traversed.
Definition: var_uses_visitor.h:113
static ShPtr< VarUsesVisitor > create(ShPtr< ValueAnalysis > va, bool enableCaching=false, ShPtr< Module > module=nullptr)
Creates a new visitor.
Definition: var_uses_visitor.cpp:335
void stmtHasBeenChanged(ShPtr< Statement > stmt, ShPtr< Function > func)
Forces cache update (the given statement in the given function has been altered).
Definition: var_uses_visitor.cpp:248
Representation of uses of a variable.
Definition: var_uses_visitor.h:24
ShPtr< Variable > var
Variable whose uses this class contains.
Definition: var_uses_visitor.h:31
VarUses(ShPtr< Variable > var=nullptr, ShPtr< Function > func=nullptr, StmtSet dirUses=StmtSet(), StmtSet indirUses=StmtSet())
Definition: var_uses_visitor.h:26
StmtSet dirUses
Direct uses of var.
Definition: var_uses_visitor.h:37
StmtSet indirUses
Indirect uses of var (may or must).
Definition: var_uses_visitor.h:40
ShPtr< Function > func
Function which contains the uses.
Definition: var_uses_visitor.h:34
A mixin to make classes non-copyable.
Definition: non_copyable.h:27
ShPtr< Module > module
The current module.
Definition: hll_writer.cpp:100
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
std::set< ShPtr< Statement > > StmtSet
Set of statements.
Definition: types.h:69
Definition: archive_wrapper.h:19
A mixin to make classes non-copyable.
A visitor that visits everything in an ordered way.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.
An analysis for obtaining information about a value.