diff --git a/polly/lib/Analysis/DependenceInfo.cpp b/polly/lib/Analysis/DependenceInfo.cpp --- a/polly/lib/Analysis/DependenceInfo.cpp +++ b/polly/lib/Analysis/DependenceInfo.cpp @@ -190,7 +190,7 @@ /// Fix all dimension of @p Zero to 0 and add it to @p user static void fixSetToZero(isl::set Zero, isl::union_set *User) { - for (auto i : seq(0, Zero.dim(isl::dim::set))) + for (auto i : seq(0, Zero.tuple_dim())) Zero = Zero.fix_si(isl::dim::set, i, 0); *User = User->add_set(Zero); } diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp --- a/polly/lib/Analysis/ScopBuilder.cpp +++ b/polly/lib/Analysis/ScopBuilder.cpp @@ -202,7 +202,7 @@ static isl::map createNextIterationMap(isl::space SetSpace, unsigned Dim) { isl::space MapSpace = SetSpace.map_from_set(); isl::map NextIterationMap = isl::map::universe(MapSpace); - for (auto u : seq(0, NextIterationMap.dim(isl::dim::in))) + for (auto u : seq(0, NextIterationMap.domain_tuple_dim())) if (u != (isl_size)Dim) NextIterationMap = NextIterationMap.equate(isl::dim::in, u, isl::dim::out, u); @@ -230,10 +230,10 @@ /// both with regards to the dimension @p Dim. static std::pair partitionSetParts(isl::set S, unsigned Dim) { - for (unsigned u = 0, e = S.n_dim(); u < e; u++) + for (unsigned u = 0, e = S.tuple_dim(); u < e; u++) S = S.lower_bound_si(isl::dim::set, u, 0); - unsigned NumDimsS = S.n_dim(); + unsigned NumDimsS = S.tuple_dim(); isl::set OnlyDimS = S; // Remove dimensions that are greater than Dim as they are not interesting. @@ -328,7 +328,7 @@ } else { assert(OldDepth > NewDepth); int Diff = OldDepth - NewDepth; - int NumDim = Dom.n_dim(); + int NumDim = Dom.tuple_dim(); assert(NumDim >= Diff); Dom = Dom.project_out(isl::dim::set, NumDim - Diff, Diff); } @@ -909,7 +909,7 @@ continue; isl::set Domain = scop->getDomainConditions(BB); - scop->updateMaxLoopDepth(isl_set_n_dim(Domain.get())); + scop->updateMaxLoopDepth(Domain.tuple_dim()); auto *BBLoop = getRegionNodeLoop(RN, LI); // Propagate the domain from BB directly to blocks that have a superset @@ -1162,7 +1162,7 @@ auto Result = isl::union_pw_multi_aff::empty(USet.get_space()); for (isl::set S : USet.get_set_list()) { - int Dim = S.dim(isl::dim::set); + int Dim = S.tuple_dim(); auto PMA = isl::pw_multi_aff::project_out_map(S.get_space(), isl::dim::set, N, Dim - N); if (N > 1) @@ -2405,7 +2405,7 @@ isl::map Transform = isl::map::universe(Array->getSpace().map_from_set()); std::vector Int; - int Dims = Elements.dim(isl::dim::set); + int Dims = Elements.tuple_dim(); for (int i = 0; i < Dims; i++) { isl::set DimOnly = isl::set(Elements).project_out(isl::dim::set, 0, i); DimOnly = DimOnly.project_out(isl::dim::set, 1, Dims - i - 1); @@ -3386,7 +3386,7 @@ static isl::set getAccessDomain(MemoryAccess *MA) { isl::set Domain = MA->getStatement()->getDomain(); - Domain = Domain.project_out(isl::dim::set, 0, Domain.n_dim()); + Domain = Domain.project_out(isl::dim::set, 0, Domain.tuple_dim()); return Domain.reset_tuple_id(); } diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -253,7 +253,7 @@ ScopArrayInfo::~ScopArrayInfo() = default; isl::space ScopArrayInfo::getSpace() const { - auto Space = isl::space(Id.get_ctx(), 0, getNumberOfDimensions()); + isl::space Space = isl::space(Id.get_ctx(), 0, getNumberOfDimensions()); Space = Space.set_tuple_id(isl::dim::set, Id); return Space; } @@ -1006,7 +1006,7 @@ static isl::map getEqualAndLarger(isl::space SetDomain) { isl::space Space = SetDomain.map_from_set(); isl::map Map = isl::map::universe(Space); - unsigned lastDimension = Map.dim(isl::dim::in) - 1; + unsigned lastDimension = Map.domain_tuple_dim() - 1; // Set all but the last dimension to be equal for the input and output // @@ -1046,10 +1046,9 @@ Stride = getStride(Schedule); StrideX = isl::set::universe(Stride.get_space()); - for (auto i : seq(0, StrideX.dim(isl::dim::set) - 1)) + for (auto i : seq(0, StrideX.tuple_dim() - 1)) StrideX = StrideX.fix_si(isl::dim::set, i, 0); - StrideX = StrideX.fix_si(isl::dim::set, StrideX.dim(isl::dim::set) - 1, - StrideWidth); + StrideX = StrideX.fix_si(isl::dim::set, StrideX.tuple_dim() - 1, StrideWidth); IsStrideX = Stride.is_subset(StrideX); return IsStrideX; diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp --- a/polly/lib/CodeGen/PPCGCodeGeneration.cpp +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -1151,7 +1151,7 @@ isl::set ZeroSet = isl::set::universe(Min.get_space()); - for (long i = 0, n = Min.dim(isl::dim::set); i < n; i++) + for (long i = 0, n = Min.tuple_dim(); i < n; i++) ZeroSet = ZeroSet.fix_si(isl::dim::set, i, 0); if (Min.is_subset(ZeroSet)) { @@ -1160,7 +1160,7 @@ isl::ast_expr Result = isl::ast_expr::from_val(isl::val(Min.get_ctx(), 0)); - for (long i = 0, n = Min.dim(isl::dim::set); i < n; i++) { + for (long i = 0, n = Min.tuple_dim(); i < n; i++) { if (i > 0) { isl::pw_aff Bound_I = isl::manage(isl_multi_pw_aff_get_pw_aff(Array->bound, i - 1)); diff --git a/polly/lib/External/isl/include/isl/isl-noexceptions.h b/polly/lib/External/isl/include/isl/isl-noexceptions.h --- a/polly/lib/External/isl/include/isl/isl-noexceptions.h +++ b/polly/lib/External/isl/include/isl/isl-noexceptions.h @@ -1250,6 +1250,7 @@ inline boolean domain_is_wrapping() const; inline map domain_map() const; inline map domain_product(map map2) const; + inline isl_size domain_tuple_dim() const; inline map drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; inline map drop_constraints_not_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; inline map drop_unused_params() const; @@ -1380,6 +1381,7 @@ inline map range_map() const; inline map range_product(map map2) const; inline map range_reverse() const; + inline isl_size range_tuple_dim() const; inline map remove_dims(isl::dim type, unsigned int first, unsigned int n) const; inline map remove_divs() const; inline map remove_divs_involving_dims(isl::dim type, unsigned int first, unsigned int n) const; @@ -2922,6 +2924,7 @@ inline set subtract(set set2) const; inline set sum(set set2) const; inline map translation() const; + inline isl_size tuple_dim() const; inline set unbind_params(multi_id tuple) const; inline map unbind_params_insert_domain(multi_id domain) const; inline set unite(set set2) const; @@ -8336,6 +8339,12 @@ return manage(res); } +isl_size map::domain_tuple_dim() const +{ + auto res = isl_map_domain_tuple_dim(get()); + return res; +} + map map::drop_constraints_involving_dims(isl::dim type, unsigned int first, unsigned int n) const { auto res = isl_map_drop_constraints_involving_dims(copy(), static_cast(type), first, n); @@ -9126,6 +9135,12 @@ return manage(res); } +isl_size map::range_tuple_dim() const +{ + auto res = isl_map_range_tuple_dim(get()); + return res; +} + map map::remove_dims(isl::dim type, unsigned int first, unsigned int n) const { auto res = isl_map_remove_dims(copy(), static_cast(type), first, n); @@ -16338,6 +16353,12 @@ return manage(res); } +isl_size set::tuple_dim() const +{ + auto res = isl_set_tuple_dim(get()); + return res; +} + set set::unbind_params(multi_id tuple) const { auto res = isl_set_unbind_params(copy(), tuple.release()); diff --git a/polly/lib/External/isl/include/isl/map.h b/polly/lib/External/isl/include/isl/map.h --- a/polly/lib/External/isl/include/isl/map.h +++ b/polly/lib/External/isl/include/isl/map.h @@ -34,6 +34,10 @@ isl_size isl_basic_map_dim(__isl_keep isl_basic_map *bmap, enum isl_dim_type type); +__isl_export +isl_size isl_map_domain_tuple_dim(__isl_keep isl_map *map); +__isl_export +isl_size isl_map_range_tuple_dim(__isl_keep isl_map *map); isl_size isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type); isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap); diff --git a/polly/lib/External/isl/include/isl/set.h b/polly/lib/External/isl/include/isl/set.h --- a/polly/lib/External/isl/include/isl/set.h +++ b/polly/lib/External/isl/include/isl/set.h @@ -34,6 +34,8 @@ isl_size isl_set_n_dim(__isl_keep isl_set *set); isl_size isl_set_n_param(__isl_keep isl_set *set); +__isl_export +isl_size isl_set_tuple_dim(__isl_keep isl_set *set); isl_size isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type); isl_ctx *isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset); diff --git a/polly/lib/External/isl/isl_map.c b/polly/lib/External/isl/isl_map.c --- a/polly/lib/External/isl/isl_map.c +++ b/polly/lib/External/isl/isl_map.c @@ -112,11 +112,32 @@ return isl_space_dim(isl_map_peek_space(map), type); } +/* Return the dimensionality of the domain (tuple) of the map. + */ +isl_size isl_map_domain_tuple_dim(__isl_keep isl_map *map) +{ + return isl_map_dim(map, isl_dim_in); +} + +/* Return the dimensionality of the range (tuple) of the map. + */ +isl_size isl_map_range_tuple_dim(__isl_keep isl_map *map) +{ + return isl_map_dim(map, isl_dim_out); +} + isl_size isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type) { return isl_map_dim(set_to_map(set), type); } +/* Return the dimensionality of the (tuple of the) set. + */ +isl_size isl_set_tuple_dim(__isl_keep isl_set *set) +{ + return isl_set_dim(set, isl_dim_set); +} + /* Return the position of the variables of the given type * within the sequence of variables of "bmap". */ diff --git a/polly/lib/Support/ISLTools.cpp b/polly/lib/Support/ISLTools.cpp --- a/polly/lib/Support/ISLTools.cpp +++ b/polly/lib/Support/ISLTools.cpp @@ -166,7 +166,7 @@ if (Map.is_null()) continue; - Dims = std::max(Dims, Map.dim(isl::dim::out)); + Dims = std::max(Dims, Map.range_tuple_dim()); } return Dims; } @@ -214,7 +214,7 @@ } isl::set polly::shiftDim(isl::set Set, int Pos, int Amount) { - int NumDims = Set.dim(isl::dim::set); + int NumDims = Set.tuple_dim(); if (Pos < 0) Pos = NumDims + Pos; assert(Pos < NumDims && "Dimension index must be in range"); diff --git a/polly/lib/Transform/FlattenAlgo.cpp b/polly/lib/Transform/FlattenAlgo.cpp --- a/polly/lib/Transform/FlattenAlgo.cpp +++ b/polly/lib/Transform/FlattenAlgo.cpp @@ -29,7 +29,7 @@ auto ParamDims = Set.dim(isl::dim::param); Set = Set.project_out(isl::dim::param, 0, ParamDims); Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.dim(isl::dim::set); + auto SetDims = Set.tuple_dim(); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -40,7 +40,7 @@ /// Min_p <= x <= Max_p. bool isDimBoundedByParameter(isl::set Set, unsigned dim) { Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.dim(isl::dim::set); + auto SetDims = Set.tuple_dim(); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -135,7 +135,7 @@ if (Map.is_null()) continue; - Dims = std::max(Dims, Map.dim(isl::dim::out)); + Dims = std::max(Dims, Map.range_tuple_dim()); } return Dims; } @@ -144,7 +144,7 @@ isl::union_pw_aff scheduleExtractDimAff(isl::union_map UMap, unsigned pos) { auto SingleUMap = isl::union_map::empty(UMap.get_space()); for (isl::map Map : UMap.get_map_list()) { - unsigned MapDims = Map.dim(isl::dim::out); + unsigned MapDims = Map.range_tuple_dim(); isl::map SingleMap = Map.project_out(isl::dim::out, 0, pos); SingleMap = SingleMap.project_out(isl::dim::out, 1, MapDims - pos - 1); SingleUMap = SingleUMap.add_map(SingleMap); @@ -176,10 +176,10 @@ /// { Stmt_X[] -> [X - l_X, ...]; Stmt_B -> [l_X - u_X + 1 + Y - l_Y, ...] } isl::union_map tryFlattenSequence(isl::union_map Schedule) { auto IslCtx = Schedule.get_ctx(); - auto ScatterSet = isl::set(Schedule.range()); + isl::set ScatterSet = isl::set(Schedule.range()); auto ParamSpace = Schedule.get_space().params(); - auto Dims = ScatterSet.dim(isl::dim::set); + auto Dims = ScatterSet.tuple_dim(); assert(Dims >= 2); // Would cause an infinite loop. @@ -268,7 +268,7 @@ auto SubSchedule = flattenSchedule(Remaining); auto SubDims = scheduleScatterDims(SubSchedule); - auto SubExtent = isl::set(SubSchedule.range()); + isl::set SubExtent = isl::set(SubSchedule.range()); auto SubExtentDims = SubExtent.dim(isl::dim::param); SubExtent = SubExtent.project_out(isl::dim::param, 0, SubExtentDims); SubExtent = SubExtent.project_out(isl::dim::set, 1, SubDims - 1); diff --git a/polly/lib/Transform/MatmulOptimizer.cpp b/polly/lib/Transform/MatmulOptimizer.cpp --- a/polly/lib/Transform/MatmulOptimizer.cpp +++ b/polly/lib/Transform/MatmulOptimizer.cpp @@ -317,7 +317,7 @@ MatMulInfoTy &MMI) { auto InputDimId = PartialSchedule.get_tuple_id(isl::dim::in); auto *Stmt = static_cast(InputDimId.get_user()); - isl_size OutDimNum = PartialSchedule.dim(isl::dim::out); + isl_size OutDimNum = PartialSchedule.range_tuple_dim(); assert(OutDimNum > 2 && "In case of the matrix multiplication the loop nest " "and, consequently, the corresponding scheduling " "functions have at least three dimensions."); @@ -729,7 +729,7 @@ // Insert into the schedule tree. isl::map ExtMap = MapOldIndVar.project_out( - isl::dim::out, 2, MapOldIndVar.dim(isl::dim::out) - 2); + isl::dim::out, 2, MapOldIndVar.range_tuple_dim() - 2); ExtMap = ExtMap.reverse(); ExtMap = ExtMap.fix_si(isl::dim::out, MMI.i, 0); ExtMap = ExtMap.intersect_range(Domain); @@ -869,10 +869,10 @@ MacroKernelParamsTy MacroKernelParams) { auto Child = Node.child(0); auto UnMapOldIndVar = Child.get_prefix_schedule_union_map(); - auto MapOldIndVar = isl::map::from_union_map(UnMapOldIndVar); - if (MapOldIndVar.dim(isl::dim::out) > 9) + isl::map MapOldIndVar = isl::map::from_union_map(UnMapOldIndVar); + if (MapOldIndVar.range_tuple_dim() > 9) return MapOldIndVar.project_out(isl::dim::out, 0, - MapOldIndVar.dim(isl::dim::out) - 9); + MapOldIndVar.range_tuple_dim() - 9); return MapOldIndVar; } @@ -896,7 +896,7 @@ isl::schedule_node Child = Node.get_child(0); isl::union_map UnMapOldIndVar = Child.get_prefix_schedule_relation(); isl::set Prefix = isl::map::from_union_map(UnMapOldIndVar).range(); - isl_size Dims = Prefix.dim(isl::dim::set); + isl_size Dims = Prefix.tuple_dim(); Prefix = Prefix.project_out(isl::dim::set, Dims - 1, 1); Prefix = getPartialTilePrefixes(Prefix, MicroKernelParams.Nr); Prefix = getPartialTilePrefixes(Prefix, MicroKernelParams.Mr); @@ -955,7 +955,7 @@ auto Domain = Node.get_universe_domain(); assert(isl_union_set_n_set(Domain.get()) == 1); if (Node.get_schedule_depth() != 0 || - (isl::set(Domain).dim(isl::dim::set) != + (isl::set(Domain).tuple_dim() != isl_schedule_node_band_n_member(Node.get()))) return Node; Node = isl::manage(isl_schedule_node_delete(Node.copy())); diff --git a/polly/lib/Transform/MaximalStaticExpansion.cpp b/polly/lib/Transform/MaximalStaticExpansion.cpp --- a/polly/lib/Transform/MaximalStaticExpansion.cpp +++ b/polly/lib/Transform/MaximalStaticExpansion.cpp @@ -121,7 +121,7 @@ auto ParamDims = Set.dim(isl::dim::param); Set = Set.project_out(isl::dim::param, 0, ParamDims); Set = Set.project_out(isl::dim::set, 0, dim); - auto SetDims = Set.dim(isl::dim::set); + auto SetDims = Set.tuple_dim(); Set = Set.project_out(isl::dim::set, 1, SetDims - 1); return bool(Set.is_bounded()); } @@ -348,9 +348,9 @@ ScopArrayInfo *MaximalStaticExpander::expandAccess(Scop &S, MemoryAccess *MA) { // Get the current AM. - auto CurrentAccessMap = MA->getAccessRelation(); + isl::map CurrentAccessMap = MA->getAccessRelation(); - unsigned in_dimensions = CurrentAccessMap.dim(isl::dim::in); + unsigned in_dimensions = CurrentAccessMap.domain_tuple_dim(); // Get domain from the current AM. auto Domain = CurrentAccessMap.domain(); diff --git a/polly/lib/Transform/ScheduleTreeTransform.cpp b/polly/lib/Transform/ScheduleTreeTransform.cpp --- a/polly/lib/Transform/ScheduleTreeTransform.cpp +++ b/polly/lib/Transform/ScheduleTreeTransform.cpp @@ -237,7 +237,7 @@ isl::union_map NewPartialSchedMap = isl::union_map::from(PartialSched); unsigned BandDims = isl_schedule_node_band_n_member(OldNode.get()); for (isl::map Ext : NewChildExtensions.get_map_list()) { - unsigned ExtDims = Ext.dim(isl::dim::in); + unsigned ExtDims = Ext.domain_tuple_dim(); assert(ExtDims >= BandDims); unsigned OuterDims = ExtDims - BandDims; @@ -485,7 +485,7 @@ /// @param Set A set, which should be modified. /// @param VectorWidth A parameter, which determines the constraint. static isl::set addExtentConstraints(isl::set Set, int VectorWidth) { - unsigned Dims = Set.dim(isl::dim::set); + unsigned Dims = Set.tuple_dim(); isl::space Space = Set.get_space(); isl::local_space LocalSpace = isl::local_space(Space); isl::constraint ExtConstr = isl::constraint::alloc_inequality(LocalSpace); @@ -651,7 +651,7 @@ isl::set polly::getPartialTilePrefixes(isl::set ScheduleRange, int VectorWidth) { - isl_size Dims = ScheduleRange.dim(isl::dim::set); + isl_size Dims = ScheduleRange.tuple_dim(); isl::set LoopPrefixes = ScheduleRange.drop_constraints_involving_dims(isl::dim::set, Dims - 1, 1); auto ExtentPrefixes = addExtentConstraints(LoopPrefixes, VectorWidth); @@ -663,7 +663,7 @@ isl::union_set polly::getIsolateOptions(isl::set IsolateDomain, isl_size OutDimsNum) { - isl_size Dims = IsolateDomain.dim(isl::dim::set); + isl_size Dims = IsolateDomain.tuple_dim(); assert(OutDimsNum <= Dims && "The isl::set IsolateDomain is used to describe the range of schedule " "dimensions values, which should be isolated. Consequently, the " diff --git a/polly/lib/Transform/ZoneAlgo.cpp b/polly/lib/Transform/ZoneAlgo.cpp --- a/polly/lib/Transform/ZoneAlgo.cpp +++ b/polly/lib/Transform/ZoneAlgo.cpp @@ -685,11 +685,10 @@ TargetStmt->getSurroundingLoop())) { isl::set DefDomain = getDomainFor(DefStmt); isl::set TargetDomain = getDomainFor(TargetStmt); - assert(DefDomain.dim(isl::dim::set) <= TargetDomain.dim(isl::dim::set)); + assert(DefDomain.tuple_dim() <= TargetDomain.tuple_dim()); Result = isl::map::from_domain_and_range(DefDomain, TargetDomain); - for (unsigned i = 0, DefDims = DefDomain.dim(isl::dim::set); i < DefDims; - i += 1) + for (unsigned i = 0, DefDims = DefDomain.tuple_dim(); i < DefDims; i += 1) Result = Result.equate(isl::dim::in, i, isl::dim::out, i); }