167 virtual const std::string
PTAName()
const override
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
AndersenWaveDiff * getAndersenAnalysis() const
Return Andersen's analysis.
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.
SVFG * getSVFG() const
Return SVFG.
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.
DDAStat * setDDAStat(DDAStat *s)
Set DDAStat.
void setCallGraph(PTACallGraph *cg)
Set callgraph.
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 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 const PointsTo & getCachedTLPointsTo(const LocDPItem &dpm) override
Override parent class functions to get/add cached points-to directly via PAGNode ID.
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.
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)
virtual void resolveIndCalls(const CallICFGNode *cs, const PointsTo &target, CallEdgeMap &newEdges)
Resolve indirect call edges.
PTACallGraph * getCallGraph() const
Return call graph.
Set< const SVFFunction * > FunctionSet
CallGraphSCC * getCallGraphSCC() const
Return call graph SCC.
virtual void connectCallerAndCallee(const CallICFGNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &edges)
Connect SVFG nodes between caller and callee for indirect call site.
std::ostream & outs()
Overwrite llvm::outs()
llvm::IRBuilder IRBuilder
StmtDPItem< SVFGNode > LocDPItem