60 assert(
svfg &&
"SVFG is not built for sparse AE");
74 assert(
svfg &&
"SVFG is not built for sparse AE");
81 for (
const auto*
edge : node->getOutEdges())
91 assert(
svfg &&
"SVFG is not built for sparse AE");
95 return var->getICFGNode();
102 assert(
svfg &&
"SVFG is not built for sparse AE");
107 return edge->getSrcNode();
125 if (
it->second->getInEdges().empty())
127 for (
auto inEdge:
it->second->getInEdges())
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.
const GEdgeSetTy & getOutEdges() const
const GEdgeSetTy & getInEdges() const
FunEntryICFGNode * getFunEntryICFGNode(const FunObjVar *fun)
Add a function entry node.
static const Option< bool > SparseAE
CallGraph * getCallGraph() const
Return call graph.
CallGraphSCC * getCallGraphSCC() const
Return call graph SCC.
const ICFGNode * getDefSiteOfObjVar(const ObjVar *obj, const ICFGNode *node) const
const Set< const ICFGNode * > getUseSitesOfValVar(const ValVar *var) const
Map< const FunObjVar *, const ICFGWTO * > funcToWTO
const ICFGNode * getDefSiteOfValVar(const ValVar *var) const
const Set< const ICFGNode * > getUseSitesOfObjVar(const ObjVar *obj, const ICFGNode *node) const
Given an ObjVar and its def-site ICFGNode, find all use-site ICFGNodes.
CallGraphSCC * callGraphSCC
void initWTO()
Build WTO for each function using call graph SCC.
PreAnalysis(SVFIR *pag, ICFG *icfg)
SVFG * buildFullSVFG(BVDataPTAImpl *pta)
const ICFGNode * getDefSiteOfValVar(const ValVar *var) const
const Set< const ICFGNode * > getUseSitesOfValVar(const ValVar *var) const
const ICFGNode * getDefSiteOfObjVar(const ObjVar *obj, const ICFGNode *node) const
const Set< const ICFGNode * > getUseSitesOfObjVar(const ObjVar *obj, const ICFGNode *node) const
llvm::IRBuilder IRBuilder