From b3ad85b03c374ca10bb748c968e17f3d7fbb34eb Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Mon, 30 Jan 2012 19:38:50 +0000 Subject: [PATCH] Scheduler: Allow to select the fusion strategy llvm-svn: 149265 --- polly/lib/ScheduleOptimizer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp index 4ceb11d9a8e9..c7f5801802fa 100644 --- a/polly/lib/ScheduleOptimizer.cpp +++ b/polly/lib/ScheduleOptimizer.cpp @@ -56,6 +56,11 @@ SimplifyDeps("polly-opt-simplify-deps", cl::desc("Dependences should be simplified (yes/no)"), cl::Hidden, cl::init("yes")); +static cl::opt +FusionStrategy("polly-opt-fusion", + cl::desc("The fusion strategy to choose (min/max)"), + cl::Hidden, cl::init("max")); + namespace { class IslScheduleOptimizer : public ScopPass { @@ -459,6 +464,19 @@ bool IslScheduleOptimizer::runOnScop(Scop &S) { DEBUG(dbgs() << "Validity := "; isl_union_map_dump(validity); dbgs() << ";\n"); + int IslFusionStrategy; + + if (FusionStrategy == "max") { + IslFusionStrategy = ISL_SCHEDULE_FUSE_MAX; + } else if (FusionStrategy == "min") { + IslFusionStrategy = ISL_SCHEDULE_FUSE_MIN; + } else { + errs() << "warning: Unknown fusion strategy. Falling back to maximal " + "fusion.\n"; + IslFusionStrategy = ISL_SCHEDULE_FUSE_MAX; + } + + isl_options_set_schedule_fuse(S.getIslCtx(), IslFusionStrategy); isl_options_set_schedule_max_constant_term(S.getIslCtx(), CONSTANT_BOUND); isl_options_set_schedule_maximize_band_depth(S.getIslCtx(), 1);