SVF
|
#include <Andersen.h>
Public Member Functions | |
AndersenHLCD (PAG *_pag, PTATY type=AndersenHLCD_WPA) | |
![]() | |
AndersenHCD (PAG *_pag, PTATY type=AndersenHCD_WPA) | |
![]() | |
Andersen (PAG *_pag, PTATY type=Andersen_WPA, bool alias_check=true) | |
Constructor. More... | |
virtual | ~Andersen () |
Destructor. More... | |
virtual void | finalize () |
Finalize analysis. More... | |
void | resetData () |
Reset data. More... | |
virtual const PointsTo & | getPts (NodeID id) |
Operation of points-to set. More... | |
virtual bool | unionPts (NodeID id, const PointsTo &target) |
virtual bool | unionPts (NodeID id, NodeID ptd) |
void | dumpTopLevelPtsTo () |
void | setPWCOpt (bool flag) |
bool | mergePWC () const |
void | setDiffOpt (bool flag) |
bool | enableDiff () const |
NodeID | sccRepNode (NodeID id) const |
SCC methods. More... | |
NodeBS & | sccSubNodes (NodeID repId) |
![]() | |
AndersenBase (PAG *_pag, PTATY type=Andersen_BASE, bool alias_check=true) | |
Constructor. More... | |
virtual | ~AndersenBase () |
Destructor. More... | |
virtual void | analyze () override |
Andersen analysis. More... | |
ConstraintGraph * | getConstraintGraph () |
Get constraint graph. More... | |
void | printStat () |
dump statistics More... | |
virtual void | normalizePointsTo () override |
void | cleanConsCG (NodeID id) |
remove redundant gepnodes in constraint graph More... | |
![]() | |
BVDataPTAImpl (PAG *pag, PointerAnalysis::PTATY type, bool alias_check=true) | |
Constructor. More... | |
virtual | ~BVDataPTAImpl () |
Destructor. More... | |
void | destroy () |
Release memory. More... | |
virtual void | clearPts (NodeID id, NodeID element) |
Remove element from the points-to set of id. More... | |
virtual void | clearFullPts (NodeID id) |
Clear points-to set of id. More... | |
virtual void | clearAllPts () |
Clear all data. More... | |
virtual void | expandFIObjs (const PointsTo &pts, PointsTo &expandedPts) |
Expand FI objects. More... | |
virtual AliasResult | alias (const MemoryLocation &LocA, const MemoryLocation &LocB) |
Interface expose to users of our pointer analysis, given Location infos. More... | |
virtual AliasResult | alias (const Value *V1, const Value *V2) |
Interface expose to users of our pointer analysis, given Value infos. More... | |
virtual AliasResult | alias (NodeID node1, NodeID node2) |
Interface expose to users of our pointer analysis, given PAGNodeID. More... | |
virtual AliasResult | alias (const PointsTo &pts1, const PointsTo &pts2) |
Interface expose to users of our pointer analysis, given two pts. More... | |
virtual const NodeBS & | getRevPts (NodeID nodeId) |
virtual bool | addPts (NodeID id, NodeID ptd) |
virtual void | writeToFile (const std::string &filename) |
Interface for analysis result storage on filesystem. More... | |
virtual bool | readFromFile (const std::string &filename) |
virtual void | dumpCPts () |
dump and debug, print out conditional pts More... | |
virtual void | dumpAllPts () |
![]() | |
Size_t | getNumOfResolvedIndCallEdge () const |
Return number of resolved indirect call edges. More... | |
PTACallGraph * | getPTACallGraph () const |
Return call graph. More... | |
CallGraphSCC * | getCallGraphSCC () const |
Return call graph SCC. More... | |
PointerAnalysis (PAG *pag, PTATY ty=Default_PTA, bool alias_check=true) | |
Constructor. More... | |
PTATY | getAnalysisTy () const |
Type of pointer analysis. More... | |
PTAImplTy | getImplTy () const |
Return implementation type of the pointer analysis. More... | |
PTAStat * | getStat () const |
Get PTA stat. More... | |
SVFModule * | getModule () const |
Module. More... | |
OrderedNodeSet & | getAllValidPtrs () |
Get all Valid Pointers for resolution. More... | |
virtual | ~PointerAnalysis () |
Destructor. More... | |
virtual void | computeDDAPts (NodeID) |
Compute points-to results on-demand, overridden by derived classes. More... | |
virtual void | clearPts () |
Clear points-to data. More... | |
void | printIndCSTargets (const CallBlockNode *cs, const FunctionSet &targets) |
Print targets of a function pointer. More... | |
void | dumpStat () |
Dump the statistics. More... | |
bool | printStat () |
Whether print statistics. More... | |
void | disablePrintStat () |
Whether print statistics. More... | |
virtual void | resolveIndCalls (const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges, LLVMCallGraph *callgraph=nullptr) |
Resolve indirect call edges. More... | |
bool | matchArgs (const CallBlockNode *cs, const SVFFunction *callee) |
Match arguments for callsite at caller and callee. More... | |
CommonCHGraph * | getCHGraph () const |
get CHGraph More... | |
void | getVFnsFromCHA (const CallBlockNode *cs, VFunSet &vfns) |
void | getVFnsFromPts (const CallBlockNode *cs, const PointsTo &target, VFunSet &vfns) |
void | connectVCallToVFns (const CallBlockNode *cs, const VFunSet &vfns, CallEdgeMap &newEdges) |
virtual void | resolveCPPIndCalls (const CallBlockNode *cs, const PointsTo &target, CallEdgeMap &newEdges) |
Resolve cpp indirect call edges. More... | |
const TypeSystem * | getTypeSystem () const |
get TypeSystem More... | |
PAG * | getPAG () const |
virtual void | dumpPts (NodeID ptr, const PointsTo &pts) |
void | printIndCSTargets () |
void | dumpAllTypes () |
bool | containBlackHoleNode (const PointsTo &pts) |
Determine whether a points-to contains a black hole or constant node. More... | |
bool | containConstantNode (const PointsTo &pts) |
virtual bool | isBlkObjOrConstantObj (NodeID ptd) const |
bool | isNonPointerObj (NodeID ptd) const |
bool | isHeapMemObj (NodeID id) const |
Whether this object is heap or array. More... | |
bool | isArrayMemObj (NodeID id) const |
bool | isFIObjNode (NodeID id) const |
NodeID | getBaseObjNode (NodeID id) |
NodeID | getFIObjNode (NodeID id) |
NodeID | getGepObjNode (NodeID id, const LocationSet &ls) |
virtual const NodeBS & | getAllFieldsObjNode (NodeID id) |
void | setObjFieldInsensitive (NodeID id) |
bool | isFieldInsensitive (NodeID id) const |
CallEdgeMap & | getIndCallMap () |
Get callees from an indirect callsite. More... | |
bool | hasIndCSCallees (const CallBlockNode *cs) const |
const FunctionSet & | getIndCSCallees (const CallBlockNode *cs) const |
void | callGraphSCCDetection () |
CallGraph SCC related methods. More... | |
NodeID | getCallGraphSCCRepNode (NodeID id) const |
Get SCC rep node of a SVFG node. More... | |
bool | inSameCallGraphSCC (const SVFFunction *fun1, const SVFFunction *fun2) |
Return TRUE if this edge is inside a CallGraph SCC, i.e., src node and dst node are in the same SCC on the SVFG. More... | |
bool | isInRecursion (const SVFFunction *fun) const |
bool | isLocalVarInRecursiveFun (NodeID id) const |
Whether a local variable is in function recursions. More... | |
![]() | |
AndersenLCD (PAG *_pag, PTATY type=AndersenLCD_WPA) | |
Static Public Member Functions | |
static AndersenHLCD * | createAndersenHLCD (PAG *_pag) |
Create an singleton instance directly instead of invoking llvm pass manager. More... | |
static void | releaseAndersenHLCD () |
![]() | |
static AndersenHCD * | createAndersenHCD (PAG *_pag) |
Create an singleton instance directly instead of invoking llvm pass manager. More... | |
static void | releaseAndersenHCD () |
![]() | |
static bool | classof (const Andersen *) |
Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
static bool | classof (const PointerAnalysis *pta) |
![]() | |
static bool | classof (const AndersenBase *) |
Methods for support type inquiry through isa, cast, and dyn_cast: More... | |
static bool | classof (const PointerAnalysis *pta) |
![]() | |
static bool | classof (const PointerAnalysis *pta) |
![]() | |
static AndersenLCD * | createAndersenLCD (PAG *_pag) |
Create an singleton instance directly instead of invoking llvm pass manager. More... | |
static void | releaseAndersenLCD () |
Protected Member Functions | |
void | initialize () |
void | solveWorklist () |
void | handleCopyGep (ConstraintNode *node) |
void | mergeSCC (NodeID nodeId) |
bool | mergeSrcToTgt (NodeID nodeId, NodeID newRepId) |
![]() | |
void | mergeNodeAndPts (NodeID node, NodeID tgt) |
bool | hasOfflineRep (NodeID nodeId) const |
NodeID | getOfflineRep (NodeID nodeId) |
bool | isaMergedNode (NodeID node) const |
void | setMergedNode (NodeID node) |
![]() | |
void | heapAllocatorViaIndCall (CallSite cs, NodePairSet &cpySrcNodes) |
virtual void | computeDiffPts (NodeID id) |
Handle diff points-to set. More... | |
virtual const PointsTo & | getDiffPts (NodeID id) |
void | updatePropaPts (NodeID dstId, NodeID srcId) |
Handle propagated points-to set. More... | |
void | clearPropaPts (NodeID src) |
virtual void | initWorklist () |
virtual void | setSCCEdgeFlag (ConstraintNode::SCCEdgeFlag f) |
virtual void | processNode (NodeID nodeId) |
Override WPASolver function in order to use the default solver. More... | |
virtual bool | addCopyEdge (NodeID src, NodeID dst) |
Add copy edge on constraint graph. More... | |
virtual bool | updateCallGraph (const CallSiteToFunPtrMap &callsites) |
Update call graph for the input indirect callsites. More... | |
void | connectCaller2CalleeParams (CallSite cs, const SVFFunction *F, NodePairSet &cpySrcNodes) |
Connect formal and actual parameters for indirect callsites. More... | |
virtual void | mergeNodeToRep (NodeID nodeId, NodeID newRepId) |
Merge sub node to its rep. More... | |
void | updateNodeRepAndSubs (NodeID nodeId, NodeID newRepId) |
Updates subnodes of its rep, and rep node of its subs. More... | |
void | sanitizePts () |
Sanitize pts for field insensitive objects. More... | |
virtual const std::string | PTAName () const |
Get PTA name. More... | |
virtual bool | matchType (NodeID, NodeID, const NormalGepCGEdge *) |
match types for Gep Edges More... | |
virtual void | addTypeForGepObjNode (NodeID, const NormalGepCGEdge *) |
add type for newly created GepObjNode More... | |
void | processAllAddr () |
handling various constraints More... | |
virtual bool | processLoad (NodeID node, const ConstraintEdge *load) |
virtual bool | processStore (NodeID node, const ConstraintEdge *load) |
virtual bool | processCopy (NodeID node, const ConstraintEdge *edge) |
virtual bool | processGep (NodeID node, const GepCGEdge *edge) |
virtual void | handleLoadStore (ConstraintNode *node) |
virtual void | processAddr (const AddrCGEdge *addr) |
virtual bool | processGepPts (const PointsTo &pts, const GepCGEdge *edge) |
void | mergeSccNodes (NodeID repNodeId, const NodeBS &subNodes) |
Merge sub node in a SCC cycle to their rep node. More... | |
void | mergeSccCycle () |
void | collapsePWCNode (NodeID nodeId) |
Collapse a field object into its base for field insensitive anlaysis. More... | |
void | collapseFields () |
bool | collapseNodePts (NodeID nodeId) |
bool | collapseField (NodeID nodeId) |
![]() | |
WPASolver () | |
Constructor. More... | |
virtual | ~WPASolver () |
Destructor. More... | |
SCC * | getSCCDetector () const |
Get SCC detector. More... | |
virtual NodeStack & | SCCDetect (NodeSet &candidates) |
GNODE * | Node (NodeID id) |
Get node on the graph. More... | |
NodeID | Node_Index (GNODE node) |
Get node ID. More... | |
const GraphType | graph () |
Get/Set graph methods. More... | |
void | setGraph (GraphType g) |
virtual void | propagate (GNODE *v) |
virtual bool | propFromSrcToDst (GEDGE *) |
Propagate information from source to destination node, to be implemented in the child class. More... | |
NodeID | popFromWorklist () |
Worklist operations. More... | |
virtual void | pushIntoWorklist (NodeID id) |
bool | isWorklistEmpty () |
bool | isInWorklist (NodeID id) |
![]() | |
PTDataTy * | getPTDataTy () const |
Get points-to data structure. More... | |
DiffPTDataTy * | getDiffPTDataTy () const |
DFPTDataTy * | getDFPTDataTy () const |
MutDFPTDataTy * | getMutDFPTDataTy () const |
VersionedPTDataTy * | getVersionedPTDataTy () const |
virtual void | onTheFlyCallGraphSolve (const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges) |
On the fly call graph construction. More... | |
![]() | |
const CallSiteToFunPtrMap & | getIndirectCallsites () const |
Return all indirect callsites. More... | |
NodeID | getFunPtr (const CallBlockNode *cs) const |
Return function pointer PAGNode at a callsite cs. More... | |
bool | dumpGraph () |
Whether to dump the graph for debugging purpose. More... | |
void | resetObjFieldSensitive () |
Reset all object node as field-sensitive. More... | |
virtual void | validateTests () |
Alias check functions to verify correctness of pointer analysis. More... | |
virtual void | validateSuccessTests (std::string fun) |
virtual void | validateExpectedFailureTests (std::string fun) |
![]() | |
virtual void | mergeSCC () |
NodeStack & | SCCDetect () |
bool | hasLCDCandidate () const |
void | cleanLCDCandidate () |
void | addLCDCandidate (NodeID nodeId) |
bool | isMetEdge (ConstraintEdge *edge) const |
void | addMetEdge (ConstraintEdge *edge) |
Static Private Attributes | |
static AndersenHLCD * | hlcdAndersen = nullptr |
Additional Inherited Members | |
![]() | |
typedef SCCDetection< OfflineConsG * > | OSCC |
![]() | |
typedef SCCDetection< ConstraintGraph * > | CGSCC |
typedef OrderedMap< CallSite, NodeID > | CallSite2DummyValPN |
![]() | |
typedef llvm::GraphTraits< GraphType > | GTraits |
Define the GTraits and node iterator for printing. More... | |
typedef GTraits::NodeRef | GNODE |
typedef GTraits::EdgeType | GEDGE |
typedef GTraits::ChildIteratorType | child_iterator |
typedef SCCDetection< GraphType > | SCC |
typedef FIFOWorkList< NodeID > | WorkList |
![]() | |
typedef PTData< NodeID, NodeBS, NodeID, PointsTo > | PTDataTy |
typedef MutablePTData< NodeID, NodeBS, NodeID, PointsTo > | MutPTDataTy |
typedef DiffPTData< NodeID, NodeBS, NodeID, PointsTo > | DiffPTDataTy |
typedef MutableDiffPTData< NodeID, NodeBS, NodeID, PointsTo > | MutDiffPTDataTy |
typedef DFPTData< NodeID, NodeBS, NodeID, PointsTo > | DFPTDataTy |
typedef MutableDFPTData< NodeID, NodeBS, NodeID, PointsTo > | MutDFPTDataTy |
typedef IncMutableDFPTData< NodeID, NodeBS, NodeID, PointsTo > | IncMutDFPTDataTy |
typedef VersionedPTData< NodeID, NodeBS, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > | VersionedPTDataTy |
typedef MutableVersionedPTData< NodeID, NodeBS, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > | MutVersionedPTDataTy |
![]() | |
enum | PTATY { Andersen_BASE, Andersen_WPA, AndersenLCD_WPA, AndersenHCD_WPA, AndersenHLCD_WPA, AndersenSCD_WPA, AndersenSFR_WPA, AndersenWaveDiff_WPA, AndersenWaveDiffWithType_WPA, Steensgaard_WPA, CSCallString_WPA, CSSummary_WPA, FSDATAFLOW_WPA, FSSPARSE_WPA, FSTBHC_WPA, VFS_WPA, FSCS_WPA, FSCSPS_WPA, ADAPTFSCS_WPA, ADAPTFSCSPS_WPA, TypeCPP_WPA, FieldS_DDA, FlowS_DDA, PathS_DDA, Cxt_DDA, Default_PTA } |
Pointer analysis type list. More... | |
enum | PTAImplTy { BaseImpl, BVDataImpl, CondImpl } |
Implementation type: BVDataPTAImpl or CondPTAImpl. More... | |
typedef llvm::AliasAnalysis | AliasAnalysis |
Indirect call edges type, map a callsite to a set of callees. More... | |
typedef Set< const CallBlockNode * > | CallSiteSet |
typedef PAG::CallSiteToFunPtrMap | CallSiteToFunPtrMap |
typedef Set< const SVFFunction * > | FunctionSet |
typedef OrderedMap< const CallBlockNode *, FunctionSet > | CallEdgeMap |
typedef SCCDetection< PTACallGraph * > | CallGraphSCC |
typedef Set< const GlobalValue * > | VTableSet |
typedef Set< const SVFFunction * > | VFunSet |
![]() | |
NodeBS | redundantGepNodes |
![]() | |
u32_t | numOfIteration |
num of iterations during constaint solving More... | |
![]() | |
static Size_t | numOfProcessedAddr = 0 |
Statistics. More... | |
static Size_t | numOfProcessedCopy = 0 |
Number of processed Addr edge. More... | |
static Size_t | numOfProcessedGep = 0 |
Number of processed Copy edge. More... | |
static Size_t | numOfProcessedLoad = 0 |
Number of processed Gep edge. More... | |
static Size_t | numOfProcessedStore = 0 |
Number of processed Load edge. More... | |
static Size_t | numOfSfrs = 0 |
Number of processed Store edge. More... | |
static Size_t | numOfFieldExpand = 0 |
static Size_t | numOfSCCDetection = 0 |
static double | timeOfSCCDetection = 0 |
static double | timeOfSCCMerges = 0 |
static double | timeOfCollapse = 0 |
static Size_t | AveragePointsToSetSize = 0 |
static Size_t | MaxPointsToSetSize = 0 |
static double | timeOfProcessCopyGep = 0 |
static double | timeOfProcessLoadStore = 0 |
static double | timeOfUpdateCallGraph = 0 |
![]() | |
static const std::string | aliasTestMayAlias = "MAYALIAS" |
static const std::string | aliasTestMayAliasMangled = "_Z8MAYALIASPvS_" |
static const std::string | aliasTestNoAlias = "NOALIAS" |
static const std::string | aliasTestNoAliasMangled = "_Z7NOALIASPvS_" |
static const std::string | aliasTestPartialAlias = "PARTIALALIAS" |
static const std::string | aliasTestPartialAliasMangled = "_Z12PARTIALALIASPvS_" |
static const std::string | aliasTestMustAlias = "MUSTALIAS" |
static const std::string | aliasTestMustAliasMangled = "_Z9MUSTALIASPvS_" |
static const std::string | aliasTestFailMayAlias = "EXPECTEDFAIL_MAYALIAS" |
static const std::string | aliasTestFailMayAliasMangled = "_Z21EXPECTEDFAIL_MAYALIASPvS_" |
static const std::string | aliasTestFailNoAlias = "EXPECTEDFAIL_NOALIAS" |
static const std::string | aliasTestFailNoAliasMangled = "_Z20EXPECTEDFAIL_NOALIASPvS_" |
![]() | |
CallSite2DummyValPN | callsite2DummyValPN |
Map an instruction to a dummy obj which created at an indirect callsite, which invokes a heap allocator. More... | |
bool | pwcOpt |
bool | diffOpt |
![]() | |
ConstraintGraph * | consCG |
Constraint Graph. More... | |
![]() | |
bool | reanalyze |
Reanalyze if any constraint value changed. More... | |
u32_t | iterationForPrintStat |
print out statistics for i-th iteration More... | |
GraphType | _graph |
Graph. More... | |
SCC * | scc |
SCC. More... | |
WorkList | worklist |
Worklist for resolution. More... | |
![]() | |
SVFModule * | svfMod |
Module. More... | |
PTATY | ptaTy |
Pointer analysis Type. More... | |
PTAImplTy | ptaImplTy |
PTA implementation type. More... | |
PTAStat * | stat |
Statistics. More... | |
PTACallGraph * | ptaCallGraph |
Call graph used for pointer analysis. More... | |
CallGraphSCC * | callGraphSCC |
SCC for CallGraph. More... | |
ICFG * | icfg |
Interprocedural control-flow graph. More... | |
TypeSystem * | typeSystem |
TypeSystem. More... | |
bool | print_stat |
User input flags. More... | |
bool | alias_validation |
Flag for validating points-to/alias results. More... | |
u32_t | OnTheFlyIterBudgetForStat |
Flag for iteration budget for on-the-fly statistics. More... | |
![]() | |
static PAG * | pag = nullptr |
PAG. More... | |
static CommonCHGraph * | chgraph = nullptr |
CHGraph. More... | |
Hybrid Lazy Cycle Detection Based Andersen Analysis
Definition at line 711 of file Andersen.h.
|
inline |
Definition at line 718 of file Andersen.h.
|
inlinestatic |
Create an singleton instance directly instead of invoking llvm pass manager.
Definition at line 724 of file Andersen.h.
|
inlineprotectedvirtual |
Process copy and gep edges
Reimplemented from SVF::AndersenLCD.
Definition at line 751 of file Andersen.h.
|
inlineprotectedvirtual |
AndersenHCD initilizer, including initilization of PAG, constraint graph and offline constraint graph
Reimplemented from SVF::AndersenHCD.
Definition at line 743 of file Andersen.h.
|
protectedvirtual |
Collapse nodes and fields based on the result of both offline and online SCC detection
Reimplemented from SVF::AndersenHCD.
Definition at line 41 of file AndersenHLCD.cpp.
merge nodeId to newRepId. Return true if the newRepId is a PWC node
union pts of node to rep
move the edges from node to rep, and remove the node
set rep and sub relations
Reimplemented from SVF::AndersenLCD.
Definition at line 756 of file Andersen.h.
|
inlinestatic |
Definition at line 735 of file Andersen.h.
|
inlineprotectedvirtual |
|
staticprivate |
Definition at line 715 of file Andersen.h.