[NFC][ScopBuilder] Move addUserContext to ScopBuilder
Scope of changes: 1) Moved addUserContext to ScopBuilder. 2) Moved command line option UserContextStr to ScopBuilder. Differential Revision: https://reviews.llvm.org/D63740 llvm-svn: 366266
This commit is contained in:
parent
ffca322266
commit
fdc61bce94
|
@ -376,6 +376,9 @@ class ScopBuilder {
|
||||||
BasicBlock *IncomingBlock, Value *IncomingValue,
|
BasicBlock *IncomingBlock, Value *IncomingValue,
|
||||||
bool IsExitBlock);
|
bool IsExitBlock);
|
||||||
|
|
||||||
|
/// Add user provided parameter constraints to context (command line).
|
||||||
|
void addUserContext();
|
||||||
|
|
||||||
/// Add all recorded assumptions to the assumed context.
|
/// Add all recorded assumptions to the assumed context.
|
||||||
void addRecordedAssumptions();
|
void addRecordedAssumptions();
|
||||||
|
|
||||||
|
|
|
@ -2044,9 +2044,6 @@ private:
|
||||||
void addUserAssumptions(AssumptionCache &AC, DominatorTree &DT, LoopInfo &LI,
|
void addUserAssumptions(AssumptionCache &AC, DominatorTree &DT, LoopInfo &LI,
|
||||||
DenseMap<BasicBlock *, isl::set> &InvalidDomainMap);
|
DenseMap<BasicBlock *, isl::set> &InvalidDomainMap);
|
||||||
|
|
||||||
/// Add user provided parameter constraints to context (command line).
|
|
||||||
void addUserContext();
|
|
||||||
|
|
||||||
/// Add the bounds of the parameters to the context.
|
/// Add the bounds of the parameters to the context.
|
||||||
void addParameterBounds();
|
void addParameterBounds();
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,11 @@ static cl::opt<bool> UnprofitableScalarAccs(
|
||||||
cl::desc("Count statements with scalar accesses as not optimizable"),
|
cl::desc("Count statements with scalar accesses as not optimizable"),
|
||||||
cl::Hidden, cl::init(false), cl::cat(PollyCategory));
|
cl::Hidden, cl::init(false), cl::cat(PollyCategory));
|
||||||
|
|
||||||
|
static cl::opt<std::string> UserContextStr(
|
||||||
|
"polly-context", cl::value_desc("isl parameter set"),
|
||||||
|
cl::desc("Provide additional constraints on the context parameters"),
|
||||||
|
cl::init(""), cl::cat(PollyCategory));
|
||||||
|
|
||||||
static cl::opt<bool> DetectFortranArrays(
|
static cl::opt<bool> DetectFortranArrays(
|
||||||
"polly-detect-fortran-arrays",
|
"polly-detect-fortran-arrays",
|
||||||
cl::desc("Detect Fortran arrays and use this for code generation"),
|
cl::desc("Detect Fortran arrays and use this for code generation"),
|
||||||
|
@ -1454,6 +1459,45 @@ bool ScopBuilder::hasNonHoistableBasePtrInScop(MemoryAccess *MA,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ScopBuilder::addUserContext() {
|
||||||
|
if (UserContextStr.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
isl::set UserContext = isl::set(scop->getIslCtx(), UserContextStr.c_str());
|
||||||
|
isl::space Space = scop->getParamSpace();
|
||||||
|
if (Space.dim(isl::dim::param) != UserContext.dim(isl::dim::param)) {
|
||||||
|
std::string SpaceStr = Space.to_str();
|
||||||
|
errs() << "Error: the context provided in -polly-context has not the same "
|
||||||
|
<< "number of dimensions than the computed context. Due to this "
|
||||||
|
<< "mismatch, the -polly-context option is ignored. Please provide "
|
||||||
|
<< "the context in the parameter space: " << SpaceStr << ".\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < Space.dim(isl::dim::param); i++) {
|
||||||
|
std::string NameContext =
|
||||||
|
scop->getContext().get_dim_name(isl::dim::param, i);
|
||||||
|
std::string NameUserContext = UserContext.get_dim_name(isl::dim::param, i);
|
||||||
|
|
||||||
|
if (NameContext != NameUserContext) {
|
||||||
|
std::string SpaceStr = Space.to_str();
|
||||||
|
errs() << "Error: the name of dimension " << i
|
||||||
|
<< " provided in -polly-context "
|
||||||
|
<< "is '" << NameUserContext << "', but the name in the computed "
|
||||||
|
<< "context is '" << NameContext
|
||||||
|
<< "'. Due to this name mismatch, "
|
||||||
|
<< "the -polly-context option is ignored. Please provide "
|
||||||
|
<< "the context in the parameter space: " << SpaceStr << ".\n";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
UserContext = UserContext.set_dim_id(isl::dim::param, i,
|
||||||
|
Space.get_dim_id(isl::dim::param, i));
|
||||||
|
}
|
||||||
|
isl::set newContext = scop->getContext().intersect(UserContext);
|
||||||
|
scop->setContext(newContext);
|
||||||
|
}
|
||||||
|
|
||||||
isl::set ScopBuilder::getNonHoistableCtx(MemoryAccess *Access,
|
isl::set ScopBuilder::getNonHoistableCtx(MemoryAccess *Access,
|
||||||
isl::union_map Writes) {
|
isl::union_map Writes) {
|
||||||
// TODO: Loads that are not loop carried, hence are in a statement with
|
// TODO: Loads that are not loop carried, hence are in a statement with
|
||||||
|
@ -2326,7 +2370,7 @@ void ScopBuilder::buildScop(Region &R, AssumptionCache &AC) {
|
||||||
scop->finalizeAccesses();
|
scop->finalizeAccesses();
|
||||||
|
|
||||||
scop->realignParams();
|
scop->realignParams();
|
||||||
scop->addUserContext();
|
addUserContext();
|
||||||
|
|
||||||
// After the context was fully constructed, thus all our knowledge about
|
// After the context was fully constructed, thus all our knowledge about
|
||||||
// the parameters is in there, we add all recorded assumptions to the
|
// the parameters is in there, we add all recorded assumptions to the
|
||||||
|
|
|
@ -122,11 +122,6 @@ static cl::opt<bool> PollyRemarksMinimal(
|
||||||
cl::desc("Do not emit remarks about assumptions that are known"),
|
cl::desc("Do not emit remarks about assumptions that are known"),
|
||||||
cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::cat(PollyCategory));
|
cl::Hidden, cl::ZeroOrMore, cl::init(false), cl::cat(PollyCategory));
|
||||||
|
|
||||||
static cl::opt<std::string> UserContextStr(
|
|
||||||
"polly-context", cl::value_desc("isl parameter set"),
|
|
||||||
cl::desc("Provide additional constraints on the context parameters"),
|
|
||||||
cl::init(""), cl::cat(PollyCategory));
|
|
||||||
|
|
||||||
static cl::opt<bool>
|
static cl::opt<bool>
|
||||||
IslOnErrorAbort("polly-on-isl-error-abort",
|
IslOnErrorAbort("polly-on-isl-error-abort",
|
||||||
cl::desc("Abort if an isl error is encountered"),
|
cl::desc("Abort if an isl error is encountered"),
|
||||||
|
@ -2017,44 +2012,6 @@ void Scop::addUserAssumptions(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Scop::addUserContext() {
|
|
||||||
if (UserContextStr.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
isl::set UserContext = isl::set(getIslCtx(), UserContextStr.c_str());
|
|
||||||
isl::space Space = getParamSpace();
|
|
||||||
if (Space.dim(isl::dim::param) != UserContext.dim(isl::dim::param)) {
|
|
||||||
std::string SpaceStr = Space.to_str();
|
|
||||||
errs() << "Error: the context provided in -polly-context has not the same "
|
|
||||||
<< "number of dimensions than the computed context. Due to this "
|
|
||||||
<< "mismatch, the -polly-context option is ignored. Please provide "
|
|
||||||
<< "the context in the parameter space: " << SpaceStr << ".\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < Space.dim(isl::dim::param); i++) {
|
|
||||||
std::string NameContext = Context.get_dim_name(isl::dim::param, i);
|
|
||||||
std::string NameUserContext = UserContext.get_dim_name(isl::dim::param, i);
|
|
||||||
|
|
||||||
if (NameContext != NameUserContext) {
|
|
||||||
std::string SpaceStr = Space.to_str();
|
|
||||||
errs() << "Error: the name of dimension " << i
|
|
||||||
<< " provided in -polly-context "
|
|
||||||
<< "is '" << NameUserContext << "', but the name in the computed "
|
|
||||||
<< "context is '" << NameContext
|
|
||||||
<< "'. Due to this name mismatch, "
|
|
||||||
<< "the -polly-context option is ignored. Please provide "
|
|
||||||
<< "the context in the parameter space: " << SpaceStr << ".\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UserContext = UserContext.set_dim_id(isl::dim::param, i,
|
|
||||||
Space.get_dim_id(isl::dim::param, i));
|
|
||||||
}
|
|
||||||
|
|
||||||
Context = Context.intersect(UserContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Scop::buildContext() {
|
void Scop::buildContext() {
|
||||||
isl::space Space = isl::space::params_alloc(getIslCtx(), 0);
|
isl::space Space = isl::space::params_alloc(getIslCtx(), 0);
|
||||||
Context = isl::set::universe(Space);
|
Context = isl::set::universe(Space);
|
||||||
|
|
Loading…
Reference in New Issue