29#ifndef MTA_MTASLICER_H
30#define MTA_MTASLICER_H
88 static std::unique_ptr<SlicedTCT>
create(
95 void build()
override;
145 std::deque<const SVFGNode*>& worklist);
OrderedSet< const CallICFGNode * > collectMutexStatements(const OrderedSet< const ICFGNode * > &sourceNodes)
std::pair< OrderedSet< const CallICFGNode * >, OrderedSet< const CallICFGNode * > > collectCommonThreadStatements(const OrderedSet< const ICFGNode * > &sourceNodes)
OrderedSet< const CallICFGNode * > collectPthreadStatements(const OrderedSet< const ICFGNode * > &sourceNodes)
OrderedSet< const VFGNode * > computeDataDependenceSVFGNodes(const OrderedSet< const SVFStmt * > &seeds, SVFG *svfg)
OrderedSet< const ICFGNode * > expandCallDependence(const OrderedSet< const ICFGNode * > &nodes)
OrderedSet< const ICFGNode * > getLockSet(const ICFGNode *node)
OrderedSet< const TCTNode * > getTCTNodeSetFromNode(const ICFGNode *node)
LockAnalysis * lockAnalysis
OrderedSet< const ICFGNode * > svfgNodesToICFGNodes(const OrderedSet< const VFGNode * > &nodes, const OrderedSet< const SVFStmt * > &seeds)
Project the retained VFG nodes (plus the seeds) onto their ICFG nodes.
static void enqueueSVFGNode(const SVFGNode *node, OrderedSet< const SVFGNode * > &visited, std::deque< const SVFGNode * > &worklist)
SVFG * svfg
thread-aware VFG_pre (PTA/Single slicers; null for MTA)
void addSynchronizationDependencies(const OrderedSet< const CallICFGNode * > &pthreadCallNodes, const OrderedSet< const CallICFGNode * > &mutexCallNodes, OrderedSet< const ICFGNode * > &retainedNodes)
OrderedSet< const CallICFGNode * > getDependentThreadCreate(const ICFGNode *node)
bool preCandidateComputed
ValueFlowSlice preCandidateSlice
OrderedSet< const ICFGNode * > runILASlicing(const OrderedSet< const SVFStmt * > &vulnerableStatements, const OrderedSet< const ICFGNode * > &threadVFSources={})
const ValueFlowSlice & getPreCandidateSlice() const
Return the pre-candidate slice after computePreCandidateSlice().
void computePreCandidateSlice(const OrderedSet< const SVFStmt * > &vulnerableStatements)
ValueFlowSlice runPTASlicing(const OrderedSet< const SVFStmt * > &vulnerableStatements, SVFG *refinedMainVFG)
ValueFlowSlice runSlicing(const OrderedSet< const SVFStmt * > &vulnerableStatements)
void getKeptForkSites(std::vector< const ICFGNode * > &out) const
~SlicedTCT() override=default
void collectEntryFunInCallGraph() override
Get entry functions that are neither called by other functions nor extern functions.
void collectLoopInfoForJoin() override
Handle join site in loop.
void handleCallRelation(CxtThreadProc &ctp, const CallGraphEdge *cgEdge, const CallICFGNode *cs) override
Handle call relations.
bool isKeptEdge(const CallGraphEdge *edge) const
void getKeptJoinSites(std::vector< const ICFGNode * > &out) const
bool isKeptNode(const CallGraphNode *node) const
const SlicedThreadCallGraphView & tcgView
static std::unique_ptr< SlicedTCT > create(PointerAnalysis &pointerAnalysis, const SlicedSVFIRView &slicedView, u32_t contextLimit)
void build() override
Build TCT.
void markRelProcs() override
Mark relevant procedures that are backward reachable from any fork/join site.
llvm::IRBuilder IRBuilder
iter_range< typename GenericGraphTraits< GraphType >::nodes_iterator > nodes(const GraphType &G)
OrderedSet< const SVFGNode * > svfgNodes
OrderedSet< const ICFGNode * > icfgNodes