diff options
author | Tobias Grosser <tobias@grosser.es> | 2017-05-23 07:22:56 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2017-05-23 07:22:56 +0000 |
commit | a32de1341ebbe079f2f430445ca3f671edac50db (patch) | |
tree | 54f689c65c8944546933dbc2348bce38f8c21935 | |
parent | 7e0aeeb884c3689dd2102ffdf73004cde092f166 (diff) | |
download | bcm5719-llvm-a32de1341ebbe079f2f430445ca3f671edac50db.tar.gz bcm5719-llvm-a32de1341ebbe079f2f430445ca3f671edac50db.zip |
[ScopInfo] Translate foldAccessRelation to isl C++ [NFC]
llvm-svn: 303615
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 97 |
1 files changed, 47 insertions, 50 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 09cc79a337e..4be93387c4c 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -846,72 +846,69 @@ void MemoryAccess::foldAccessRelation() { int Size = Subscripts.size(); - isl_map *OldAccessRelation = isl_map_copy(AccessRelation); + isl::map NewAccessRelation = give(isl_map_copy(AccessRelation)); for (int i = Size - 2; i >= 0; --i) { - isl_space *Space; - isl_map *MapOne, *MapTwo; - isl_pw_aff *DimSize = getPwAff(Sizes[i + 1]); + isl::space Space; + isl::map MapOne, MapTwo; + isl::pw_aff DimSize = give(getPwAff(Sizes[i + 1])); - isl_space *SpaceSize = isl_pw_aff_get_space(DimSize); - isl_pw_aff_free(DimSize); - isl_id *ParamId = isl_space_get_dim_id(SpaceSize, isl_dim_param, 0); + isl::space SpaceSize = DimSize.get_space(); + isl::id ParamId = + give(isl_space_get_dim_id(SpaceSize.get(), isl_dim_param, 0)); - Space = isl_map_get_space(AccessRelation); - Space = isl_space_map_from_set(isl_space_range(Space)); - Space = isl_space_align_params(Space, SpaceSize); + Space = give(isl_map_copy(AccessRelation)).get_space(); + Space = Space.range().map_from_set(); + Space = Space.align_params(SpaceSize); - int ParamLocation = isl_space_find_dim_by_id(Space, isl_dim_param, ParamId); - isl_id_free(ParamId); + int ParamLocation = Space.find_dim_by_id(isl::dim::param, ParamId); - MapOne = isl_map_universe(isl_space_copy(Space)); + MapOne = isl::map::universe(Space); for (int j = 0; j < Size; ++j) - MapOne = isl_map_equate(MapOne, isl_dim_in, j, isl_dim_out, j); - MapOne = isl_map_lower_bound_si(MapOne, isl_dim_in, i + 1, 0); + MapOne = MapOne.equate(isl::dim::in, j, isl::dim::out, j); + MapOne = MapOne.lower_bound_si(isl::dim::in, i + 1, 0); - MapTwo = isl_map_universe(isl_space_copy(Space)); + MapTwo = isl::map::universe(Space); for (int j = 0; j < Size; ++j) if (j < i || j > i + 1) - MapTwo = isl_map_equate(MapTwo, isl_dim_in, j, isl_dim_out, j); - - isl_local_space *LS = isl_local_space_from_space(Space); - isl_constraint *C; - C = isl_equality_alloc(isl_local_space_copy(LS)); - C = isl_constraint_set_constant_si(C, -1); - C = isl_constraint_set_coefficient_si(C, isl_dim_in, i, 1); - C = isl_constraint_set_coefficient_si(C, isl_dim_out, i, -1); - MapTwo = isl_map_add_constraint(MapTwo, C); - C = isl_equality_alloc(LS); - C = isl_constraint_set_coefficient_si(C, isl_dim_in, i + 1, 1); - C = isl_constraint_set_coefficient_si(C, isl_dim_out, i + 1, -1); - C = isl_constraint_set_coefficient_si(C, isl_dim_param, ParamLocation, 1); - MapTwo = isl_map_add_constraint(MapTwo, C); - MapTwo = isl_map_upper_bound_si(MapTwo, isl_dim_in, i + 1, -1); - - MapOne = isl_map_union(MapOne, MapTwo); - AccessRelation = isl_map_apply_range(AccessRelation, MapOne); - } - - isl_id *BaseAddrId = getScopArrayInfo()->getBasePtrId(); - auto Space = Statement->getDomainSpace(); - AccessRelation = isl_map_set_tuple_id( - AccessRelation, isl_dim_in, isl_space_get_tuple_id(Space, isl_dim_set)); - AccessRelation = - isl_map_set_tuple_id(AccessRelation, isl_dim_out, BaseAddrId); - AccessRelation = isl_map_gist_domain(AccessRelation, Statement->getDomain()); + MapTwo = MapTwo.equate(isl::dim::in, j, isl::dim::out, j); + + isl::local_space LS(Space); + isl::constraint C; + C = isl::constraint::alloc_equality(LS); + C = C.set_constant_si(-1); + C = C.set_coefficient_si(isl::dim::in, i, 1); + C = C.set_coefficient_si(isl::dim::out, i, -1); + MapTwo = MapTwo.add_constraint(C); + C = isl::constraint::alloc_equality(LS); + C = C.set_coefficient_si(isl::dim::in, i + 1, 1); + C = C.set_coefficient_si(isl::dim::out, i + 1, -1); + C = C.set_coefficient_si(isl::dim::param, ParamLocation, 1); + MapTwo = MapTwo.add_constraint(C); + MapTwo = MapTwo.upper_bound_si(isl::dim::in, i + 1, -1); + + MapOne = MapOne.unite(MapTwo); + NewAccessRelation = NewAccessRelation.apply_range(MapOne); + } + + isl::id BaseAddrId = give(getScopArrayInfo()->getBasePtrId()); + isl::space Space = give(Statement->getDomainSpace()); + NewAccessRelation = NewAccessRelation.set_tuple_id( + isl::dim::in, Space.get_tuple_id(isl::dim::set)); + NewAccessRelation = NewAccessRelation.set_tuple_id(isl::dim::out, BaseAddrId); + NewAccessRelation = + NewAccessRelation.gist_domain(give(Statement->getDomain())); // Access dimension folding might in certain cases increase the number of // disjuncts in the memory access, which can possibly complicate the generated // run-time checks and can lead to costly compilation. - if (!PollyPreciseFoldAccesses && isl_map_n_basic_map(AccessRelation) > - isl_map_n_basic_map(OldAccessRelation)) { - isl_map_free(AccessRelation); - AccessRelation = OldAccessRelation; + if (!PollyPreciseFoldAccesses && + isl_map_n_basic_map(NewAccessRelation.get()) > + isl_map_n_basic_map(AccessRelation)) { } else { - isl_map_free(OldAccessRelation); + isl_map_free(AccessRelation); + AccessRelation = NewAccessRelation.release(); } - - isl_space_free(Space); } /// Check if @p Expr is divisible by @p Size. |