diff options
-rw-r--r-- | polly/lib/ScheduleOptimizer.cpp | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/polly/lib/ScheduleOptimizer.cpp b/polly/lib/ScheduleOptimizer.cpp index 26f439f8758..3d8e28f0a62 100644 --- a/polly/lib/ScheduleOptimizer.cpp +++ b/polly/lib/ScheduleOptimizer.cpp @@ -197,33 +197,21 @@ void IslScheduleOptimizer::extendScattering(Scop &S, unsigned NewDimensions) { ScopStmt *Stmt = *SI; unsigned OldDimensions = Stmt->getNumScattering(); isl_space *Space; - isl_basic_map *ChangeScattering; + isl_map *Map, *New; Space = isl_space_alloc(Stmt->getIslCtx(), 0, OldDimensions, NewDimensions); - ChangeScattering = isl_basic_map_universe(isl_space_copy(Space)); - isl_local_space *LocalSpace = isl_local_space_from_space(Space); - - for (unsigned i = 0; i < OldDimensions; i++) { - isl_constraint *c = isl_equality_alloc(isl_local_space_copy(LocalSpace)); - isl_constraint_set_coefficient_si(c, isl_dim_in, i, 1); - isl_constraint_set_coefficient_si(c, isl_dim_out, i, -1); - ChangeScattering = isl_basic_map_add_constraint(ChangeScattering, c); - } + Map = isl_map_universe(Space); - for (unsigned i = OldDimensions; i < NewDimensions; i++) { - isl_constraint *c = isl_equality_alloc(isl_local_space_copy(LocalSpace)); - isl_constraint_set_coefficient_si(c, isl_dim_out, i, 1); - ChangeScattering = isl_basic_map_add_constraint(ChangeScattering, c); - } + for (unsigned i = 0; i < OldDimensions; i++) + Map = isl_map_equate(Map, isl_dim_in, i, isl_dim_out, i); + + for (unsigned i = OldDimensions; i < NewDimensions; i++) + Map = isl_map_fix_si(Map, isl_dim_out, i, 0); - isl_map *ChangeScatteringMap = isl_map_from_basic_map(ChangeScattering); - ChangeScatteringMap = isl_map_align_params(ChangeScatteringMap, - S.getParamSpace()); - isl_map *NewScattering = isl_map_apply_range(Stmt->getScattering(), - ChangeScatteringMap); - Stmt->setScattering(NewScattering); - isl_local_space_free(LocalSpace); + Map = isl_map_align_params(Map, S.getParamSpace()); + New = isl_map_apply_range(Stmt->getScattering(), Map); + Stmt->setScattering(New); } } |