40using namespace SVFUtil;
71 svfg = std::make_unique<SVFGOPT>(std::move(mssa), kind);
73 svfg = std::unique_ptr<SVFG>(
new SVFG(std::move(mssa), kind));
78 svfg->updateCallGraph(pta);
80 if (
svfg->getMSSA()->getPTA()->printStat())
84 svfg->dump(
"svfg_final");
106 return std::make_unique<DistinctMRG>(pta, ptrOnlyMSSA);
108 return std::make_unique<IntraDisjointMRG>(pta, ptrOnlyMSSA);
110 return std::make_unique<InterDisjointMRG>(pta, ptrOnlyMSSA);
112 assert(
false &&
"unrecognised memory partition strategy");
133 mssa->buildMemSSA(*fun);
#define DBOUT(TYPE, X)
LLVM debug macros, define type of your DBUG model of each pass.
static const Option< bool > DumpMSSA
static const OptionMap< u32_t > MemPar
static const Option< bool > DumpVFG
virtual std::unique_ptr< MemSSA > buildMSSA(BVDataPTAImpl *pta, bool ptrOnlyMSSA)
Build Memory SSA.
bool SVFGWithPostOpts
Build optimised version of SVFG.
SVFG * build(BVDataPTAImpl *pta, VFG::VFGK kind)
Create a DDA SVFG. By default actualOut and FormalIN are removed, unless withAOFI is set true.
virtual std::unique_ptr< MRGenerator > createMRGenerator(BVDataPTAImpl *pta, bool ptrOnlyMSSA)
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
const CallGraph * getCallGraph()
Get CG.
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.
std::string pasMsg(const std::string &msg)
Print each pass/phase message by converting a string into blue string output.
bool isExtCall(const FunObjVar *fun)
std::ostream & outs()
Overwrite llvm::outs()
llvm::IRBuilder IRBuilder