39 using namespace SVFUtil;
109 u32_t maxNumOfDPMPerLoc = 0;
118 u32_t num = it->second.size();
120 if(num > maxNumOfDPMPerLoc)
121 maxNumOfDPMPerLoc = num;
132 u32_t num = it->second.size();
134 if(num > maxNumOfDPMPerLoc)
135 maxNumOfDPMPerLoc = num;
144 double avgDPMAtLoc = NumOfLoc!=0 ? (double)NumOfDPM/NumOfLoc : 0;
230 PAGNode* pagNode = nodeIt->second;
231 if(SVFUtil::isa<ObjVar>(pagNode))
233 if(
getPTA()->isLocalVarInRecursiveFun(nodeIt->first))
278 unsigned field_width = 20;
279 SVFUtil::outs() <<
"---------------------Stat Per Query--------------------------------\n";
283 SVFUtil::outs() << std::setw(field_width) << it->first << it->second <<
"\n";
288 SVFUtil::outs() << std::setw(field_width) << it->first << it->second <<
"\n";
308 SVFUtil::outs() <<
"\n****Demand-Driven Pointer Analysis Statistics****\n";
const PointsTo & getPts(NodeID id) override
virtual const CPtSet & getPts(CVar id)
virtual PointsTo getBVPointsTo(const CPtSet &cpts) const
Given a conditional pts return its bit vector points-to.
ConstSVFGEdgeSet & getInsensitiveEdgeSet()
Return insensitive edge set.
void performStatPerQuery(NodeID ptr) override
u32_t _TotalNumOfInfeasiblePath
u32_t _TotalNumOfOutOfBudgetQuery
double _AvgNumOfDPMAtSVFGNode
u32_t _TotalNumOfMustAliases
PointerAnalysis * getPTA() const
u32_t _NumOfStrongUpdates
u32_t _NumOfInfeasiblePath
void performStat() override
u32_t _TotalNumOfStrongUpdates
u32_t _MaxNumOfDPMAtSVFGNode
NUMStatMap NumPerQueryStatMap
double _TotalTimeOfBKCondition
double _AnaTimeCyclePerQuery
double _TotalTimeOfQueries
u32_t _TotalNumOfStepInCycle
NodeBS _StrongUpdateStores
u32_t _NumOfIndCallEdgeSolved
void printStatPerQuery(NodeID ptr, const PointsTo &pts) override
void printStat(std::string str="") override
DPTItemSet outOfBudgetDpms
out of budget dpm set
SVFG * getSVFG() const
Return SVFG.
const LocToDPMVecMap & getLocToDPMVecMap() const
Map a SVFGNode to its dpms for handling value-flow cycles.
OrderedSet< const SVFGEdge * > ConstSVFGEdgeSet
IDToNodeMapTy::const_iterator const_iterator
NodeBS localVarInRecursion
void callgraphStat() override
virtual void dumpPts(NodeID ptr, const PointsTo &pts)
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.
virtual void performSCCStat(SVFGEdgeSet insensitiveCalRetEdges)
SVFGStat * getStat() const
Return statistics.
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
SVFStmt::SVFStmtSetTy & getPTASVFStmtSet(SVFStmt::PEDGEK kind)
Get PTA edges set according to its kind.
virtual void printStat(std::string str="")
std::ostream & outs()
Overwrite llvm::outs()