37#ifndef MTA_MTASLICER_H
38#define MTA_MTASLICER_H
58#include <unordered_map>
59#include <unordered_set>
94 void build()
override;
SVFG * vfg
thread-aware VFG_pre (PTA/Single slicers; null for MTA)
OrderedSet< const SVFStmt * > getDependentThreadCreate(const SVFStmt *stmt)
OrderedSet< const ICFGNode * > buildBackwardICFGNodeSet(const OrderedSet< const ICFGNode * > &vulnerableNodes)
std::pair< OrderedSet< const CallICFGNode * >, OrderedSet< const CallICFGNode * > > collectCommonThreadStatements(const OrderedSet< const SVFStmt * > &vulnerableStatements)
OrderedSet< const VFGNode * > computeDataDependenceSVFGNodes(const OrderedSet< const SVFStmt * > &seeds, SVFG *vfg)
OrderedSet< const CallICFGNode * > collectMutexStatements(const OrderedSet< const SVFStmt * > &vulnerableStmts)
OrderedSet< const ICFGNode * > expandCallDependence(const OrderedSet< const ICFGNode * > &nodes)
OrderedSet< const ICFGNode * > runDualSlicing(const OrderedSet< const ICFGNode * > &slicedNodes)
OrderedSet< const CallICFGNode * > collectPthreadStatements(const OrderedSet< const SVFStmt * > &vulnerableStmts)
OrderedSet< const ICFGNode * > getLockSet(const ICFGNode *node)
OrderedSet< const ICFGNode * > sliceDataDependenceOverVFG(const OrderedSet< const SVFStmt * > &seeds, SVFG *vfg)
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.
OrderedSet< const VFGNode * > retainedSVFGNodes
memoised data-dependence slice
const OrderedSet< const VFGNode * > & getRetainedSVFGNodes(const OrderedSet< const SVFStmt * > &vulnerableStatements)
OrderedSet< const ICFGNode * > runILASlicing(const OrderedSet< const SVFStmt * > &vulnerableStatements, const OrderedSet< const ICFGNode * > &threadVFSources={})
OrderedSet< const ICFGNode * > runPTASlicing(const OrderedSet< const SVFStmt * > &vulnerableStatements)
OrderedSet< const ICFGNode * > 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 pushCxt(CallStrCxt &cxt, const CallICFGNode *call, const FunObjVar *callee) override
Override pushCxt to use the custom maxContextLen.
void handleCallRelation(CxtThreadProc &ctp, const CallGraphEdge *cgEdge, const CallICFGNode *cs) override
Handle call relations.
const SlicedThreadCallGraphView * tcgView
bool isKeptEdge(const CallGraphEdge *edge) const
void getKeptJoinSites(std::vector< const ICFGNode * > &out) const
bool isKeptNode(const CallGraphNode *node) const
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)
std::vector< u32_t > CallStrCxt