SVF
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Attributes | Static Private Attributes | List of all members
SVF::AndersenHCD Class Reference

#include <Andersen.h>

Inheritance diagram for SVF::AndersenHCD:
SVF::Andersen SVF::AndersenBase SVF::WPASolver< GraphType > SVF::BVDataPTAImpl SVF::PointerAnalysis SVF::AndersenHLCD

Public Types

typedef SCCDetection< OfflineConsG * > OSCC
 
- Public Types inherited from SVF::Andersen
typedef SCCDetection< ConstraintGraph * > CGSCC
 
typedef OrderedMap< CallSite, NodeIDCallSite2DummyValPN
 
- Public Types inherited from SVF::WPASolver< GraphType >
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< NodeIDWorkList
 
- Public Types inherited from SVF::BVDataPTAImpl
typedef PTData< NodeID, NodeBS, NodeID, PointsToPTDataTy
 
typedef MutablePTData< NodeID, NodeBS, NodeID, PointsToMutPTDataTy
 
typedef DiffPTData< NodeID, NodeBS, NodeID, PointsToDiffPTDataTy
 
typedef MutableDiffPTData< NodeID, NodeBS, NodeID, PointsToMutDiffPTDataTy
 
typedef DFPTData< NodeID, NodeBS, NodeID, PointsToDFPTDataTy
 
typedef MutableDFPTData< NodeID, NodeBS, NodeID, PointsToMutDFPTDataTy
 
typedef IncMutableDFPTData< NodeID, NodeBS, NodeID, PointsToIncMutDFPTDataTy
 
typedef VersionedPTData< NodeID, NodeBS, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > VersionedPTDataTy
 
typedef MutableVersionedPTData< NodeID, NodeBS, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > MutVersionedPTDataTy
 
- Public Types inherited from SVF::PointerAnalysis
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 *, FunctionSetCallEdgeMap
 
typedef SCCDetection< PTACallGraph * > CallGraphSCC
 
typedef Set< const GlobalValue * > VTableSet
 
typedef Set< const SVFFunction * > VFunSet
 

Public Member Functions

 AndersenHCD (PAG *_pag, PTATY type=AndersenHCD_WPA)
 
- Public Member Functions inherited from SVF::Andersen
 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 PointsTogetPts (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...
 
NodeBSsccSubNodes (NodeID repId)
 
- Public Member Functions inherited from SVF::AndersenBase
 AndersenBase (PAG *_pag, PTATY type=Andersen_BASE, bool alias_check=true)
 Constructor. More...
 
virtual ~AndersenBase ()
 Destructor. More...
 
virtual void analyze () override
 Andersen analysis. More...
 
ConstraintGraphgetConstraintGraph ()
 Get constraint graph. More...
 
void printStat ()
 dump statistics More...
 
virtual void normalizePointsTo () override
 
void cleanConsCG (NodeID id)
 remove redundant gepnodes in constraint graph More...
 
- Public Member Functions inherited from SVF::BVDataPTAImpl
 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 NodeBSgetRevPts (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 ()
 
- Public Member Functions inherited from SVF::PointerAnalysis
Size_t getNumOfResolvedIndCallEdge () const
 Return number of resolved indirect call edges. More...
 
PTACallGraphgetPTACallGraph () const
 Return call graph. More...
 
CallGraphSCCgetCallGraphSCC () 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...
 
PTAStatgetStat () const
 Get PTA stat. More...
 
SVFModulegetModule () const
 Module. More...
 
OrderedNodeSetgetAllValidPtrs ()
 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...
 
CommonCHGraphgetCHGraph () 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 TypeSystemgetTypeSystem () const
 get TypeSystem More...
 
PAGgetPAG () 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 NodeBSgetAllFieldsObjNode (NodeID id)
 
void setObjFieldInsensitive (NodeID id)
 
bool isFieldInsensitive (NodeID id) const
 
CallEdgeMapgetIndCallMap ()
 Get callees from an indirect callsite. More...
 
bool hasIndCSCallees (const CallBlockNode *cs) const
 
const FunctionSetgetIndCSCallees (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...
 

Static Public Member Functions

static AndersenHCDcreateAndersenHCD (PAG *_pag)
 Create an singleton instance directly instead of invoking llvm pass manager. More...
 
static void releaseAndersenHCD ()
 
- Static Public Member Functions inherited from SVF::Andersen
static bool classof (const Andersen *)
 Methods for support type inquiry through isa, cast, and dyn_cast: More...
 
static bool classof (const PointerAnalysis *pta)
 
- Static Public Member Functions inherited from SVF::AndersenBase
static bool classof (const AndersenBase *)
 Methods for support type inquiry through isa, cast, and dyn_cast: More...
 
static bool classof (const PointerAnalysis *pta)
 
- Static Public Member Functions inherited from SVF::BVDataPTAImpl
static bool classof (const PointerAnalysis *pta)
 

Protected Member Functions

virtual void initialize ()
 
virtual void solveWorklist ()
 
virtual void mergeSCC (NodeID nodeId)
 
void mergeNodeAndPts (NodeID node, NodeID tgt)
 
bool hasOfflineRep (NodeID nodeId) const
 
NodeID getOfflineRep (NodeID nodeId)
 
bool isaMergedNode (NodeID node) const
 
void setMergedNode (NodeID node)
 
- Protected Member Functions inherited from SVF::Andersen
void heapAllocatorViaIndCall (CallSite cs, NodePairSet &cpySrcNodes)
 
virtual void computeDiffPts (NodeID id)
 Handle diff points-to set. More...
 
virtual const PointsTogetDiffPts (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...
 
virtual bool mergeSrcToTgt (NodeID srcId, NodeID tgtId)
 
void updateNodeRepAndSubs (NodeID nodeId, NodeID newRepId)
 Updates subnodes of its rep, and rep node of its subs. More...
 
virtual NodeStackSCCDetect ()
 SCC detection. 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 handleCopyGep (ConstraintNode *node)
 
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)
 
- Protected Member Functions inherited from SVF::WPASolver< GraphType >
 WPASolver ()
 Constructor. More...
 
virtual ~WPASolver ()
 Destructor. More...
 
SCCgetSCCDetector () const
 Get SCC detector. More...
 
virtual NodeStackSCCDetect (NodeSet &candidates)
 
GNODENode (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)
 
- Protected Member Functions inherited from SVF::BVDataPTAImpl
PTDataTygetPTDataTy () const
 Get points-to data structure. More...
 
DiffPTDataTygetDiffPTDataTy () const
 
DFPTDataTygetDFPTDataTy () const
 
MutDFPTDataTygetMutDFPTDataTy () const
 
VersionedPTDataTygetVersionedPTDataTy () const
 
virtual void onTheFlyCallGraphSolve (const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges)
 On the fly call graph construction. More...
 
- Protected Member Functions inherited from SVF::PointerAnalysis
const CallSiteToFunPtrMapgetIndirectCallsites () 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)
 

Private Attributes

NodeSet mergedNodes
 
OfflineConsGoCG
 

Static Private Attributes

static AndersenHCDhcdAndersen = nullptr
 

Additional Inherited Members

- Public Attributes inherited from SVF::AndersenBase
NodeBS redundantGepNodes
 
- Public Attributes inherited from SVF::WPASolver< GraphType >
u32_t numOfIteration
 num of iterations during constaint solving More...
 
- Static Public Attributes inherited from SVF::AndersenBase
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 Public Attributes inherited from SVF::PointerAnalysis
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_"
 
- Protected Attributes inherited from SVF::Andersen
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
 
- Protected Attributes inherited from SVF::AndersenBase
ConstraintGraphconsCG
 Constraint Graph. More...
 
- Protected Attributes inherited from SVF::WPASolver< GraphType >
bool reanalyze
 Reanalyze if any constraint value changed. More...
 
u32_t iterationForPrintStat
 print out statistics for i-th iteration More...
 
GraphType _graph
 Graph. More...
 
SCCscc
 SCC. More...
 
WorkList worklist
 Worklist for resolution. More...
 
- Protected Attributes inherited from SVF::PointerAnalysis
SVFModulesvfMod
 Module. More...
 
PTATY ptaTy
 Pointer analysis Type. More...
 
PTAImplTy ptaImplTy
 PTA implementation type. More...
 
PTAStatstat
 Statistics. More...
 
PTACallGraphptaCallGraph
 Call graph used for pointer analysis. More...
 
CallGraphSCCcallGraphSCC
 SCC for CallGraph. More...
 
ICFGicfg
 Interprocedural control-flow graph. More...
 
TypeSystemtypeSystem
 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 Protected Attributes inherited from SVF::PointerAnalysis
static PAGpag = nullptr
 PAG. More...
 
static CommonCHGraphchgraph = nullptr
 CHGraph. More...
 

Detailed Description

Hybrid Cycle Detection Based Andersen Analysis

Definition at line 635 of file Andersen.h.

Member Typedef Documentation

◆ OSCC

Definition at line 639 of file Andersen.h.

Constructor & Destructor Documentation

◆ AndersenHCD()

SVF::AndersenHCD::AndersenHCD ( PAG _pag,
PTATY  type = AndersenHCD_WPA 
)
inline

Definition at line 647 of file Andersen.h.

647  :
648  Andersen(_pag, type), oCG(nullptr)
649  {
650  }
Andersen(PAG *_pag, PTATY type=Andersen_WPA, bool alias_check=true)
Constructor.
Definition: Andersen.h:164
OfflineConsG * oCG
Definition: Andersen.h:644

Member Function Documentation

◆ createAndersenHCD()

static AndersenHCD* SVF::AndersenHCD::createAndersenHCD ( PAG _pag)
inlinestatic

Create an singleton instance directly instead of invoking llvm pass manager.

Definition at line 653 of file Andersen.h.

654  {
655  if (hcdAndersen == nullptr)
656  {
657  hcdAndersen = new AndersenHCD(_pag);
658  hcdAndersen->analyze();
659  return hcdAndersen;
660  }
661  return hcdAndersen;
662  }
static AndersenHCD * hcdAndersen
Definition: Andersen.h:642
virtual void analyze() override
Andersen analysis.
Definition: Andersen.cpp:92
AndersenHCD(PAG *_pag, PTATY type=AndersenHCD_WPA)
Definition: Andersen.h:647

◆ getOfflineRep()

NodeID SVF::AndersenHCD::getOfflineRep ( NodeID  nodeId)
inlineprotected

Definition at line 680 of file Andersen.h.

681  {
682  return oCG->getOCGRep(nodeId);
683  }
OfflineConsG * oCG
Definition: Andersen.h:644
NodeID getOCGRep(NodeID node) const
Definition: OfflineConsG.h:70

◆ hasOfflineRep()

bool SVF::AndersenHCD::hasOfflineRep ( NodeID  nodeId) const
inlineprotected

Definition at line 676 of file Andersen.h.

677  {
678  return oCG->hasOCGRep(nodeId);
679  }
bool hasOCGRep(NodeID node) const
Definition: OfflineConsG.h:65
OfflineConsG * oCG
Definition: Andersen.h:644

◆ initialize()

void AndersenHCD::initialize ( )
protectedvirtual

AndersenHCD initilizer, including initilization of PAG, constraint graph and offline constraint graph

Reimplemented from SVF::Andersen.

Reimplemented in SVF::AndersenHLCD.

Definition at line 44 of file AndersenHCD.cpp.

45 {
47  // Build offline constraint graph and solve its constraints
48  oCG = new OfflineConsG(pag);
49  OSCC* oscc = new OSCC(oCG);
50  oscc->find();
51  oCG->solveOfflineSCC(oscc);
52  delete oscc;
53 }
OfflineConsG * oCG
Definition: Andersen.h:644
SCCDetection< OfflineConsG * > OSCC
Definition: Andersen.h:639
void solveOfflineSCC(OSCC *oscc)
virtual void initialize()
Initialize analysis.
Definition: Andersen.cpp:167
static PAG * pag
PAG.

◆ isaMergedNode()

bool SVF::AndersenHCD::isaMergedNode ( NodeID  node) const
inlineprotected

Definition at line 688 of file Andersen.h.

689  {
690  NodeSet::const_iterator it = mergedNodes.find(node);
691  return it != mergedNodes.end();
692  };
NodeSet mergedNodes
Definition: Andersen.h:643

◆ mergeNodeAndPts()

void AndersenHCD::mergeNodeAndPts ( NodeID  node,
NodeID  rep 
)
protected

Merge node and its pts to the rep node

Definition at line 103 of file AndersenHCD.cpp.

104 {
105  node = sccRepNode(node);
106  rep = sccRepNode(rep);
107  if (!isaMergedNode(node))
108  {
109  if (unionPts(rep, node))
110  pushIntoWorklist(rep);
111  // Once a 'Node' is merged to its rep, it is collapsed,
112  // only its 'NodeID' remaining in the set 'subNodes' of its rep node.
113  mergeNodeToRep(node, rep);
114  setMergedNode(node);
115  }
116 }
virtual void pushIntoWorklist(NodeID id)
Definition: WPASolver.h:163
virtual bool unionPts(NodeID id, const PointsTo &target)
Definition: Andersen.h:226
void setMergedNode(NodeID node)
Definition: Andersen.h:693
bool isaMergedNode(NodeID node) const
Definition: Andersen.h:688
virtual void mergeNodeToRep(NodeID nodeId, NodeID newRepId)
Merge sub node to its rep.
Definition: Andersen.cpp:771
NodeID sccRepNode(NodeID id) const
SCC methods.
Definition: Andersen.h:211

◆ mergeSCC()

void AndersenHCD::mergeSCC ( NodeID  nodeId)
protectedvirtual

Collapse a node to its ref, if the ref exists

Reimplemented in SVF::AndersenHLCD.

Definition at line 77 of file AndersenHCD.cpp.

78 {
79  if (hasOfflineRep(nodeId))
80  {
81  // get offline rep node
82  NodeID oRep = getOfflineRep(nodeId);
83  // get online rep node
84  NodeID rep = consCG->sccRepNode(oRep);
85  const PointsTo &pts = getPts(nodeId);
86  for (PointsTo::iterator ptIt = pts.begin(), ptEit = pts.end(); ptIt != ptEit; ++ptIt)
87  {
88  NodeID tgt = *ptIt;
89  ConstraintNode* tgtNode = consCG->getConstraintNode(tgt);
90  if (!tgtNode->getDirectInEdges().empty())
91  continue;
92  if (tgtNode->getAddrOutEdges().size() > 1)
93  continue;
94  assert(!oCG->isaRef(tgt) && "Point-to target should not be a ref node!");
95  mergeNodeAndPts(tgt, rep);
96  }
97  }
98 }
virtual const PointsTo & getPts(NodeID id)
Operation of points-to set.
Definition: Andersen.h:222
ConstraintNode * getConstraintNode(NodeID id) const
Get/add/remove constraint node.
Definition: ConsG.h:107
OfflineConsG * oCG
Definition: Andersen.h:644
u32_t NodeID
Definition: SVFBasicTypes.h:80
#define assert(ex)
Definition: util.h:141
bool hasOfflineRep(NodeID nodeId) const
Definition: Andersen.h:676
const ConstraintEdge::ConstraintEdgeSetTy & getAddrOutEdges() const
Definition: ConsGNode.h:160
bool isaRef(NodeID node) const
Definition: OfflineConsG.h:81
NodeID sccRepNode(NodeID id) const
SCC rep/sub nodes methods.
Definition: ConsG.h:232
void mergeNodeAndPts(NodeID node, NodeID tgt)
NodeID getOfflineRep(NodeID nodeId)
Definition: Andersen.h:680
ConstraintGraph * consCG
Constraint Graph.
Definition: Andersen.h:149
NodeBS PointsTo
Definition: SVFBasicTypes.h:88
const ConstraintEdge::ConstraintEdgeSetTy & getDirectInEdges() const
Return constraint edges.
Definition: ConsGNode.h:116

◆ releaseAndersenHCD()

static void SVF::AndersenHCD::releaseAndersenHCD ( )
inlinestatic

Definition at line 664 of file Andersen.h.

665  {
666  if (hcdAndersen)
667  delete hcdAndersen;
668  hcdAndersen = nullptr;
669  }
static AndersenHCD * hcdAndersen
Definition: Andersen.h:642

◆ setMergedNode()

void SVF::AndersenHCD::setMergedNode ( NodeID  node)
inlineprotected

Definition at line 693 of file Andersen.h.

694  {
695  if (!isaMergedNode(node))
696  mergedNodes.insert(node);
697  };
NodeSet mergedNodes
Definition: Andersen.h:643
bool isaMergedNode(NodeID node) const
Definition: Andersen.h:688

◆ solveWorklist()

void AndersenHCD::solveWorklist ( )
protectedvirtual

AndersenHCD worklist solver

Reimplemented from SVF::WPASolver< GraphType >.

Reimplemented in SVF::AndersenHLCD.

Definition at line 58 of file AndersenHCD.cpp.

59 {
60  while (!isWorklistEmpty())
61  {
62  NodeID nodeId = popFromWorklist();
63  collapsePWCNode(nodeId);
64 
65  //Merge detected offline SCC cycles
66  mergeSCC(nodeId);
67 
68  // Keep solving until workList is empty.
69  processNode(nodeId);
71  }
72 }
u32_t NodeID
Definition: SVFBasicTypes.h:80
bool isWorklistEmpty()
Definition: WPASolver.h:167
void collapseFields()
Definition: Andersen.cpp:434
virtual void mergeSCC(NodeID nodeId)
Definition: AndersenHCD.cpp:77
virtual void processNode(NodeID nodeId)
Override WPASolver function in order to use the default solver.
Definition: Andersen.cpp:191
NodeID popFromWorklist()
Worklist operations.
Definition: WPASolver.h:158
void collapsePWCNode(NodeID nodeId)
Collapse a field object into its base for field insensitive anlaysis.
Definition: Andersen.cpp:425

Member Data Documentation

◆ hcdAndersen

AndersenHCD * AndersenHCD::hcdAndersen = nullptr
staticprivate

Definition at line 642 of file Andersen.h.

◆ mergedNodes

NodeSet SVF::AndersenHCD::mergedNodes
private

Definition at line 643 of file Andersen.h.

◆ oCG

OfflineConsG* SVF::AndersenHCD::oCG
private

Definition at line 644 of file Andersen.h.


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