38#ifndef INCLUDE_MTA_MTASVFGBUILDER_H_
39#define INCLUDE_MTA_MTASVFGBUILDER_H_
84 typedef std::pair<const StmtSVFGNode*, const StmtSVFGNode*>
ThreadVFEdge;
static u32_t numOfNewSVFGEdges
Number of thread-aware (interference) SVFG edges added.
~MTASVFGBuilder() override=default
void connectMHPEdges(PointerAnalysis *pta)
Connect inter-thread (interference) value-flow edges for MHP pairs.
std::unique_ptr< MRGenerator > createMRGenerator(BVDataPTAImpl *pta, bool ptrOnlyMSSA) override
void handleStoreLoad(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)
Map< const StmtSVFGNode *, SVFGNodeIDSet > prevset
void handleStoreStore(const StmtSVFGNode *n1, const StmtSVFGNode *n2, PointerAnalysis *pta)
SVFGEdge * addTDEdge(NodeID srcId, NodeID dstId, const PointsTo &pts)
Add a thread-MHP indirect value-flow edge srcId -> dstId carrying pts.
bool isHeadOfSpan(const StmtSVFGNode *n)
void recordThreadVFSource(const StmtSVFGNode *s, const StmtSVFGNode *sp, bool commonLock)
void connectThreadJoinEdges()
void collectLoadStoreSVFGNodes()
bool recordThreadVF
false = skip [THREAD-VF] recording
SVFGNodeSet ldnodeSet
all load SVFG nodes
SVFGNodeIDSet getSuccNodes(const StmtSVFGNode *n)
Set< const StmtSVFGNode * > SVFGNodeSet
SVFGNodeSet stnodeSet
all store SVFG nodes
const std::map< ThreadVFEdge, std::set< const ICFGNode * > > & getThreadVFQueryMap() const
SVFGNodeIDSet getPrevNodes(const StmtSVFGNode *n)
Lock-span head/tail tests (non-interference lock-pair pruning).
bool isTailOfSpan(const StmtSVFGNode *n)
void configureForMainSolve(const SlicedICFGView *slice)
std::pair< const StmtSVFGNode *, const StmtSVFGNode * > ThreadVFEdge
const SlicedICFGView * icfgSlice
Main-solve configuration (see configureForMainSolve); defaults suit VFG_pre.
Map< const StmtSVFGNode *, SVFGNodeIDSet > succset
Map< const StmtSVFGNode *, bool > headmap
Map< const StmtSVFGNode *, bool > tailmap
MTASVFGBuilder(MHP *m, LockAnalysis *la)
Constructor: driven by the interleaving (MHP) and lock analyses.
std::map< ThreadVFEdge, std::set< const ICFGNode * > > threadVFQueryMap
[THREAD-VF] per-edge query map (see getThreadVFQueryMap).
void addJoinRetEdge(const FormalOUTSVFGNode *formalOut, const ActualOUTSVFGNode *actualOut, CallSiteID csId)
void buildSVFG() override
Rewrite the SVFG build hook: build the stock SVFG, then add MHP edges.
llvm::IRBuilder IRBuilder