38using namespace SVFUtil;
80 if (
cbn->isVirtualCall())
99 SVFUtil::errs() <<
"dumpCHAStats only implemented for standard CHGraph.\n";
115 outs() <<
"class_num:\t" <<
chgraph->getTotalNodeNum() <<
'\n';
virtual void finalize() override
Finalize analysis.
virtual void initialize() override
Initialize analysis.
bool isMultiInheritance() const
bool isPureAbstract() const
const std::vector< FuncVector > & getVirtualFunctionVectors() const
std::string getName() const
IDToNodeMapTy::const_iterator const_iterator
void dump(const std::string &file, bool simple=false)
Dump graph into dot file.
static const Option< bool > DumpICFG
void performStat() override
CommonCHGraph * getCHGraph() const
get CHGraph
CommonCHGraph * chgraph
CHGraph.
bool print_stat
User input flags.
OrderedMap< const CallICFGNode *, FunctionSet > CallEdgeMap
PTAStat * stat
Statistics.
void connectVCallToVFns(const CallICFGNode *cs, const VFunSet &vfns, CallEdgeMap &newEdges)
const CallSiteToFunPtrMap & getIndirectCallsites() const
Return all indirect callsites.
ICFG * icfg
Interprocedural control-flow graph.
SVFIR::CallSiteToFunPtrMap CallSiteToFunPtrMap
void getVFnsFromCHA(const CallICFGNode *cs, VFunSet &vfns)
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
void dumpCHAStats()
Statistics of CHA and callgraph.
virtual void finalize() override
Finalize analysis.
void initialize() override
Initialize analysis.
void analyze() override
Type analysis.
void callGraphSolveBasedOnCHA(const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges)
Resolve callgraph based on CHA.
std::ostream & errs()
Overwrite llvm::errs()
std::ostream & outs()
Overwrite llvm::outs()
llvm::IRBuilder IRBuilder
Set< const SVFFunction * > VFunSet