Skip to content

Commit

Permalink
fix issue
Browse files Browse the repository at this point in the history
  • Loading branch information
JasonZhongZexin authored and JasonZhongZexin committed Jul 18, 2023
1 parent 029d046 commit 74a1671
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 76 deletions.
4 changes: 3 additions & 1 deletion svf/include/WPA/Andersen.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ class AndersenBase: public WPAConstraintSolver, public BVDataPTAImpl
/// Andersen analysis
virtual void analyze() override;

virtual void analyzeAndWrite(const std::string& filename);
virtual void solveAndwritePtsToFile(const std::string& filename);

virtual void readPtsFromFile(const std::string& filename);

virtual void solveConstraints();

Expand Down
14 changes: 3 additions & 11 deletions svf/include/WPA/FlowSensitive.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,16 +86,6 @@ class FlowSensitive : public WPASVFGFSSolver, public BVDataPTAImpl
return fspta.get();
}

static FlowSensitive* createFSWPA(SVFIR* _pag, const std::string& filename)
{
if (fspta == nullptr)
{
fspta = std::unique_ptr<FlowSensitive>(new FlowSensitive(_pag));
fspta->analyzeAndWrite(filename);
}
return fspta.get();
}

/// Release flow-sensitive pointer analysis
static void releaseFSWPA()
{
Expand All @@ -111,7 +101,9 @@ class FlowSensitive : public WPASVFGFSSolver, public BVDataPTAImpl
/// Flow sensitive analysis
void analyze() override;

virtual void analyzeAndWrite(const std::string& filename);
virtual void solveAndwritePtsToFile(const std::string& filename);

virtual void readPtsFromFile(const std::string& filename);

virtual void solveConstraints();

Expand Down
65 changes: 28 additions & 37 deletions svf/lib/WPA/Andersen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,55 +132,46 @@ void AndersenBase::solveConstraints()
*/
void AndersenBase::analyze()
{
/// Initialization for the Solver
initialize();

bool readResultsFromFile = false;
if(!Options::ReadAnder().empty())
{
readResultsFromFile = this->readFromFile(Options::ReadAnder());
// Finalize the analysis
PointerAnalysis::finalize();
readPtsFromFile(Options::ReadAnder());
}

if (!Options::WriteAnder().empty())
this->writeObjVarToFile(Options::WriteAnder());

if(!readResultsFromFile)
solveConstraints();

if (!Options::WriteAnder().empty())
{
this->writeToFile(Options::WriteAnder());
else{
if(Options::WriteAnder().empty())
{
initialize();
solveConstraints();
finalize();
}else{
solveAndwritePtsToFile(Options::WriteAnder());
}
}

if (!readResultsFromFile)
// Finalize the analysis
finalize();
}

/*!
* Andersen analysis: read pointer analysis result from file
*/
void AndersenBase::readPtsFromFile(const std::string& filename)
{
initialize();
if (!filename.empty())
this->readFromFile(filename);
PointerAnalysis::finalize();
}

void AndersenBase::analyzeAndWrite(const std::string& filename)
/*!
* Andersen analysis: solve constraints and write pointer analysis result to file
*/
void AndersenBase:: solveAndwritePtsToFile(const std::string& filename)
{
/// Initialization for the Solver
initialize();

bool readResultsFromFile = false;

if (filename.empty())
if (!filename.empty())
this->writeObjVarToFile(filename);

if(!readResultsFromFile)
solveConstraints();

if (filename.empty())
{
solveConstraints();
if (!filename.empty())
this->writeToFile(filename);
}

if (!readResultsFromFile)
// Finalize the analysis
finalize();
finalize();
}

void AndersenBase::cleanConsCG(NodeID id)
Expand Down
63 changes: 36 additions & 27 deletions svf/lib/WPA/FlowSensitive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ void FlowSensitive::initialize()
}
void FlowSensitive::solveConstraints()
{
bool limitTimerSet = SVFUtil::startAnalysisLimitTimer(Options::FsTimeLimit());

double start = stat->getClk(true);
/// Start solving constraints
DBOUT(DGENERAL, outs() << SVFUtil::pasMsg("Start Solving Constraints\n"));

Expand All @@ -94,30 +97,27 @@ void FlowSensitive::solveConstraints()
while (updateCallGraph(getIndirectCallsites()));

DBOUT(DGENERAL, outs() << SVFUtil::pasMsg("Finish Solving Constraints\n"));

// Reset the time-up alarm; analysis is done.
SVFUtil::stopAnalysisLimitTimer(limitTimerSet);

double end = stat->getClk(true);
solveTime += (end - start) / TIMEINTERVAL;

}

/*!
* Start analysis
*/
void FlowSensitive::analyzeAndWrite(const std::string& filename)
void FlowSensitive::solveAndwritePtsToFile(const std::string& filename)
{
bool limitTimerSet = SVFUtil::startAnalysisLimitTimer(Options::FsTimeLimit());

/// Initialization for the Solver
initialize();

double start = stat->getClk(true);
writeObjVarToFile(filename);
if(!filename.empty())
writeObjVarToFile(filename);
solveConstraints();

// Reset the time-up alarm; analysis is done.
SVFUtil::stopAnalysisLimitTimer(limitTimerSet);

writeToFile(filename);

double end = stat->getClk(true);
solveTime += (end - start) / TIMEINTERVAL;

if(!filename.empty())
writeToFile(filename);
/// finalize the analysis
finalize();
}
Expand All @@ -127,21 +127,30 @@ void FlowSensitive::analyzeAndWrite(const std::string& filename)
*/
void FlowSensitive::analyze()
{
bool limitTimerSet = SVFUtil::startAnalysisLimitTimer(Options::FsTimeLimit());
if(!Options::ReadAnder().empty())
{
readPtsFromFile(Options::ReadAnder());
}
else{
if(Options::WriteAnder().empty())
{
initialize();
solveConstraints();
finalize();
}else{
solveAndwritePtsToFile(Options::WriteAnder());
}
}
}

void FlowSensitive::readPtsFromFile(const std::string& filename)
{
/// Initialization for the Solver
initialize();

double start = stat->getClk(true);
solveConstraints();

// Reset the time-up alarm; analysis is done.
SVFUtil::stopAnalysisLimitTimer(limitTimerSet);

double end = stat->getClk(true);
solveTime += (end - start) / TIMEINTERVAL;

/// finalize the analysis
/// Load the pts from file
if(!filename.empty())
this->readFromFile(filename);
/// finalize the analysis
finalize();
}

Expand Down

0 comments on commit 74a1671

Please sign in to comment.