38 using namespace SVFUtil;
71 svfg = std::make_unique<SVFGOPT>(
std::move(mssa), kind);
78 svfg->updateCallGraph(pta);
80 if(svfg->getMSSA()->getPTA()->printStat())
84 svfg->dump(
"svfg_final");
102 auto mssa = std::make_unique<MemSSA>(pta, ptrOnlyMSSA);
105 for (
const auto&
item: *svfirCallGraph)
112 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.
SVFG * buildPTROnlySVFG(BVDataPTAImpl *pta)
virtual void buildSVFG()
Can be rewritten by subclasses.
PTACallGraph * 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.
constexpr std::remove_reference< T >::type && move(T &&t) noexcept
std::ostream & outs()
Overwrite llvm::outs()