35using namespace SVFUtil;
87 if(repNodes.insert(repNode).second)
109 for(ConstraintEdge::ConstraintEdgeSetTy::iterator
it = consCG->
getDirectCGEdges().begin(),
112 if(SVFUtil::isa<CopyCGEdge>(*
it))
114 else if(SVFUtil::isa<GepCGEdge>(*
it))
117 assert(
false &&
"what else!!");
137 for (ConstraintGraph::ConstraintNodeIDToNodeMapTy::iterator
nodeIt = consCG->
begin(),
nodeEit = consCG->
end();
141 if(
nodeIt->second->getInEdges().empty() &&
nodeIt->second->getOutEdges().empty())
219 if (SVFUtil::isa<ValVar>(
pagNode) ==
false)
237 if (!SVFUtil::isa<DummyValVar>(
pagNode) && !SVFUtil::isa<DummyObjVar>(
pagNode) )
240 if(
pagNode->getValue()->ptrInUncalledFunction() ==
false)
244 <<
") PtrName:" <<
pagNode->getValue()->getName();
252 rawstr <<
"##Null Pointer : (NodeID " <<
pagNode->getId() <<
")";
267 assert(SVFUtil::isa<AndersenBase>(
pta) &&
"not an andersen pta pass!! what else??");
static double timeOfSCCMerges
static u32_t numOfProcessedCopy
Number of processed Addr edge.
static u32_t numOfSCCDetection
static u32_t numOfSfrs
Number of processed Store edge.
static double timeOfUpdateCallGraph
static u32_t numOfProcessedStore
Number of processed Load edge.
static u32_t numOfProcessedAddr
Statistics.
static u32_t numOfProcessedLoad
Number of processed Gep edge.
static double timeOfSCCDetection
ConstraintGraph * getConstraintGraph()
Get constraint graph.
static u32_t numOfFieldExpand
static double timeOfProcessLoadStore
static u32_t numOfProcessedGep
Number of processed Copy edge.
static double timeOfProcessCopyGep
static double timeOfCollapse
AndersenStat(AndersenBase *p)
static const char * CollapseTime
void constraintGraphStat()
virtual void performStat()
static u32_t _NumOfCycles
static u32_t _NumOfNodesInCycles
static u32_t _MaxNumOfNodesInSCC
void collectCycleInfo(ConstraintGraph *consCG)
static u32_t _NumOfPWCCycles
const PointsTo & getPts(NodeID id) override
NodeID sccRepNode(NodeID id) const
SCC rep/sub nodes methods.
ConstraintEdge::ConstraintEdgeSetTy & getStoreCGEdges()
Get Store edges.
ConstraintEdge::ConstraintEdgeSetTy & getDirectCGEdges()
Get Copy/call/ret/gep edges.
ConstraintEdge::ConstraintEdgeSetTy & getLoadCGEdges()
Get Load edges.
const SVFIR::CallSiteToFunPtrMap & getIndirectCallsites() const
Wrappers for invoking SVFIR methods.
NodeID getBaseObjVar(NodeID id)
bool isPWCNode(NodeID nodeId)
Check/Set PWC (positive weight cycle) flag.
NodeBS & sccSubNodes(NodeID id)
ConstraintEdge::ConstraintEdgeSetTy & getAddrCGEdges()
Get SVFIR edge.
iterator begin()
Iterators.
IDToNodeMapTy::iterator iterator
Node Iterators.
NodeType * getGNode(NodeID id) const
Get a node.
u32_t getValueNodeNum() const
u32_t getObjectNodeNum() const
void performStat() override
bool isFieldInsensitive(NodeID id) const
bool containBlackHoleNode(const PointsTo &pts)
Determine whether a points-to contains a black hole or constant node.
u32_t getNumOfResolvedIndCallEdge() const
Return number of resolved indirect call edges.
bool containConstantNode(const PointsTo &pts)
u32_t count() const
Returns number of elements.
u32_t getFieldObjNodeNum() const
bool isValidTopLevelPtr(const SVFVar *node)
u32_t getFieldValNodeNum() const
Node and edge statistics.
virtual void printStat(std::string str="")
GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy
SVFStmt::SVFStmtSetTy & getIncomingEdges(SVFStmt::PEDGEK kind)
Get incoming SVFIR statements (edges)
u32_t numOfIteration
num of iterations during constraint solving
void writeWrnMsg(const std::string &msg)
Writes a message run through wrnMsg.
llvm::IRBuilder IRBuilder