[Polly][Isl] Replacing isl method `to_str()` with `stringFromIslObj()`. NFC.

This is part of an effort to reduce the differences between the custom C++ bindings used right now by polly in `lib/External/isl/include/isl/isl-noxceptions.h` and the official isl C++ interface.

Changes made:
 - Removing method `to_str()` from all the classes in the isl C++ bindings.
 - Overload method `stringFromIslObj()` so it accepts isl C++ objects.
 - To keep backward compatibility `stringFromIslObj()` now accepts a value that is returned if the isl C object is `null` or doesn't have a string representation (by default it's an empty string). In some cases it's better to have the string "null" instead of an empty string.
 - isl-noexceptions.h has been generated by this https://github.com/patacca/isl/commit/d33ec3a3bbaf971b254a853e6d8200ff9f5a1385

Reviewed By: Meinersbur

Differential Revision: https://reviews.llvm.org/D104211

GitOrigin-RevId: cfe117def7b0714e5d724c80839e68f40fba4f47
diff --git a/include/polly/Support/GICHelper.h b/include/polly/Support/GICHelper.h
index ca8abe4..59f1f89 100644
--- a/include/polly/Support/GICHelper.h
+++ b/include/polly/Support/GICHelper.h
@@ -150,71 +150,93 @@
 
 /// Get c++ string from Isl objects.
 //@{
-std::string stringFromIslObj(__isl_keep isl_map *map);
-std::string stringFromIslObj(__isl_keep isl_union_map *umap);
-std::string stringFromIslObj(__isl_keep isl_set *set);
-std::string stringFromIslObj(__isl_keep isl_union_set *uset);
-std::string stringFromIslObj(__isl_keep isl_schedule *schedule);
-std::string stringFromIslObj(__isl_keep isl_multi_aff *maff);
-std::string stringFromIslObj(__isl_keep isl_pw_multi_aff *pma);
-std::string stringFromIslObj(__isl_keep isl_multi_pw_aff *mpa);
-std::string stringFromIslObj(__isl_keep isl_union_pw_multi_aff *upma);
-std::string stringFromIslObj(__isl_keep isl_aff *aff);
-std::string stringFromIslObj(__isl_keep isl_pw_aff *pwaff);
-std::string stringFromIslObj(__isl_keep isl_space *space);
+#define ISL_CPP_OBJECT_TO_STRING(name)                                         \
+  inline std::string stringFromIslObj(const name &Obj,                         \
+                                      std::string DefaultValue = "") {         \
+    return stringFromIslObj(Obj.get(), DefaultValue);                          \
+  }
+
+#define ISL_OBJECT_TO_STRING(name)                                             \
+  std::string stringFromIslObj(__isl_keep isl_##name *Obj,                     \
+                               std::string DefaultValue = "");                 \
+  ISL_CPP_OBJECT_TO_STRING(isl::name)
+
+ISL_OBJECT_TO_STRING(aff)
+ISL_OBJECT_TO_STRING(ast_expr)
+ISL_OBJECT_TO_STRING(ast_node)
+ISL_OBJECT_TO_STRING(basic_map)
+ISL_OBJECT_TO_STRING(basic_set)
+ISL_OBJECT_TO_STRING(map)
+ISL_OBJECT_TO_STRING(set)
+ISL_OBJECT_TO_STRING(id)
+ISL_OBJECT_TO_STRING(multi_aff)
+ISL_OBJECT_TO_STRING(multi_pw_aff)
+ISL_OBJECT_TO_STRING(multi_union_pw_aff)
+ISL_OBJECT_TO_STRING(point)
+ISL_OBJECT_TO_STRING(pw_aff)
+ISL_OBJECT_TO_STRING(pw_multi_aff)
+ISL_OBJECT_TO_STRING(schedule)
+ISL_OBJECT_TO_STRING(schedule_node)
+ISL_OBJECT_TO_STRING(space)
+ISL_OBJECT_TO_STRING(union_access_info)
+ISL_OBJECT_TO_STRING(union_flow)
+ISL_OBJECT_TO_STRING(union_set)
+ISL_OBJECT_TO_STRING(union_map)
+ISL_OBJECT_TO_STRING(union_pw_aff)
+ISL_OBJECT_TO_STRING(union_pw_multi_aff)
 //@}
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_union_map *Map) {
-  OS << polly::stringFromIslObj(Map);
+  OS << polly::stringFromIslObj(Map, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_map *Map) {
-  OS << polly::stringFromIslObj(Map);
+  OS << polly::stringFromIslObj(Map, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_set *Set) {
-  OS << polly::stringFromIslObj(Set);
+  OS << polly::stringFromIslObj(Set, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_pw_aff *Map) {
-  OS << polly::stringFromIslObj(Map);
+  OS << polly::stringFromIslObj(Map, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_pw_multi_aff *PMA) {
-  OS << polly::stringFromIslObj(PMA);
+  OS << polly::stringFromIslObj(PMA, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_multi_aff *MA) {
-  OS << polly::stringFromIslObj(MA);
+  OS << polly::stringFromIslObj(MA, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_union_pw_multi_aff *UPMA) {
-  OS << polly::stringFromIslObj(UPMA);
+  OS << polly::stringFromIslObj(UPMA, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_schedule *Schedule) {
-  OS << polly::stringFromIslObj(Schedule);
+  OS << polly::stringFromIslObj(Schedule, "null");
   return OS;
 }
 
 inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                                      __isl_keep isl_space *Space) {
-  OS << polly::stringFromIslObj(Space);
+  OS << polly::stringFromIslObj(Space, "null");
   return OS;
 }
 
@@ -263,7 +285,7 @@
 inline llvm::DiagnosticInfoOptimizationBase &
 operator<<(llvm::DiagnosticInfoOptimizationBase &OS,
            const isl::union_map &Obj) {
-  OS << Obj.to_str();
+  OS << stringFromIslObj(Obj);
   return OS;
 }
 
diff --git a/include/polly/Support/ISLOStream.h b/include/polly/Support/ISLOStream.h
index 08853a2..5f05850 100644
--- a/include/polly/Support/ISLOStream.h
+++ b/include/polly/Support/ISLOStream.h
@@ -10,6 +10,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "polly/Support/GICHelper.h"
 #include "llvm/Support/raw_ostream.h"
 #include "isl/isl-noexceptions.h"
 namespace polly {
@@ -17,7 +18,7 @@
 #define ADD_OSTREAM_PRINTER(name)                                              \
   inline llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,                  \
                                        const name &Obj) {                      \
-    OS << Obj.to_str();                                                        \
+    OS << stringFromIslObj(Obj);                                               \
     return OS;                                                                 \
   }
 
diff --git a/lib/Analysis/PolyhedralInfo.cpp b/lib/Analysis/PolyhedralInfo.cpp
index f4094f3..d5c258b 100644
--- a/lib/Analysis/PolyhedralInfo.cpp
+++ b/lib/Analysis/PolyhedralInfo.cpp
@@ -86,10 +86,12 @@
                        Dependences::TYPE_WAR | Dependences::TYPE_RED)
           .release();
 
-  LLVM_DEBUG(dbgs() << "Dependences :\t" << stringFromIslObj(Deps) << "\n");
+  LLVM_DEBUG(dbgs() << "Dependences :\t" << stringFromIslObj(Deps, "null")
+                    << "\n");
 
   isl_union_map *Schedule = getScheduleForLoop(S, L);
-  LLVM_DEBUG(dbgs() << "Schedule: \t" << stringFromIslObj(Schedule) << "\n");
+  LLVM_DEBUG(dbgs() << "Schedule: \t" << stringFromIslObj(Schedule, "null")
+                    << "\n");
 
   IsParallel = D.isParallel(Schedule, Deps, MinDepDistPtr);
   isl_union_map_free(Schedule);
diff --git a/lib/Analysis/ScopBuilder.cpp b/lib/Analysis/ScopBuilder.cpp
index 61e6e12..c3fb92c 100644
--- a/lib/Analysis/ScopBuilder.cpp
+++ b/lib/Analysis/ScopBuilder.cpp
@@ -1615,7 +1615,8 @@
       }
     }
     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "UserAssumption", CI)
-             << "Use user assumption: " << stringFromIslObj(AssumptionCtx));
+             << "Use user assumption: "
+             << stringFromIslObj(AssumptionCtx, "null"));
     isl::set newContext =
         scop->getContext().intersect(isl::manage(AssumptionCtx));
     scop->setContext(newContext);
@@ -2869,7 +2870,7 @@
   isl::set UserContext = isl::set(scop->getIslCtx(), UserContextStr.c_str());
   isl::space Space = scop->getParamSpace();
   if (Space.dim(isl::dim::param) != UserContext.dim(isl::dim::param)) {
-    std::string SpaceStr = Space.to_str();
+    std::string SpaceStr = stringFromIslObj(Space, "null");
     errs() << "Error: the context provided in -polly-context has not the same "
            << "number of dimensions than the computed context. Due to this "
            << "mismatch, the -polly-context option is ignored. Please provide "
@@ -2883,7 +2884,7 @@
     std::string NameUserContext = UserContext.get_dim_name(isl::dim::param, i);
 
     if (NameContext != NameUserContext) {
-      std::string SpaceStr = Space.to_str();
+      std::string SpaceStr = stringFromIslObj(Space, "null");
       errs() << "Error: the name of dimension " << i
              << " provided in -polly-context "
              << "is '" << NameUserContext << "', but the name in the computed "
diff --git a/lib/Analysis/ScopInfo.cpp b/lib/Analysis/ScopInfo.cpp
index 9171362..2925cfd 100644
--- a/lib/Analysis/ScopInfo.cpp
+++ b/lib/Analysis/ScopInfo.cpp
@@ -618,7 +618,7 @@
 }
 
 std::string MemoryAccess::getOriginalAccessRelationStr() const {
-  return AccessRelation.to_str();
+  return stringFromIslObj(AccessRelation);
 }
 
 isl::space MemoryAccess::getOriginalAccessRelationSpace() const {
@@ -630,11 +630,11 @@
 }
 
 std::string MemoryAccess::getNewAccessRelationStr() const {
-  return NewAccessRelation.to_str();
+  return stringFromIslObj(NewAccessRelation);
 }
 
 std::string MemoryAccess::getAccessRelationStr() const {
-  return getAccessRelation().to_str();
+  return stringFromIslObj(getAccessRelation());
 }
 
 isl::basic_map MemoryAccess::createBasicAccessMap(ScopStmt *Statement) {
@@ -1233,15 +1233,10 @@
 
 ScopStmt::~ScopStmt() = default;
 
-std::string ScopStmt::getDomainStr() const { return Domain.to_str(); }
+std::string ScopStmt::getDomainStr() const { return stringFromIslObj(Domain); }
 
 std::string ScopStmt::getScheduleStr() const {
-  auto *S = getSchedule().release();
-  if (!S)
-    return {};
-  auto Str = stringFromIslObj(S);
-  isl_map_free(S);
-  return Str;
+  return stringFromIslObj(getSchedule());
 }
 
 void ScopStmt::setInvalidDomain(isl::set ID) { InvalidDomain = ID; }
@@ -1892,15 +1887,17 @@
   return SAI;
 }
 
-std::string Scop::getContextStr() const { return getContext().to_str(); }
+std::string Scop::getContextStr() const {
+  return stringFromIslObj(getContext());
+}
 
 std::string Scop::getAssumedContextStr() const {
   assert(!AssumedContext.is_null() && "Assumed context not yet built");
-  return AssumedContext.to_str();
+  return stringFromIslObj(AssumedContext);
 }
 
 std::string Scop::getInvalidContextStr() const {
-  return InvalidContext.to_str();
+  return stringFromIslObj(InvalidContext);
 }
 
 std::string Scop::getNameStr() const {
@@ -2103,7 +2100,7 @@
   }
 
   auto Suffix = Sign == AS_ASSUMPTION ? " assumption:\t" : " restriction:\t";
-  std::string Msg = toString(Kind) + Suffix + Set.to_str();
+  std::string Msg = toString(Kind) + Suffix + stringFromIslObj(Set);
   if (BB)
     ORE.emit(OptimizationRemarkAnalysis(DEBUG_TYPE, "AssumpRestrict", Loc, BB)
              << Msg);
diff --git a/lib/CodeGen/IslAst.cpp b/lib/CodeGen/IslAst.cpp
index e09b781..50a5909 100644
--- a/lib/CodeGen/IslAst.cpp
+++ b/lib/CodeGen/IslAst.cpp
@@ -766,11 +766,9 @@
   P = isl_ast_node_print(RootNode.get(), P, Options);
   AstStr = isl_printer_get_str(P);
 
-  auto *Schedule = S.getScheduleTree().release();
-
   LLVM_DEBUG({
     dbgs() << S.getContextStr() << "\n";
-    dbgs() << stringFromIslObj(Schedule);
+    dbgs() << stringFromIslObj(S.getScheduleTree(), "null");
   });
   OS << "\nif (" << RtCStr << ")\n\n";
   OS << AstStr << "\n";
@@ -780,7 +778,6 @@
   free(RtCStr);
   free(AstStr);
 
-  isl_schedule_free(Schedule);
   isl_printer_free(P);
 }
 
diff --git a/lib/External/isl/include/isl/isl-noexceptions.h b/lib/External/isl/include/isl/isl-noexceptions.h
index 8fc3983..c653cea 100644
--- a/lib/External/isl/include/isl/isl-noexceptions.h
+++ b/lib/External/isl/include/isl/isl-noexceptions.h
@@ -247,7 +247,6 @@
   inline __isl_give isl_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline aff add(aff aff2) const;
@@ -349,7 +348,6 @@
   inline __isl_give isl_aff_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline aff_list add(aff el) const;
@@ -432,7 +430,6 @@
   inline __isl_give isl_ast_expr *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline ast_expr access(ast_expr_list indices) const;
@@ -489,7 +486,6 @@
   inline __isl_give isl_ast_expr_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline ast_expr_list add(ast_expr el) const;
@@ -532,7 +528,6 @@
   inline __isl_give isl_ast_node *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   static inline ast_node alloc_user(ast_expr expr);
@@ -581,7 +576,6 @@
   inline __isl_give isl_ast_node_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline ast_node_list add(ast_node el) const;
@@ -625,7 +619,6 @@
   inline __isl_give isl_basic_map *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline basic_map add_constraint(constraint constraint) const;
@@ -757,7 +750,6 @@
   inline __isl_give isl_basic_map_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline basic_map_list add(basic_map el) const;
@@ -802,7 +794,6 @@
   inline __isl_give isl_basic_set *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline basic_set affine_hull() const;
@@ -905,7 +896,6 @@
   inline __isl_give isl_basic_set_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline basic_set_list add(basic_set el) const;
@@ -996,7 +986,6 @@
   inline __isl_give isl_constraint_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline constraint_list add(constraint el) const;
@@ -1039,7 +1028,6 @@
   inline __isl_give isl_fixed_box *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_aff get_offset() const;
@@ -1072,7 +1060,6 @@
   inline __isl_give isl_id *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   static inline id alloc(ctx ctx, const std::string &name, void * user);
@@ -1104,7 +1091,6 @@
   inline __isl_give isl_id_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline id_list add(id el) const;
@@ -1234,7 +1220,6 @@
   inline __isl_give isl_map *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline map add_constraint(constraint constraint) const;
@@ -1447,7 +1432,6 @@
   inline __isl_give isl_map_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline map_list add(map el) const;
@@ -1560,7 +1544,6 @@
   inline __isl_give isl_multi_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_aff add(multi_aff multi2) const;
@@ -1665,7 +1648,6 @@
   inline __isl_give isl_multi_id *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_id align_params(space model) const;
@@ -1719,7 +1701,6 @@
   inline __isl_give isl_multi_pw_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_pw_aff add(multi_pw_aff multi2) const;
@@ -1835,7 +1816,6 @@
   inline __isl_give isl_multi_union_pw_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_union_pw_aff add(multi_union_pw_aff multi2) const;
@@ -1930,7 +1910,6 @@
   inline __isl_give isl_multi_val *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline multi_val add(multi_val multi2) const;
@@ -2012,7 +1991,6 @@
   inline __isl_give isl_point *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline point add_ui(isl::dim type, int pos, unsigned int val) const;
@@ -2050,7 +2028,6 @@
   inline __isl_give isl_pw_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_aff add(pw_aff pwaff2) const;
@@ -2170,7 +2147,6 @@
   inline __isl_give isl_pw_aff_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_aff_list add(pw_aff el) const;
@@ -2224,7 +2200,6 @@
   inline __isl_give isl_pw_multi_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_multi_aff add(pw_multi_aff pma2) const;
@@ -2329,7 +2304,6 @@
   inline __isl_give isl_pw_multi_aff_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_multi_aff_list add(pw_multi_aff el) const;
@@ -2373,7 +2347,6 @@
   inline __isl_give isl_pw_qpolynomial *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_qpolynomial add(pw_qpolynomial pwqp2) const;
@@ -2451,7 +2424,6 @@
   inline __isl_give isl_pw_qpolynomial_fold_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
 };
@@ -2479,7 +2451,6 @@
   inline __isl_give isl_pw_qpolynomial_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline pw_qpolynomial_list add(pw_qpolynomial el) const;
@@ -2589,7 +2560,6 @@
   inline __isl_give isl_qpolynomial_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline qpolynomial_list add(qpolynomial el) const;
@@ -2633,7 +2603,6 @@
   inline __isl_give isl_schedule *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline schedule align_params(space space) const;
@@ -2677,7 +2646,6 @@
   inline __isl_give isl_schedule_constraints *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline schedule_constraints apply(union_map umap) const;
@@ -2720,7 +2688,6 @@
   inline __isl_give isl_schedule_node *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline schedule_node align_params(space space) const;
@@ -2812,7 +2779,6 @@
   inline __isl_give isl_set *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline set add_constraint(constraint constraint) const;
@@ -2993,7 +2959,6 @@
   inline __isl_give isl_set_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline set_list add(set el) const;
@@ -3039,7 +3004,6 @@
   inline __isl_give isl_space *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline space add_dims(isl::dim type, unsigned int n) const;
@@ -3172,7 +3136,6 @@
   inline __isl_give isl_union_access_info *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
 
   inline union_flow compute_flow() const;
   inline union_access_info set_kill(union_map kill) const;
@@ -3205,7 +3168,6 @@
   inline __isl_give isl_union_flow *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
 
   inline union_map get_full_may_dependence() const;
   inline union_map get_full_must_dependence() const;
@@ -3242,7 +3204,6 @@
   inline __isl_give isl_union_map *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_map add_map(map map) const;
@@ -3381,7 +3342,6 @@
   inline __isl_give isl_union_map_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_map_list add(union_map el) const;
@@ -3428,7 +3388,6 @@
   inline __isl_give isl_union_pw_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_pw_aff add(union_pw_aff upa2) const;
@@ -3499,7 +3458,6 @@
   inline __isl_give isl_union_pw_aff_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_pw_aff_list add(union_pw_aff el) const;
@@ -3550,7 +3508,6 @@
   inline __isl_give isl_union_pw_multi_aff *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_pw_multi_aff add(union_pw_multi_aff upma2) const;
@@ -3626,7 +3583,6 @@
   inline __isl_give isl_union_pw_multi_aff_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_pw_multi_aff_list add(union_pw_multi_aff el) const;
@@ -3670,7 +3626,6 @@
   inline __isl_give isl_union_pw_qpolynomial *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
 
   inline union_pw_qpolynomial add(union_pw_qpolynomial upwqp2) const;
   inline union_pw_qpolynomial add_pw_qpolynomial(pw_qpolynomial pwqp) const;
@@ -3739,7 +3694,6 @@
   inline __isl_give isl_union_set *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_set add_set(set set) const;
@@ -3828,7 +3782,6 @@
   inline __isl_give isl_union_set_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline union_set_list add(union_set el) const;
@@ -3874,7 +3827,6 @@
   inline __isl_give isl_val *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline val abs() const;
@@ -3956,7 +3908,6 @@
   inline __isl_give isl_val_list *release();
   inline bool is_null() const;
   inline ctx get_ctx() const;
-  inline std::string to_str() const;
   inline void dump() const;
 
   inline val_list add(val el) const;
@@ -4097,15 +4048,6 @@
 ctx aff::get_ctx() const {
   return ctx(isl_aff_get_ctx(ptr));
 }
-std::string aff::to_str() const {
-  char *Tmp = isl_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void aff::dump() const {
   isl_aff_dump(get());
@@ -4612,15 +4554,6 @@
 ctx aff_list::get_ctx() const {
   return ctx(isl_aff_list_get_ctx(ptr));
 }
-std::string aff_list::to_str() const {
-  char *Tmp = isl_aff_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void aff_list::dump() const {
   isl_aff_list_dump(get());
@@ -4920,15 +4853,6 @@
 ctx ast_expr::get_ctx() const {
   return ctx(isl_ast_expr_get_ctx(ptr));
 }
-std::string ast_expr::to_str() const {
-  char *Tmp = isl_ast_expr_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void ast_expr::dump() const {
   isl_ast_expr_dump(get());
@@ -5166,15 +5090,6 @@
 ctx ast_expr_list::get_ctx() const {
   return ctx(isl_ast_expr_list_get_ctx(ptr));
 }
-std::string ast_expr_list::to_str() const {
-  char *Tmp = isl_ast_expr_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void ast_expr_list::dump() const {
   isl_ast_expr_list_dump(get());
@@ -5334,15 +5249,6 @@
 ctx ast_node::get_ctx() const {
   return ctx(isl_ast_node_get_ctx(ptr));
 }
-std::string ast_node::to_str() const {
-  char *Tmp = isl_ast_node_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void ast_node::dump() const {
   isl_ast_node_dump(get());
@@ -5532,15 +5438,6 @@
 ctx ast_node_list::get_ctx() const {
   return ctx(isl_ast_node_list_get_ctx(ptr));
 }
-std::string ast_node_list::to_str() const {
-  char *Tmp = isl_ast_node_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void ast_node_list::dump() const {
   isl_ast_node_list_dump(get());
@@ -5705,15 +5602,6 @@
 ctx basic_map::get_ctx() const {
   return ctx(isl_basic_map_get_ctx(ptr));
 }
-std::string basic_map::to_str() const {
-  char *Tmp = isl_basic_map_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void basic_map::dump() const {
   isl_basic_map_dump(get());
@@ -6409,15 +6297,6 @@
 ctx basic_map_list::get_ctx() const {
   return ctx(isl_basic_map_list_get_ctx(ptr));
 }
-std::string basic_map_list::to_str() const {
-  char *Tmp = isl_basic_map_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void basic_map_list::dump() const {
   isl_basic_map_list_dump(get());
@@ -6587,15 +6466,6 @@
 ctx basic_set::get_ctx() const {
   return ctx(isl_basic_set_get_ctx(ptr));
 }
-std::string basic_set::to_str() const {
-  char *Tmp = isl_basic_set_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void basic_set::dump() const {
   isl_basic_set_dump(get());
@@ -7125,15 +6995,6 @@
 ctx basic_set_list::get_ctx() const {
   return ctx(isl_basic_set_list_get_ctx(ptr));
 }
-std::string basic_set_list::to_str() const {
-  char *Tmp = isl_basic_set_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void basic_set_list::dump() const {
   isl_basic_set_list_dump(get());
@@ -7481,15 +7342,6 @@
 ctx constraint_list::get_ctx() const {
   return ctx(isl_constraint_list_get_ctx(ptr));
 }
-std::string constraint_list::to_str() const {
-  char *Tmp = isl_constraint_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void constraint_list::dump() const {
   isl_constraint_list_dump(get());
@@ -7649,15 +7501,6 @@
 ctx fixed_box::get_ctx() const {
   return ctx(isl_fixed_box_get_ctx(ptr));
 }
-std::string fixed_box::to_str() const {
-  char *Tmp = isl_fixed_box_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void fixed_box::dump() const {
   isl_fixed_box_dump(get());
@@ -7748,15 +7591,6 @@
 ctx id::get_ctx() const {
   return ctx(isl_id_get_ctx(ptr));
 }
-std::string id::to_str() const {
-  char *Tmp = isl_id_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void id::dump() const {
   isl_id_dump(get());
@@ -7843,15 +7677,6 @@
 ctx id_list::get_ctx() const {
   return ctx(isl_id_list_get_ctx(ptr));
 }
-std::string id_list::to_str() const {
-  char *Tmp = isl_id_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void id_list::dump() const {
   isl_id_list_dump(get());
@@ -8337,15 +8162,6 @@
 ctx map::get_ctx() const {
   return ctx(isl_map_get_ctx(ptr));
 }
-std::string map::to_str() const {
-  char *Tmp = isl_map_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void map::dump() const {
   isl_map_dump(get());
@@ -9527,15 +9343,6 @@
 ctx map_list::get_ctx() const {
   return ctx(isl_map_list_get_ctx(ptr));
 }
-std::string map_list::to_str() const {
-  char *Tmp = isl_map_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void map_list::dump() const {
   isl_map_list_dump(get());
@@ -10011,15 +9818,6 @@
 ctx multi_aff::get_ctx() const {
   return ctx(isl_multi_aff_get_ctx(ptr));
 }
-std::string multi_aff::to_str() const {
-  char *Tmp = isl_multi_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void multi_aff::dump() const {
   isl_multi_aff_dump(get());
@@ -10542,15 +10340,6 @@
 ctx multi_id::get_ctx() const {
   return ctx(isl_multi_id_get_ctx(ptr));
 }
-std::string multi_id::to_str() const {
-  char *Tmp = isl_multi_id_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void multi_id::dump() const {
   isl_multi_id_dump(get());
@@ -10762,15 +10551,6 @@
 ctx multi_pw_aff::get_ctx() const {
   return ctx(isl_multi_pw_aff_get_ctx(ptr));
 }
-std::string multi_pw_aff::to_str() const {
-  char *Tmp = isl_multi_pw_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void multi_pw_aff::dump() const {
   isl_multi_pw_aff_dump(get());
@@ -11356,15 +11136,6 @@
 ctx multi_union_pw_aff::get_ctx() const {
   return ctx(isl_multi_union_pw_aff_get_ctx(ptr));
 }
-std::string multi_union_pw_aff::to_str() const {
-  char *Tmp = isl_multi_union_pw_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void multi_union_pw_aff::dump() const {
   isl_multi_union_pw_aff_dump(get());
@@ -11827,15 +11598,6 @@
 ctx multi_val::get_ctx() const {
   return ctx(isl_multi_val_get_ctx(ptr));
 }
-std::string multi_val::to_str() const {
-  char *Tmp = isl_multi_val_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void multi_val::dump() const {
   isl_multi_val_dump(get());
@@ -12221,15 +11983,6 @@
 ctx point::get_ctx() const {
   return ctx(isl_point_get_ctx(ptr));
 }
-std::string point::to_str() const {
-  char *Tmp = isl_point_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void point::dump() const {
   isl_point_dump(get());
@@ -12347,15 +12100,6 @@
 ctx pw_aff::get_ctx() const {
   return ctx(isl_pw_aff_get_ctx(ptr));
 }
-std::string pw_aff::to_str() const {
-  char *Tmp = isl_pw_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_aff::dump() const {
   isl_pw_aff_dump(get());
@@ -12978,15 +12722,6 @@
 ctx pw_aff_list::get_ctx() const {
   return ctx(isl_pw_aff_list_get_ctx(ptr));
 }
-std::string pw_aff_list::to_str() const {
-  char *Tmp = isl_pw_aff_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_aff_list::dump() const {
   isl_pw_aff_list_dump(get());
@@ -13209,15 +12944,6 @@
 ctx pw_multi_aff::get_ctx() const {
   return ctx(isl_pw_multi_aff_get_ctx(ptr));
 }
-std::string pw_multi_aff::to_str() const {
-  char *Tmp = isl_pw_multi_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_multi_aff::dump() const {
   isl_pw_multi_aff_dump(get());
@@ -13751,15 +13477,6 @@
 ctx pw_multi_aff_list::get_ctx() const {
   return ctx(isl_pw_multi_aff_list_get_ctx(ptr));
 }
-std::string pw_multi_aff_list::to_str() const {
-  char *Tmp = isl_pw_multi_aff_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_multi_aff_list::dump() const {
   isl_pw_multi_aff_list_dump(get());
@@ -13924,15 +13641,6 @@
 ctx pw_qpolynomial::get_ctx() const {
   return ctx(isl_pw_qpolynomial_get_ctx(ptr));
 }
-std::string pw_qpolynomial::to_str() const {
-  char *Tmp = isl_pw_qpolynomial_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_qpolynomial::dump() const {
   isl_pw_qpolynomial_dump(get());
@@ -14302,15 +14010,6 @@
 ctx pw_qpolynomial_fold_list::get_ctx() const {
   return ctx(isl_pw_qpolynomial_fold_list_get_ctx(ptr));
 }
-std::string pw_qpolynomial_fold_list::to_str() const {
-  char *Tmp = isl_pw_qpolynomial_fold_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_qpolynomial_fold_list::dump() const {
   isl_pw_qpolynomial_fold_list_dump(get());
@@ -14373,15 +14072,6 @@
 ctx pw_qpolynomial_list::get_ctx() const {
   return ctx(isl_pw_qpolynomial_list_get_ctx(ptr));
 }
-std::string pw_qpolynomial_list::to_str() const {
-  char *Tmp = isl_pw_qpolynomial_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void pw_qpolynomial_list::dump() const {
   isl_pw_qpolynomial_list_dump(get());
@@ -14858,15 +14548,6 @@
 ctx qpolynomial_list::get_ctx() const {
   return ctx(isl_qpolynomial_list_get_ctx(ptr));
 }
-std::string qpolynomial_list::to_str() const {
-  char *Tmp = isl_qpolynomial_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void qpolynomial_list::dump() const {
   isl_qpolynomial_list_dump(get());
@@ -15031,15 +14712,6 @@
 ctx schedule::get_ctx() const {
   return ctx(isl_schedule_get_ctx(ptr));
 }
-std::string schedule::to_str() const {
-  char *Tmp = isl_schedule_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void schedule::dump() const {
   isl_schedule_dump(get());
@@ -15196,15 +14868,6 @@
 ctx schedule_constraints::get_ctx() const {
   return ctx(isl_schedule_constraints_get_ctx(ptr));
 }
-std::string schedule_constraints::to_str() const {
-  char *Tmp = isl_schedule_constraints_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void schedule_constraints::dump() const {
   isl_schedule_constraints_dump(get());
@@ -15356,15 +15019,6 @@
 ctx schedule_node::get_ctx() const {
   return ctx(isl_schedule_node_get_ctx(ptr));
 }
-std::string schedule_node::to_str() const {
-  char *Tmp = isl_schedule_node_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void schedule_node::dump() const {
   isl_schedule_node_dump(get());
@@ -15814,15 +15468,6 @@
 ctx set::get_ctx() const {
   return ctx(isl_set_get_ctx(ptr));
 }
-std::string set::to_str() const {
-  char *Tmp = isl_set_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void set::dump() const {
   isl_set_dump(get());
@@ -16820,15 +16465,6 @@
 ctx set_list::get_ctx() const {
   return ctx(isl_set_list_get_ctx(ptr));
 }
-std::string set_list::to_str() const {
-  char *Tmp = isl_set_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void set_list::dump() const {
   isl_set_list_dump(get());
@@ -17004,15 +16640,6 @@
 ctx space::get_ctx() const {
   return ctx(isl_space_get_ctx(ptr));
 }
-std::string space::to_str() const {
-  char *Tmp = isl_space_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void space::dump() const {
   isl_space_dump(get());
@@ -17606,15 +17233,6 @@
 ctx union_access_info::get_ctx() const {
   return ctx(isl_union_access_info_get_ctx(ptr));
 }
-std::string union_access_info::to_str() const {
-  char *Tmp = isl_union_access_info_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 
 union_flow union_access_info::compute_flow() const
@@ -17708,15 +17326,6 @@
 ctx union_flow::get_ctx() const {
   return ctx(isl_union_flow_get_ctx(ptr));
 }
-std::string union_flow::to_str() const {
-  char *Tmp = isl_union_flow_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 
 union_map union_flow::get_full_may_dependence() const
@@ -17830,15 +17439,6 @@
 ctx union_map::get_ctx() const {
   return ctx(isl_union_map_get_ctx(ptr));
 }
-std::string union_map::to_str() const {
-  char *Tmp = isl_union_map_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_map::dump() const {
   isl_union_map_dump(get());
@@ -18574,15 +18174,6 @@
 ctx union_map_list::get_ctx() const {
   return ctx(isl_union_map_list_get_ctx(ptr));
 }
-std::string union_map_list::to_str() const {
-  char *Tmp = isl_union_map_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_map_list::dump() const {
   isl_union_map_list_dump(get());
@@ -18762,15 +18353,6 @@
 ctx union_pw_aff::get_ctx() const {
   return ctx(isl_union_pw_aff_get_ctx(ptr));
 }
-std::string union_pw_aff::to_str() const {
-  char *Tmp = isl_union_pw_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_pw_aff::dump() const {
   isl_union_pw_aff_dump(get());
@@ -19098,15 +18680,6 @@
 ctx union_pw_aff_list::get_ctx() const {
   return ctx(isl_union_pw_aff_list_get_ctx(ptr));
 }
-std::string union_pw_aff_list::to_str() const {
-  char *Tmp = isl_union_pw_aff_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_pw_aff_list::dump() const {
   isl_union_pw_aff_list_dump(get());
@@ -19306,15 +18879,6 @@
 ctx union_pw_multi_aff::get_ctx() const {
   return ctx(isl_union_pw_multi_aff_get_ctx(ptr));
 }
-std::string union_pw_multi_aff::to_str() const {
-  char *Tmp = isl_union_pw_multi_aff_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_pw_multi_aff::dump() const {
   isl_union_pw_multi_aff_dump(get());
@@ -19672,15 +19236,6 @@
 ctx union_pw_multi_aff_list::get_ctx() const {
   return ctx(isl_union_pw_multi_aff_list_get_ctx(ptr));
 }
-std::string union_pw_multi_aff_list::to_str() const {
-  char *Tmp = isl_union_pw_multi_aff_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_pw_multi_aff_list::dump() const {
   isl_union_pw_multi_aff_list_dump(get());
@@ -19845,15 +19400,6 @@
 ctx union_pw_qpolynomial::get_ctx() const {
   return ctx(isl_union_pw_qpolynomial_get_ctx(ptr));
 }
-std::string union_pw_qpolynomial::to_str() const {
-  char *Tmp = isl_union_pw_qpolynomial_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 
 union_pw_qpolynomial union_pw_qpolynomial::add(union_pw_qpolynomial upwqp2) const
@@ -20167,15 +19713,6 @@
 ctx union_set::get_ctx() const {
   return ctx(isl_union_set_get_ctx(ptr));
 }
-std::string union_set::to_str() const {
-  char *Tmp = isl_union_set_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_set::dump() const {
   isl_union_set_dump(get());
@@ -20619,15 +20156,6 @@
 ctx union_set_list::get_ctx() const {
   return ctx(isl_union_set_list_get_ctx(ptr));
 }
-std::string union_set_list::to_str() const {
-  char *Tmp = isl_union_set_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void union_set_list::dump() const {
   isl_union_set_list_dump(get());
@@ -20803,15 +20331,6 @@
 ctx val::get_ctx() const {
   return ctx(isl_val_get_ctx(ptr));
 }
-std::string val::to_str() const {
-  char *Tmp = isl_val_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void val::dump() const {
   isl_val_dump(get());
@@ -21197,15 +20716,6 @@
 ctx val_list::get_ctx() const {
   return ctx(isl_val_list_get_ctx(ptr));
 }
-std::string val_list::to_str() const {
-  char *Tmp = isl_val_list_to_str(get());
-  if (!Tmp)
-    return "";
-  std::string S(Tmp);
-  free(Tmp);
-  return S;
-}
-
 
 void val_list::dump() const {
   isl_val_list_dump(get());
diff --git a/lib/Support/GICHelper.cpp b/lib/Support/GICHelper.cpp
index 1230b48..d1da965 100644
--- a/lib/Support/GICHelper.cpp
+++ b/lib/Support/GICHelper.cpp
@@ -85,9 +85,10 @@
 template <typename ISLTy, typename ISL_CTX_GETTER, typename ISL_PRINTER>
 static inline std::string stringFromIslObjInternal(__isl_keep ISLTy *isl_obj,
                                                    ISL_CTX_GETTER ctx_getter_fn,
-                                                   ISL_PRINTER printer_fn) {
+                                                   ISL_PRINTER printer_fn,
+                                                   std::string DefaultValue) {
   if (!isl_obj)
-    return "null";
+    return DefaultValue;
   isl_ctx *ctx = ctx_getter_fn(isl_obj);
   isl_printer *p = isl_printer_to_str(ctx);
   p = printer_fn(p, isl_obj);
@@ -96,68 +97,42 @@
   if (char_str)
     string = char_str;
   else
-    string = "null";
+    string = DefaultValue;
   free(char_str);
   isl_printer_free(p);
   return string;
 }
 
-std::string polly::stringFromIslObj(__isl_keep isl_map *map) {
-  return stringFromIslObjInternal(map, isl_map_get_ctx, isl_printer_print_map);
-}
+#define ISL_C_OBJECT_TO_STRING(name)                                           \
+  std::string polly::stringFromIslObj(__isl_keep isl_##name *Obj,              \
+                                      std::string DefaultValue) {              \
+    return stringFromIslObjInternal(Obj, isl_##name##_get_ctx,                 \
+                                    isl_printer_print_##name, DefaultValue);   \
+  }
 
-std::string polly::stringFromIslObj(__isl_keep isl_set *set) {
-  return stringFromIslObjInternal(set, isl_set_get_ctx, isl_printer_print_set);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_union_map *umap) {
-  return stringFromIslObjInternal(umap, isl_union_map_get_ctx,
-                                  isl_printer_print_union_map);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_union_set *uset) {
-  return stringFromIslObjInternal(uset, isl_union_set_get_ctx,
-                                  isl_printer_print_union_set);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_schedule *schedule) {
-  return stringFromIslObjInternal(schedule, isl_schedule_get_ctx,
-                                  isl_printer_print_schedule);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_multi_aff *maff) {
-  return stringFromIslObjInternal(maff, isl_multi_aff_get_ctx,
-                                  isl_printer_print_multi_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_pw_multi_aff *pma) {
-  return stringFromIslObjInternal(pma, isl_pw_multi_aff_get_ctx,
-                                  isl_printer_print_pw_multi_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_multi_pw_aff *mpa) {
-  return stringFromIslObjInternal(mpa, isl_multi_pw_aff_get_ctx,
-                                  isl_printer_print_multi_pw_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_union_pw_multi_aff *upma) {
-  return stringFromIslObjInternal(upma, isl_union_pw_multi_aff_get_ctx,
-                                  isl_printer_print_union_pw_multi_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_aff *aff) {
-  return stringFromIslObjInternal(aff, isl_aff_get_ctx, isl_printer_print_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_pw_aff *pwaff) {
-  return stringFromIslObjInternal(pwaff, isl_pw_aff_get_ctx,
-                                  isl_printer_print_pw_aff);
-}
-
-std::string polly::stringFromIslObj(__isl_keep isl_space *space) {
-  return stringFromIslObjInternal(space, isl_space_get_ctx,
-                                  isl_printer_print_space);
-}
+ISL_C_OBJECT_TO_STRING(aff)
+ISL_C_OBJECT_TO_STRING(ast_expr)
+ISL_C_OBJECT_TO_STRING(ast_node)
+ISL_C_OBJECT_TO_STRING(basic_map)
+ISL_C_OBJECT_TO_STRING(basic_set)
+ISL_C_OBJECT_TO_STRING(map)
+ISL_C_OBJECT_TO_STRING(set)
+ISL_C_OBJECT_TO_STRING(id)
+ISL_C_OBJECT_TO_STRING(multi_aff)
+ISL_C_OBJECT_TO_STRING(multi_pw_aff)
+ISL_C_OBJECT_TO_STRING(multi_union_pw_aff)
+ISL_C_OBJECT_TO_STRING(point)
+ISL_C_OBJECT_TO_STRING(pw_aff)
+ISL_C_OBJECT_TO_STRING(pw_multi_aff)
+ISL_C_OBJECT_TO_STRING(schedule)
+ISL_C_OBJECT_TO_STRING(schedule_node)
+ISL_C_OBJECT_TO_STRING(space)
+ISL_C_OBJECT_TO_STRING(union_access_info)
+ISL_C_OBJECT_TO_STRING(union_flow)
+ISL_C_OBJECT_TO_STRING(union_set)
+ISL_C_OBJECT_TO_STRING(union_map)
+ISL_C_OBJECT_TO_STRING(union_pw_aff)
+ISL_C_OBJECT_TO_STRING(union_pw_multi_aff)
 
 static void replace(std::string &str, const std::string &find,
                     const std::string &replace) {
diff --git a/lib/Support/ISLTools.cpp b/lib/Support/ISLTools.cpp
index 954944c..bc4fda9 100644
--- a/lib/Support/ISLTools.cpp
+++ b/lib/Support/ISLTools.cpp
@@ -12,6 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "polly/Support/ISLTools.h"
+#include "polly/Support/GICHelper.h"
 #include "llvm/Support/raw_ostream.h"
 #include <cassert>
 #include <vector>
@@ -760,9 +761,9 @@
   for (const isl::basic_set &BSet : BSets) {
     std::string Str;
     if (IsMap)
-      Str = isl::map(BSet.unwrap()).to_str();
+      Str = stringFromIslObj(isl::map(BSet.unwrap()));
     else
-      Str = isl::set(BSet).to_str();
+      Str = stringFromIslObj(isl::set(BSet));
     size_t OpenPos = Str.find_first_of('{');
     assert(OpenPos != std::string::npos);
     size_t ClosePos = Str.find_last_of('}');