retdec
|
An analysis for obtaining information about a value. More...
#include <value_analysis.h>
Public Member Functions | |
ShPtr< ValueData > | getValueData (ShPtr< Value > value) |
Returns information about the given value. More... | |
Caching | |
void | clearCache () |
Clears the cache of the already cached results. More... | |
void | removeFromCache (ShPtr< Value > value, bool recursive=true) |
Removes the selected value from the cache. More... | |
Access To Alias Analysis | |
void | initAliasAnalysis (ShPtr< Module > module) |
Re-initializes the underlying alias analysis. More... | |
const VarSet & | mayPointTo (ShPtr< Variable > var) const |
Returns the set of variables to which var may point to. More... | |
ShPtr< Variable > | pointsTo (ShPtr< Variable > var) const |
Returns the variable to which var always points. More... | |
bool | mayBePointed (ShPtr< Variable > var) const |
Returns true if a pointer may point to var, false otherwise. More... | |
![]() | |
bool | isInValidState () const |
Returns true if the object is in a valid state, false otherwise. More... | |
void | invalidateState () |
Sets the object's state to invalid. More... | |
void | validateState () |
Sets the object's state to valid. More... | |
![]() | |
Caching (bool enableCaching) | |
void | enableCaching () |
Enables caching. More... | |
void | disableCaching () |
Disables caching. More... | |
void | clearCache () |
Clears the cache of the already cached results. More... | |
void | removeFromCache (const ShPtr< Value > &key) |
Removes the value corresponding to the given key from the cache. More... | |
bool | isCachingEnabled () const |
Returns true if caching is enabled, false otherwise. More... | |
Static Public Member Functions | |
static ShPtr< ValueAnalysis > | create (ShPtr< AliasAnalysis > aliasAnalysis, bool enableCaching=false) |
Creates a new analysis. More... | |
Private Member Functions | |
ValueAnalysis (ShPtr< AliasAnalysis > aliasAnalysis, bool enableCaching=false) | |
Constructs a new visitor. More... | |
void | computeAndStoreIndirectlyUsedVars (ShPtr< DerefOpExpr > expr) |
Computes indirectly used variables in the given dereferencing expression and stores them in appropriate sets of valueData . More... | |
Visitor Interface | |
virtual void | visit (ShPtr< Function > func) override |
virtual void | visit (ShPtr< AssignStmt > stmt) override |
virtual void | visit (ShPtr< BreakStmt > stmt) override |
virtual void | visit (ShPtr< CallStmt > stmt) override |
virtual void | visit (ShPtr< ContinueStmt > stmt) override |
virtual void | visit (ShPtr< EmptyStmt > stmt) override |
virtual void | visit (ShPtr< ForLoopStmt > stmt) override |
virtual void | visit (ShPtr< UForLoopStmt > stmt) override |
virtual void | visit (ShPtr< GotoStmt > stmt) override |
virtual void | visit (ShPtr< IfStmt > stmt) override |
virtual void | visit (ShPtr< ReturnStmt > stmt) override |
virtual void | visit (ShPtr< SwitchStmt > stmt) override |
virtual void | visit (ShPtr< UnreachableStmt > stmt) override |
virtual void | visit (ShPtr< VarDefStmt > stmt) override |
virtual void | visit (ShPtr< WhileLoopStmt > stmt) override |
virtual void | visit (ShPtr< AddOpExpr > expr) override |
virtual void | visit (ShPtr< AddressOpExpr > expr) override |
virtual void | visit (ShPtr< AndOpExpr > expr) override |
virtual void | visit (ShPtr< ArrayIndexOpExpr > expr) override |
virtual void | visit (ShPtr< AssignOpExpr > expr) override |
virtual void | visit (ShPtr< BitAndOpExpr > expr) override |
virtual void | visit (ShPtr< BitOrOpExpr > expr) override |
virtual void | visit (ShPtr< BitShlOpExpr > expr) override |
virtual void | visit (ShPtr< BitShrOpExpr > expr) override |
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
virtual void | visit (ShPtr< CallExpr > expr) override |
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
virtual void | visit (ShPtr< DerefOpExpr > expr) override |
virtual void | visit (ShPtr< DivOpExpr > expr) override |
virtual void | visit (ShPtr< EqOpExpr > expr) override |
virtual void | visit (ShPtr< GtEqOpExpr > expr) override |
virtual void | visit (ShPtr< GtOpExpr > expr) override |
virtual void | visit (ShPtr< LtEqOpExpr > expr) override |
virtual void | visit (ShPtr< LtOpExpr > expr) override |
virtual void | visit (ShPtr< ModOpExpr > expr) override |
virtual void | visit (ShPtr< MulOpExpr > expr) override |
virtual void | visit (ShPtr< NegOpExpr > expr) override |
virtual void | visit (ShPtr< NeqOpExpr > expr) override |
virtual void | visit (ShPtr< NotOpExpr > expr) override |
virtual void | visit (ShPtr< OrOpExpr > expr) override |
virtual void | visit (ShPtr< StructIndexOpExpr > expr) override |
virtual void | visit (ShPtr< SubOpExpr > expr) override |
virtual void | visit (ShPtr< TernaryOpExpr > expr) override |
virtual void | visit (ShPtr< Variable > var) override |
virtual void | visit (ShPtr< BitCastExpr > expr) override |
virtual void | visit (ShPtr< ExtCastExpr > expr) override |
virtual void | visit (ShPtr< FPToIntCastExpr > expr) override |
virtual void | visit (ShPtr< IntToFPCastExpr > expr) override |
virtual void | visit (ShPtr< IntToPtrCastExpr > expr) override |
virtual void | visit (ShPtr< PtrToIntCastExpr > expr) override |
virtual void | visit (ShPtr< TruncCastExpr > expr) override |
virtual void | visit (ShPtr< ConstArray > constant) override |
virtual void | visit (ShPtr< ConstBool > constant) override |
virtual void | visit (ShPtr< ConstFloat > constant) override |
virtual void | visit (ShPtr< ConstInt > constant) override |
virtual void | visit (ShPtr< ConstNullPointer > constant) override |
virtual void | visit (ShPtr< ConstString > constant) override |
virtual void | visit (ShPtr< ConstStruct > constant) override |
virtual void | visit (ShPtr< GlobalVarDef > varDef) override |
virtual void | visit (ShPtr< Function > func) override |
virtual void | visit (ShPtr< AssignStmt > stmt) override |
virtual void | visit (ShPtr< BreakStmt > stmt) override |
virtual void | visit (ShPtr< CallStmt > stmt) override |
virtual void | visit (ShPtr< ContinueStmt > stmt) override |
virtual void | visit (ShPtr< EmptyStmt > stmt) override |
virtual void | visit (ShPtr< ForLoopStmt > stmt) override |
virtual void | visit (ShPtr< UForLoopStmt > stmt) override |
virtual void | visit (ShPtr< GotoStmt > stmt) override |
virtual void | visit (ShPtr< IfStmt > stmt) override |
virtual void | visit (ShPtr< ReturnStmt > stmt) override |
virtual void | visit (ShPtr< SwitchStmt > stmt) override |
virtual void | visit (ShPtr< UnreachableStmt > stmt) override |
virtual void | visit (ShPtr< VarDefStmt > stmt) override |
virtual void | visit (ShPtr< WhileLoopStmt > stmt) override |
virtual void | visit (ShPtr< AddOpExpr > expr) override |
virtual void | visit (ShPtr< AddressOpExpr > expr) override |
virtual void | visit (ShPtr< AndOpExpr > expr) override |
virtual void | visit (ShPtr< ArrayIndexOpExpr > expr) override |
virtual void | visit (ShPtr< AssignOpExpr > expr) override |
virtual void | visit (ShPtr< BitAndOpExpr > expr) override |
virtual void | visit (ShPtr< BitOrOpExpr > expr) override |
virtual void | visit (ShPtr< BitShlOpExpr > expr) override |
virtual void | visit (ShPtr< BitShrOpExpr > expr) override |
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
virtual void | visit (ShPtr< CallExpr > expr) override |
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
virtual void | visit (ShPtr< DerefOpExpr > expr) override |
virtual void | visit (ShPtr< DivOpExpr > expr) override |
virtual void | visit (ShPtr< EqOpExpr > expr) override |
virtual void | visit (ShPtr< GtEqOpExpr > expr) override |
virtual void | visit (ShPtr< GtOpExpr > expr) override |
virtual void | visit (ShPtr< LtEqOpExpr > expr) override |
virtual void | visit (ShPtr< LtOpExpr > expr) override |
virtual void | visit (ShPtr< ModOpExpr > expr) override |
virtual void | visit (ShPtr< MulOpExpr > expr) override |
virtual void | visit (ShPtr< NegOpExpr > expr) override |
virtual void | visit (ShPtr< NeqOpExpr > expr) override |
virtual void | visit (ShPtr< NotOpExpr > expr) override |
virtual void | visit (ShPtr< OrOpExpr > expr) override |
virtual void | visit (ShPtr< StructIndexOpExpr > expr) override |
virtual void | visit (ShPtr< SubOpExpr > expr) override |
virtual void | visit (ShPtr< TernaryOpExpr > expr) override |
virtual void | visit (ShPtr< Variable > var) override |
virtual void | visit (ShPtr< BitCastExpr > expr) override |
virtual void | visit (ShPtr< ExtCastExpr > expr) override |
virtual void | visit (ShPtr< FPToIntCastExpr > expr) override |
virtual void | visit (ShPtr< IntToFPCastExpr > expr) override |
virtual void | visit (ShPtr< IntToPtrCastExpr > expr) override |
virtual void | visit (ShPtr< PtrToIntCastExpr > expr) override |
virtual void | visit (ShPtr< TruncCastExpr > expr) override |
virtual void | visit (ShPtr< ConstArray > constant) override |
virtual void | visit (ShPtr< ConstBool > constant) override |
virtual void | visit (ShPtr< ConstFloat > constant) override |
virtual void | visit (ShPtr< ConstInt > constant) override |
virtual void | visit (ShPtr< ConstNullPointer > constant) override |
virtual void | visit (ShPtr< ConstString > constant) override |
virtual void | visit (ShPtr< ConstStruct > constant) override |
virtual void | visit (ShPtr< ConstSymbol > constant) override |
virtual void | visit (ShPtr< ArrayType > type) override |
virtual void | visit (ShPtr< FloatType > type) override |
virtual void | visit (ShPtr< IntType > type) override |
virtual void | visit (ShPtr< PointerType > type) override |
virtual void | visit (ShPtr< StringType > type) override |
virtual void | visit (ShPtr< StructType > type) override |
virtual void | visit (ShPtr< FunctionType > type) override |
virtual void | visit (ShPtr< VoidType > type) override |
virtual void | visit (ShPtr< UnknownType > type) override |
![]() | |
virtual void | visit (ShPtr< GlobalVarDef > varDef) override |
virtual void | visit (ShPtr< ConstSymbol > constant) override |
virtual void | visit (ShPtr< ArrayType > type) override |
virtual void | visit (ShPtr< FloatType > type) override |
virtual void | visit (ShPtr< IntType > type) override |
virtual void | visit (ShPtr< PointerType > type) override |
virtual void | visit (ShPtr< StringType > type) override |
virtual void | visit (ShPtr< StructType > type) override |
virtual void | visit (ShPtr< FunctionType > type) override |
virtual void | visit (ShPtr< VoidType > type) override |
virtual void | visit (ShPtr< UnknownType > type) override |
OrderedAllVisitor (bool visitSuccessors=true, bool visitNestedStmts=true) | |
Constructs a new visitor. More... | |
virtual void | visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true) |
Visits the given statement, and possibly its successors or nested statements. More... | |
void | restart (bool visitSuccessors=true, bool visitNestedStmts=true) |
"Restarts" the visitor so it is in the state like it was when it was created. More... | |
bool | makeAccessedAndCheckIfAccessed (ShPtr< Type > type) |
Makes the given type accessed. More... | |
![]() | |
virtual | ~Visitor ()=default |
Visitor ()=default | |
![]() | |
NonCopyable (const NonCopyable &)=delete | |
NonCopyable & | operator= (const NonCopyable &)=delete |
NonCopyable ()=default | |
~NonCopyable ()=default | |
Private Attributes | |
ShPtr< AliasAnalysis > | aliasAnalysis |
The used alias analysis. More... | |
ShPtr< ValueData > | valueData |
Information about the currently computed value. More... | |
bool | writing |
Are we writing into a variable? More... | |
bool | removingFromCache |
Are we removing values from the cache? More... | |
![]() | |
ShPtr< Statement > | lastStmt |
Statement that has been accessed as the last one. More... | |
StmtUSet | accessedStmts |
A set of all accessed statements. More... | |
TypeUSet | accessedTypes |
A set of all accessed types. More... | |
bool | visitSuccessors |
Should statements' successor be accessed? More... | |
bool | visitNestedStmts |
Should nested statements be accessed? More... | |
Additional Inherited Members | |
![]() | |
ValidState () | |
Constructs a new valid state. More... | |
![]() | |
void | addToCache (const ShPtr< Value > &key, const ShPtr< ValueData > &value) |
If caching is enabled, associates the given value with key. More... | |
bool | getCachedResult (const ShPtr< Value > &key, ShPtr< ValueData > &value) const |
If caching is enabled, stores the value associated with key into value. More... | |
An analysis for obtaining information about a value.
Use create() to create instances of this class. Instances of this class have reference object semantics.
When you change a module in a way that may affect the results returned by getValueData() when caching is enabled, you have to call invalidate(). This will bring the analysis into an invalid state so other users of a shared analysis will know that they have to validate the analysis before using it. Upon calling clearCache(), the analysis gets validated automatically. If you modify or remove a statement and call removeFromCache(), then you do not have to call invalidate().
|
explicitprivate |
Constructs a new visitor.
See the description of create() for more information.
void retdec::llvmir2hll::ValueAnalysis::clearCache | ( | ) |
Clears the cache of the already cached results.
It also puts the analysis into a valid state.
|
private |
Computes indirectly used variables in the given dereferencing expression and stores them in appropriate sets of valueData
.
|
static |
Creates a new analysis.
[in] | aliasAnalysis | The used alias analysis. |
[in] | enableCaching | If true , it caches the results returned by getValueData() until restartCache() or disableCaching() is called. This may speed up subsequent calls to getValueData() if the same values are passed to getValueData(). |
Returns information about the given value.
Re-initializes the underlying alias analysis.
This function is a delegation to AliasAnalysis::init(). See it for more information.
Returns true
if a pointer may point to var, false
otherwise.
This function is a delegation to AliasAnalysis::mayBePointed(). See it for more information.
Returns the set of variables to which var may point to.
This function is a delegation to AliasAnalysis::mayPointTo(). See it for more information.
Returns the variable to which var always points.
This function is a delegation to AliasAnalysis::pointsTo(). See it for more information.
void retdec::llvmir2hll::ValueAnalysis::removeFromCache | ( | ShPtr< Value > | value, |
bool | recursive = true |
||
) |
Removes the selected value from the cache.
[in] | value | Value to be removed from the cache. |
[in] | recursive | If true , also removes all sub-values of value (e.g. operands) from the cache. |
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
overrideprivate |
|
overrideprivate |
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
|
private |
The used alias analysis.
|
private |
Are we removing values from the cache?
Information about the currently computed value.
|
private |
Are we writing into a variable?