65 if (
it->second->getInEdges().empty())
67 for (
auto inEdge:
it->second->getInEdges())
105 std::vector<const ICFGCycleWTO*>
cycles;
107 std::vector<const ICFGWTOComp*>
stack;
110 if (!
kv.second)
continue;
114 while (!
stack.empty())
136 std::vector<const ICFGNode*>
nodes;
137 nodes.push_back(
cycle->head()->getICFGNode());
141 nodes.push_back(
s->getICFGNode());
153 lhs = SVFUtil::dyn_cast<ValVar>(
a->getLHSVar());
166 if (
const ValVar*
v = SVFUtil::dyn_cast<ValVar>(
fp))
static AndersenWaveDiff * createAndersenWaveDiff(SVFIR *_pag)
Create an singleton instance directly instead of invoking llvm pass manager.
virtual const FunObjVar * getFunction() const
Get containing function, or null for globals/constants.
bool isDeclaration() const
iterator begin()
Iterators.
NodeType * getGNode(NodeID id) const
Get a node.
FunEntryICFGNode * getFunEntryICFGNode(const FunObjVar *fun)
Add a function entry node.
static const OptionMap< u32_t > AESparsity
CallGraph * getCallGraph() const
Return call graph.
CallGraphSCC * getCallGraphSCC() const
Return call graph SCC.
Map< const FunObjVar *, const ICFGWTO * > funcToWTO
Map< const ICFGCycleWTO *, Set< const ValVar * > > cycleToValVars
CallGraphSCC * callGraphSCC
void initWTO()
Build WTO for each function using call graph SCC.
PreAnalysis(SVFIR *pag, ICFG *icfg)
WTONode< ICFG > ICFGSingletonWTO
llvm::IRBuilder IRBuilder
iter_range< typename GenericGraphTraits< GraphType >::nodes_iterator > nodes(const GraphType &G)
WTOComponent< ICFG > ICFGWTOComp