ScheduleOpt: Allow to configure for which dependences to optimize
We can either optimize for RAW dependences or for all dependences. For the moment, I do not see a big difference here. llvm-svn: 150484
This commit is contained in:
parent
00383a75b8
commit
1deda29598
|
@ -418,7 +418,9 @@ isl_union_map *Dependences::getDependences(int type) {
|
||||||
dependences = isl_union_map_union(dependences,
|
dependences = isl_union_map_union(dependences,
|
||||||
isl_union_map_copy(waw_dep));
|
isl_union_map_copy(waw_dep));
|
||||||
|
|
||||||
return isl_union_map_coalesce(dependences);
|
dependences = isl_union_map_coalesce(dependences);
|
||||||
|
dependences = isl_union_map_detect_equalities(dependences);
|
||||||
|
return dependences;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dependences::getAnalysisUsage(AnalysisUsage &AU) const {
|
void Dependences::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||||
|
|
|
@ -47,6 +47,11 @@ DisableTiling("polly-no-tiling",
|
||||||
cl::desc("Disable tiling in the scheduler"), cl::Hidden,
|
cl::desc("Disable tiling in the scheduler"), cl::Hidden,
|
||||||
cl::location(polly::DisablePollyTiling), cl::init(false));
|
cl::location(polly::DisablePollyTiling), cl::init(false));
|
||||||
|
|
||||||
|
static cl::opt<std::string>
|
||||||
|
OptimizeDeps("polly-opt-optimize-only",
|
||||||
|
cl::desc("Only a certain kind of dependences (all/raw)"),
|
||||||
|
cl::Hidden, cl::init("all"));
|
||||||
|
|
||||||
static cl::opt<std::string>
|
static cl::opt<std::string>
|
||||||
SimplifyDeps("polly-opt-simplify-deps",
|
SimplifyDeps("polly-opt-simplify-deps",
|
||||||
cl::desc("Dependences should be simplified (yes/no)"),
|
cl::desc("Dependences should be simplified (yes/no)"),
|
||||||
|
@ -420,8 +425,22 @@ bool IslScheduleOptimizer::runOnScop(Scop &S) {
|
||||||
// Build input data.
|
// Build input data.
|
||||||
int ValidityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
int ValidityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
||||||
| Dependences::TYPE_WAW;
|
| Dependences::TYPE_WAW;
|
||||||
int ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
int ProximityKinds;
|
||||||
| Dependences::TYPE_WAW;
|
|
||||||
|
if (OptimizeDeps == "all")
|
||||||
|
ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
||||||
|
| Dependences::TYPE_WAW;
|
||||||
|
else if (OptimizeDeps == "raw")
|
||||||
|
ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
||||||
|
| Dependences::TYPE_WAW;
|
||||||
|
else {
|
||||||
|
errs() << "Do not know how to optimize for '" << OptimizeDeps << "'"
|
||||||
|
<< " Falling back to optimizing all dependences.\n";
|
||||||
|
ProximityKinds = Dependences::TYPE_RAW | Dependences::TYPE_WAR
|
||||||
|
| Dependences::TYPE_WAW;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
isl_union_map *Validity = D->getDependences(ValidityKinds);
|
isl_union_map *Validity = D->getDependences(ValidityKinds);
|
||||||
isl_union_map *Proximity = D->getDependences(ProximityKinds);
|
isl_union_map *Proximity = D->getDependences(ProximityKinds);
|
||||||
|
|
Loading…
Reference in New Issue