37using namespace SVFUtil;
74 DBOUT(
DGENERAL,
outs() <<
"~~~Out of budget query, downgrade to andersen analysis \n");
152 if (
gepStmt->isVariantFieldGep())
180 if(
pVar && SVFUtil::isa<HeapObjVar, DummyObjVar>(
pVar))
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
virtual const PointsTo & getPts(NodeID id)
Operation of points-to set.
const PointsTo & getPts(NodeID id) override
virtual bool unionPts(NodeID id, const PointsTo &target)
virtual void handleStatement(const SVFGNode *, NodeID)
Call back used by DDAVFSolver.
double _TotalTimeOfQueries
virtual void updateCachedPointsTo(const LocDPItem &dpm, const PointsTo &pts)
AndersenWaveDiff * getAndersenAnalysis() const
Return Andersen's analysis.
bool isOutOfBudgetQuery() const
const SVFGNode * getDefSVFGNode(const PAGNode *pagNode) const
GetDefinition SVFG.
virtual const PointsTo & findPT(const LocDPItem &dpm)
Compute points-to.
SVFG * getSVFG() const
Return SVFG.
virtual LocDPItem getDPIm(const NodeID &var, const SVFGNode *loc) const
Given CVar and location (SVFGNode) return a new DPItem.
void addOutOfBudgetDpm(const LocDPItem &dpm)
DDAStat * ddaStat
DDA stat.
virtual void resetQuery()
Reset visited map for next points-to query.
static void setMaxBudget(u32_t max)
set max step budge per query
DDAClient * _client
DDA client.
void computeDDAPts(NodeID id) override
Compute points-to set for all top variable.
void handleOutOfBudgetDpm(const LocDPItem &dpm)
Handle out-of-budget dpm.
virtual NodeID getPtrNodeID(const NodeID &var) const override
Override parent method.
virtual PointsTo processGepPts(const GepSVFGNode *gep, const PointsTo &srcPts) override
processGep node
virtual bool handleBKCondition(LocDPItem &dpm, const SVFGEdge *edge) override
Handle condition for flow analysis (backward analysis)
BVDataPTAImpl::FunctionSet FunctionSet
bool testIndCallReachability(LocDPItem &dpm, const SVFFunction *callee, CallSiteID csId)
refine indirect call edge
virtual bool isHeapCondMemObj(const NodeID &var, const StoreSVFGNode *store) override
NodeType * getGNode(NodeID id) const
Get a node.
static const Option< u32_t > FlowBudget
const FunctionSet & getIndCSCallees(const CallICFGNode *cs) const
virtual bool isBlkObjOrConstantObj(NodeID ptd) const
bool printStat()
Whether print statistics.
PTAStat * stat
Statistics.
NodeID getFIObjVar(NodeID id)
PTACallGraph * getCallGraph() const
Return call graph.
NodeID getGepObjVar(NodeID id, const APOffset &ap)
bool hasIndCSCallees(const CallICFGNode *cs) const
void setObjFieldInsensitive(NodeID id)
void set(u32_t n)
Inserts n in the set.
NodeID getId() const
Get ID.
const BaseObjVar * getBaseObject(NodeID id) const
virtual void printStatPerQuery(NodeID, const PointsTo &)
virtual void performStatPerQuery(NodeID)
static double getClk(bool mark=false)
const CallICFGNode * getCallSite(CallSiteID id) const
std::ostream & outs()
Overwrite llvm::outs()
void dumpSet(NodeBS To, OutStream &O=SVFUtil::outs())
Dump sparse bitvector set.
llvm::IRBuilder IRBuilder