66 if(
pta->isLocalVarInRecursiveFun(node->
getId()))
89 unsigned totalNode = 0;
90 unsigned totalCycle = 0;
91 unsigned nodeInCycle = 0;
92 unsigned maxNodeInCycle = 0;
93 unsigned totalEdge = 0;
94 unsigned edgeInCycle = 0;
99 for (; it != eit; ++it)
104 sccRepNodeSet.insert(callgraphSCC->
repNode(it->first));
107 if(subNodes.
count() > maxNodeInCycle)
108 maxNodeInCycle = subNodes.
count();
113 for (; edgeIt != edgeEit; ++edgeIt)
124 totalCycle = sccRepNodeSet.size();
CallInstSet & getIndirectCalls()
CallInstSet & getDirectCalls()
NodeID getSrcID() const
get methods of the components
iterator begin()
Iterators.
IDToNodeMapTy::iterator iterator
GEdgeSetTy::const_iterator const_iterator
void setMemUsageBefore(u32_t vmrss, u32_t vmsize)
void setMemUsageAfter(u32_t vmrss, u32_t vmsize)
NodeBS localVarInRecursion
PTAStat(PointerAnalysis *p)
void performStat() override
void callgraphStat() override
SCCDetection< CallGraph * > CallGraphSCC
NodeID repNode(NodeID n) const
get the rep node if not found return itself
bool isInCycle(NodeID n) const
whether the node is in a cycle
const NodeBS & subNodes(NodeID n) const
get all subnodes in one scc, if size is empty insert itself into the set
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
virtual void printStat(std::string str="")
virtual void performStat()=0
NodeID getId() const
Get ID.
LLVM_NODISCARD bool isa(const Y &Val)
bool getMemoryUsageKB(u32_t *vmrss_kb, u32_t *vmsize_kb)
Get memory usage from system file. Return TRUE if succeed.
@ Cxt_DDA
context sensitive DDA
@ FieldS_DDA
Field sensitive DDA.
@ CFLFICI_WPA
Flow-, context-, insensitive CFL-reachability-based analysis.
@ FSDATAFLOW_WPA
Traditional Dataflow-based flow sensitive WPA.
@ Steensgaard_WPA
Steensgaard PTA.
@ FSCS_WPA
Flow-, context- sensitive WPA.
@ CFLFSCS_WPA
Flow-, context-, CFL-reachability-based analysis.
@ Andersen_BASE
Base Andersen PTA.