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

#include <Andersen.h>

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

Public Member Functions

 AndersenLCD (PAG *_pag, PTATY type=AndersenLCD_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 initialize ()
 Initialize analysis. 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 AndersenLCDcreateAndersenLCD (PAG *_pag)
 Create an singleton instance directly instead of invoking llvm pass manager. More...
 
static void releaseAndersenLCD ()
 
- 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

void solveWorklist ()
 
virtual void handleCopyGep (ConstraintNode *node)
 
virtual void mergeSCC ()
 
NodeStackSCCDetect ()
 
bool mergeSrcToTgt (NodeID nodeId, NodeID newRepId)
 
bool hasLCDCandidate () const
 
void cleanLCDCandidate ()
 
void addLCDCandidate (NodeID nodeId)
 
bool isMetEdge (ConstraintEdge *edge) const
 
void addMetEdge (ConstraintEdge *edge)
 
- 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...
 
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)
 
- 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

EdgeSet metEdges
 
NodeSet lcdCandidates
 

Static Private Attributes

static AndersenLCDlcdAndersen = nullptr
 

Additional Inherited Members

- 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 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

Definition at line 556 of file Andersen.h.

Constructor & Destructor Documentation

◆ AndersenLCD()

SVF::AndersenLCD::AndersenLCD ( PAG _pag,
PTATY  type = AndersenLCD_WPA 
)
inline

Definition at line 565 of file Andersen.h.

565  :
566  Andersen(_pag, type), metEdges({}), lcdCandidates( {})
567  {
568  }
Andersen(PAG *_pag, PTATY type=Andersen_WPA, bool alias_check=true)
Constructor.
Definition: Andersen.h:164
NodeSet lcdCandidates
Definition: Andersen.h:562
EdgeSet metEdges
Definition: Andersen.h:561

Member Function Documentation

◆ addLCDCandidate()

void SVF::AndersenLCD::addLCDCandidate ( NodeID  nodeId)
inlineprotected

Definition at line 600 of file Andersen.h.

601  {
602  lcdCandidates.insert(nodeId);
603  };
NodeSet lcdCandidates
Definition: Andersen.h:562

◆ addMetEdge()

void SVF::AndersenLCD::addMetEdge ( ConstraintEdge edge)
inlineprotected

Definition at line 613 of file Andersen.h.

614  {
615  metEdges.insert(edge->getEdgeID());
616  };
EdgeSet metEdges
Definition: Andersen.h:561

◆ cleanLCDCandidate()

void SVF::AndersenLCD::cleanLCDCandidate ( )
inlineprotected

Definition at line 596 of file Andersen.h.

597  {
598  lcdCandidates.clear();
599  };
NodeSet lcdCandidates
Definition: Andersen.h:562

◆ createAndersenLCD()

static AndersenLCD* SVF::AndersenLCD::createAndersenLCD ( PAG _pag)
inlinestatic

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

Definition at line 571 of file Andersen.h.

572  {
573  if (lcdAndersen == nullptr)
574  {
575  lcdAndersen = new AndersenLCD(_pag);
576  lcdAndersen->analyze();
577  return lcdAndersen;
578  }
579  return lcdAndersen;
580  }
static AndersenLCD * lcdAndersen
Definition: Andersen.h:560
AndersenLCD(PAG *_pag, PTATY type=AndersenLCD_WPA)
Definition: Andersen.h:565
virtual void analyze() override
Andersen analysis.
Definition: Andersen.cpp:92

◆ handleCopyGep()

void AndersenLCD::handleCopyGep ( ConstraintNode node)
protectedvirtual

Process copy and gep edges

Reimplemented from SVF::Andersen.

Reimplemented in SVF::AndersenHLCD.

Definition at line 56 of file AndersenLCD.cpp.

57 {
58  double propStart = stat->getClk();
59 
60  NodeID nodeId = node->getId();
61  computeDiffPts(nodeId);
62 
63  for (ConstraintEdge* edge : node->getCopyOutEdges())
64  {
65  NodeID dstNodeId = edge->getDstID();
66  const PointsTo& srcPts = getPts(nodeId);
67  const PointsTo& dstPts = getPts(dstNodeId);
68  // In one edge, if the pts of src node equals to that of dst node, and the edge
69  // is never met, push it into 'metEdges' and push the dst node into 'lcdCandidates'
70  if (!srcPts.empty() && srcPts == dstPts && !isMetEdge(edge))
71  {
72  addMetEdge(edge);
73  addLCDCandidate((edge)->getDstID());
74  }
75  processCopy(nodeId, edge);
76  }
77  for (ConstraintEdge* edge : node->getGepOutEdges())
78  {
79  if (GepCGEdge* gepEdge = SVFUtil::dyn_cast<GepCGEdge>(edge))
80  processGep(nodeId, gepEdge);
81  }
82 
83  double propEnd = stat->getClk();
84  timeOfProcessCopyGep += (propEnd - propStart) / TIMEINTERVAL;
85 }
static double timeOfProcessCopyGep
Definition: Andersen.h:142
virtual const PointsTo & getPts(NodeID id)
Operation of points-to set.
Definition: Andersen.h:222
u32_t NodeID
Definition: SVFBasicTypes.h:80
PTAStat * stat
Statistics.
void addLCDCandidate(NodeID nodeId)
Definition: Andersen.h:600
virtual bool processCopy(NodeID node, const ConstraintEdge *edge)
Definition: Andersen.cpp:329
bool isMetEdge(ConstraintEdge *edge) const
Definition: Andersen.h:608
#define TIMEINTERVAL
const ConstraintEdge::ConstraintEdgeSetTy & getCopyOutEdges() const
Definition: ConsGNode.h:128
const ConstraintEdge::ConstraintEdgeSetTy & getGepOutEdges() const
Definition: ConsGNode.h:136
static double getClk(bool mark=false)
Definition: PTAStat.h:139
NodeID getId() const
Get ID.
Definition: GenericGraph.h:164
virtual void computeDiffPts(NodeID id)
Handle diff points-to set.
Definition: Andersen.h:274
virtual bool processGep(NodeID node, const GepCGEdge *edge)
Definition: Andersen.cpp:349
NodeBS PointsTo
Definition: SVFBasicTypes.h:88
void addMetEdge(ConstraintEdge *edge)
Definition: Andersen.h:613

◆ hasLCDCandidate()

bool SVF::AndersenLCD::hasLCDCandidate ( ) const
inlineprotected

Definition at line 592 of file Andersen.h.

593  {
594  return !lcdCandidates.empty();
595  };
NodeSet lcdCandidates
Definition: Andersen.h:562

◆ isMetEdge()

bool SVF::AndersenLCD::isMetEdge ( ConstraintEdge edge) const
inlineprotected

Definition at line 608 of file Andersen.h.

609  {
610  EdgeSet::const_iterator it = metEdges.find(edge->getEdgeID());
611  return it != metEdges.end();
612  };
EdgeSet metEdges
Definition: Andersen.h:561

◆ mergeSCC()

void AndersenLCD::mergeSCC ( )
protectedvirtual

Collapse nodes and fields based on 'lcdCandidates'

Definition at line 90 of file AndersenLCD.cpp.

91 {
92  if (hasLCDCandidate())
93  {
94  SCCDetect();
96  }
97 }
bool hasLCDCandidate() const
Definition: Andersen.h:592
void cleanLCDCandidate()
Definition: Andersen.h:596
NodeStack & SCCDetect()

◆ mergeSrcToTgt()

bool AndersenLCD::mergeSrcToTgt ( NodeID  nodeId,
NodeID  newRepId 
)
protectedvirtual

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::Andersen.

Reimplemented in SVF::AndersenHLCD.

Definition at line 130 of file AndersenLCD.cpp.

131 {
132 
133  if(nodeId==newRepId)
134  return false;
135 
137  updatePropaPts(newRepId, nodeId);
138  unionPts(newRepId,nodeId);
139  pushIntoWorklist(newRepId);
140 
142  ConstraintNode* node = consCG->getConstraintNode(nodeId);
143  bool gepInsideScc = consCG->moveEdgesToRepNode(node, consCG->getConstraintNode(newRepId));
144 
146  updateNodeRepAndSubs(node->getId(),newRepId);
147 
149 
150  return gepInsideScc;
151 }
virtual void pushIntoWorklist(NodeID id)
Definition: WPASolver.h:163
ConstraintNode * getConstraintNode(NodeID id) const
Get/add/remove constraint node.
Definition: ConsG.h:107
virtual bool unionPts(NodeID id, const PointsTo &target)
Definition: Andersen.h:226
bool moveEdgesToRepNode(ConstraintNode *node, ConstraintNode *rep)
Definition: ConsG.h:283
void updateNodeRepAndSubs(NodeID nodeId, NodeID newRepId)
Updates subnodes of its rep, and rep node of its subs.
Definition: Andersen.cpp:787
void updatePropaPts(NodeID dstId, NodeID srcId)
Handle propagated points-to set.
Definition: Andersen.h:292
NodeID getId() const
Get ID.
Definition: GenericGraph.h:164
ConstraintGraph * consCG
Constraint Graph.
Definition: Andersen.h:149
void removeConstraintNode(ConstraintNode *node)
Definition: ConsG.h:121

◆ releaseAndersenLCD()

static void SVF::AndersenLCD::releaseAndersenLCD ( )
inlinestatic

Definition at line 582 of file Andersen.h.

583  {
584  if (lcdAndersen)
585  delete lcdAndersen;
586  lcdAndersen = nullptr;
587  }
static AndersenLCD * lcdAndersen
Definition: Andersen.h:560

◆ SCCDetect()

NodeStack & AndersenLCD::SCCDetect ( )
protectedvirtual

AndersenLCD specified SCC detector, need to input a nodeStack 'lcdCandidate'

Detect SCC cycles

Merge SCC cycles

Reimplemented from SVF::Andersen.

Definition at line 102 of file AndersenLCD.cpp.

103 {
105 
106  NodeSet sccCandidates;
107  sccCandidates.clear();
108  for (NodeSet::iterator it = lcdCandidates.begin(); it != lcdCandidates.end(); ++it)
109  if (sccRepNode(*it) == *it)
110  sccCandidates.insert(*it);
111 
112  double sccStart = stat->getClk();
114  getSCCDetector()->find(sccCandidates);
115  double sccEnd = stat->getClk();
116  timeOfSCCDetection += (sccEnd - sccStart) / TIMEINTERVAL;
117 
118  double mergeStart = stat->getClk();
120  mergeSccCycle();
121  double mergeEnd = stat->getClk();
122  timeOfSCCMerges += (mergeEnd - mergeStart) / TIMEINTERVAL;
123 
124  return getSCCDetector()->topoNodeStack();
125 }
GNodeStack & topoNodeStack()
Definition: SCC.h:128
Set< NodeID > NodeSet
void find(void)
Definition: SCC.h:308
static double timeOfSCCMerges
Definition: Andersen.h:138
NodeSet lcdCandidates
Definition: Andersen.h:562
static double timeOfSCCDetection
Definition: Andersen.h:137
SCC * getSCCDetector() const
Get SCC detector.
Definition: WPASolver.h:71
PTAStat * stat
Statistics.
#define TIMEINTERVAL
static double getClk(bool mark=false)
Definition: PTAStat.h:139
void mergeSccCycle()
Definition: Andersen.cpp:449
NodeID sccRepNode(NodeID id) const
SCC methods.
Definition: Andersen.h:211
static Size_t numOfSCCDetection
Definition: Andersen.h:136

◆ solveWorklist()

void AndersenLCD::solveWorklist ( )
protectedvirtual

Reimplemented from SVF::WPASolver< GraphType >.

Reimplemented in SVF::AndersenHLCD.

Definition at line 38 of file AndersenLCD.cpp.

39 {
40  while (!isWorklistEmpty())
41  {
42  // Merge detected SCC cycles
43  mergeSCC();
44 
45  NodeID nodeId = popFromWorklist();
46  collapsePWCNode(nodeId);
47  // Keep solving until workList is empty.
48  processNode(nodeId);
50  }
51 }
u32_t NodeID
Definition: SVFBasicTypes.h:80
bool isWorklistEmpty()
Definition: WPASolver.h:167
void collapseFields()
Definition: Andersen.cpp:434
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
virtual void mergeSCC()
Definition: AndersenLCD.cpp:90

Member Data Documentation

◆ lcdAndersen

AndersenLCD * AndersenLCD::lcdAndersen = nullptr
staticprivate

Definition at line 560 of file Andersen.h.

◆ lcdCandidates

NodeSet SVF::AndersenLCD::lcdCandidates
private

Definition at line 562 of file Andersen.h.

◆ metEdges

EdgeSet SVF::AndersenLCD::metEdges
private

Definition at line 561 of file Andersen.h.


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