Index: include/polly/ScopInfo.h =================================================================== --- include/polly/ScopInfo.h +++ include/polly/ScopInfo.h @@ -25,6 +25,7 @@ #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/DenseSet.h" #include "llvm/ADT/MapVector.h" +#include "llvm/ADT/Optional.h" #include "llvm/ADT/SetVector.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" @@ -1717,7 +1718,7 @@ Region &R; /// The name of the SCoP (identical to the regions name) - std::string name; + Optional name; /// The ID to be assigned to the next Scop in a function static int NextScopID; @@ -2455,7 +2456,11 @@ /// could be executed. bool isEmpty() const { return Stmts.empty(); } - const StringRef getName() const { return name; } + StringRef getName() { + if (!name) + name = R.getNameStr(); + return *name; + } using array_iterator = ArrayInfoSetTy::iterator; using const_array_iterator = ArrayInfoSetTy::const_iterator; Index: lib/Analysis/ScopInfo.cpp =================================================================== --- lib/Analysis/ScopInfo.cpp +++ lib/Analysis/ScopInfo.cpp @@ -3327,8 +3327,8 @@ DominatorTree &DT, ScopDetection::DetectionContext &DC, OptimizationRemarkEmitter &ORE) : IslCtx(isl_ctx_alloc(), isl_ctx_free), SE(&ScalarEvolution), DT(&DT), - R(R), name(R.getNameStr()), HasSingleExitEdge(R.getExitingBlock()), - DC(DC), ORE(ORE), Affinator(this, LI), + R(R), name(None), HasSingleExitEdge(R.getExitingBlock()), DC(DC), + ORE(ORE), Affinator(this, LI), ID(getNextID((*R.getEntry()->getParent()).getName().str())) { if (IslOnErrorAbort) isl_options_set_on_error(getIslCtx().get(), ISL_ON_ERROR_ABORT);