139 for (CallEdgeMap::const_iterator iter = newEdges.begin(),eiter = newEdges.end(); iter != eiter; iter++)
143 for (FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)
169 return "FlowSensitive DDA";
#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.
void finalize() override
Finalization of pointer analysis, and normalize points-to information to Bit Vector representation.
const PointsTo & getPts(NodeID id) override
virtual bool unionPts(NodeID id, const PointsTo &target)
DPImToCPtSetMap dpmToADCPtSetMap
points-to caching map for address-taken vars
virtual void addDDAPts(PointsTo &pts, const NodeID &var)
Add pts.
SVFGEdge::SVFGEdgeSetTy SVFGEdgeSet
bool isTopLevelPtrStmt(const SVFGNode *stmt)
Whether this is a top-level pointer statement.
void setCallGraphSCC(CallGraphSCC *scc)
Set callgraphSCC.
AndersenWaveDiff * getAndersenAnalysis() const
Return Andersen's analysis.
SVFG * getSVFG() const
Return SVFG.
DDAStat * setDDAStat(DDAStat *s)
Set DDAStat.
virtual const PointsTo & getCachedPointsTo(const LocDPItem &dpm)
Points-to Caching for top-level pointers and address-taken objects.
virtual void buildSVFG(SVFIR *pag)
Build SVFG.
void setCallGraph(PTACallGraph *cg)
Set callgraph.
NodeID getCurNodeID() const
virtual PointsTo getConservativeCPts(const LocDPItem &dpm) override
Override parent method.
DDAClient * _client
DDA client.
void computeDDAPts(NodeID id) override
Compute points-to set for all top variable.
virtual void handleAddr(PointsTo &pts, const LocDPItem &dpm, const AddrSVFGNode *addr) override
Handle Address SVFGNode to add proper points-to.
virtual ~FlowDDA()
Destructor.
BVDataPTAImpl::CallEdgeMap CallEdgeMap
virtual void finalize() override
Finalize analysis.
BVDataPTAImpl::CallSiteSet CallSiteSet
void handleOutOfBudgetDpm(const LocDPItem &dpm)
Handle out-of-budget dpm.
virtual const PointsTo & getCachedTLPointsTo(const LocDPItem &dpm) override
Override parent class functions to get/add cached points-to directly via PAGNode ID.
virtual NodeID getPtrNodeID(const NodeID &var) const override
Override parent method.
virtual void analyze() override
dummy analyze method
FlowDDA(SVFIR *_pag, DDAClient *client)
Constructor.
virtual const std::string PTAName() const override
Return PTA name.
virtual PointsTo processGepPts(const GepSVFGNode *gep, const PointsTo &srcPts) override
processGep node
bool unionDDAPts(LocDPItem dpm, const PointsTo &targetPts) override
Union pts.
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 void updateCallGraphAndSVFG(const LocDPItem &dpm, const CallICFGNode *cs, SVFGEdgeSet &svfgEdges) override
Update call graph.
virtual void initialize() override
Initialization of the analysis.
virtual bool isHeapCondMemObj(const NodeID &var, const StoreSVFGNode *store) override
@ FlowS_DDA
Flow sensitive DDA.
CallGraphSCC * getCallGraphSCC() const
Return call graph SCC.
bool isFieldInsensitive(NodeID id) const
OrderedMap< const CallICFGNode *, FunctionSet > CallEdgeMap
virtual void initialize()
Initialization of a pointer analysis, including building symbol table and SVFIR etc.
Set< const CallICFGNode * > CallSiteSet
Indirect call edges type, map a callsite to a set of callees.
PTAStat * stat
Statistics.
NodeID getFIObjVar(NodeID id)
PTACallGraph * getCallGraph() const
Return call graph.
virtual void resolveIndCalls(const CallICFGNode *cs, const PointsTo &target, CallEdgeMap &newEdges)
Resolve indirect call edges.
Set< const SVFFunction * > FunctionSet
virtual void connectCallerAndCallee(const CallICFGNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &edges)
Connect SVFG nodes between caller and callee for indirect call site.
const LocCond * getLoc() const
Get context.
NodeID getPAGSrcNodeID() const
std::ostream & outs()
Overwrite llvm::outs()
StmtDPItem< SVFGNode > LocDPItem