40using namespace SVFUtil;
73 svfg = std::make_unique<SVFGOPT>(std::move(mssa), kind);
75 svfg = std::unique_ptr<SVFG>(
new SVFG(std::move(mssa),kind));
80 svfg->updateCallGraph(pta);
82 if(
svfg->getMSSA()->getPTA()->printStat())
86 svfg->dump(
"svfg_final");
104 auto mssa = std::make_unique<MemSSA>(pta, ptrOnlyMSSA);
114 mssa->buildMemSSA(*fun);
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
static const Option< bool > SVFGWithIndirectCall
static const Option< bool > DumpMSSA
static Option< bool > OPTSVFG
static const Option< bool > DumpVFG
virtual std::unique_ptr< MemSSA > buildMSSA(BVDataPTAImpl *pta, bool ptrOnlyMSSA)
Build Memory SSA.
SVFG * build(BVDataPTAImpl *pta, VFG::VFGK kind)
Create a DDA SVFG. By default actualOut and FormalIN are removed, unless withAOFI is set true.
SVFG * buildFullSVFG(BVDataPTAImpl *pta)
virtual void releaseMemory()
Release global SVFG.
bool SVFGWithIndCall
SVFG with precomputed indirect call edges.
SVFG * buildPTROnlySVFG(BVDataPTAImpl *pta)
virtual void buildSVFG()
Can be rewritten by subclasses.
std::unique_ptr< SVFG > svfg
CallGraph * getCallGraph()
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
bool isExtCall(const SVFFunction *fun)
std::string pasMsg(const std::string &msg)
Print each pass/phase message by converting a string into blue string output.
std::ostream & outs()
Overwrite llvm::outs()
llvm::IRBuilder IRBuilder