Skip to content

Commit

Permalink
[polly] Don't count scops in a global variable.
Browse files Browse the repository at this point in the history
This can cause issues with thread safety.

Differential Revision: https://reviews.llvm.org/D75089
  • Loading branch information
efriedma-quic committed Feb 25, 2020
1 parent fe210a1 commit 888b12b
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 26 deletions.
3 changes: 3 additions & 0 deletions polly/include/polly/ScopDetection.h
Expand Up @@ -185,6 +185,9 @@ class ScopDetection {
int MaxDepth;
};

int NextScopID = 0;
int getNextID() { return NextScopID++; }

private:
//===--------------------------------------------------------------------===//

Expand Down
12 changes: 2 additions & 10 deletions polly/include/polly/ScopInfo.h
Expand Up @@ -1709,12 +1709,6 @@ class Scop {
/// The name of the SCoP (identical to the regions name)
Optional<std::string> name;

/// The ID to be assigned to the next Scop in a function
static int NextScopID;

/// The name of the function currently under consideration
static std::string CurrentFunc;

// Access functions of the SCoP.
//
// This owns all the MemoryAccess objects of the Scop created in this pass.
Expand Down Expand Up @@ -1899,12 +1893,10 @@ class Scop {
DenseMap<const ScopArrayInfo *, SmallVector<MemoryAccess *, 4>>
PHIIncomingAccs;

/// Return the ID for a new Scop within a function
static int getNextID(std::string ParentFunc);

/// Scop constructor; invoked from ScopBuilder::buildScop.
Scop(Region &R, ScalarEvolution &SE, LoopInfo &LI, DominatorTree &DT,
ScopDetection::DetectionContext &DC, OptimizationRemarkEmitter &ORE);
ScopDetection::DetectionContext &DC, OptimizationRemarkEmitter &ORE,
int ID);

//@}

Expand Down
3 changes: 2 additions & 1 deletion polly/lib/Analysis/ScopBuilder.cpp
Expand Up @@ -3631,7 +3631,8 @@ static void verifyUses(Scop *S, LoopInfo &LI, DominatorTree &DT) {
#endif

void ScopBuilder::buildScop(Region &R, AssumptionCache &AC) {
scop.reset(new Scop(R, SE, LI, DT, *SD.getDetectionContext(&R), ORE));
scop.reset(new Scop(R, SE, LI, DT, *SD.getDetectionContext(&R), ORE,
SD.getNextID()));

buildStmts(R);

Expand Down
17 changes: 2 additions & 15 deletions polly/lib/Analysis/ScopInfo.cpp
Expand Up @@ -1692,25 +1692,12 @@ isl::set Scop::getDomainConditions(BasicBlock *BB) const {
return getDomainConditions(BBR->getEntry());
}

int Scop::NextScopID = 0;

std::string Scop::CurrentFunc;

int Scop::getNextID(std::string ParentFunc) {
if (ParentFunc != CurrentFunc) {
CurrentFunc = ParentFunc;
NextScopID = 0;
}
return NextScopID++;
}

Scop::Scop(Region &R, ScalarEvolution &ScalarEvolution, LoopInfo &LI,
DominatorTree &DT, ScopDetection::DetectionContext &DC,
OptimizationRemarkEmitter &ORE)
OptimizationRemarkEmitter &ORE, int ID)
: IslCtx(isl_ctx_alloc(), isl_ctx_free), SE(&ScalarEvolution), DT(&DT),
R(R), name(None), HasSingleExitEdge(R.getExitingBlock()), DC(DC),
ORE(ORE), Affinator(this, LI),
ID(getNextID((*R.getEntry()->getParent()).getName().str())) {
ORE(ORE), Affinator(this, LI), ID(ID) {
if (IslOnErrorAbort)
isl_options_set_on_error(getIslCtx().get(), ISL_ON_ERROR_ABORT);
buildContext();
Expand Down

0 comments on commit 888b12b

Please sign in to comment.