Add isl_schedule_constraints_copy
authorAndreas Kloeckner <inform@tiker.net>
Mon, 6 Jan 2014 12:40:52 +0000 (6 13:40 +0100)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 6 Jan 2014 15:54:02 +0000 (6 16:54 +0100)
The wrapper generator in islpy depends on there being a "copy" method
for (to first order) all types for which it writes wrappers, as
"__isl_take" arguments are automatically copied on input.

Signed-off-by: Andreas Kloeckner <inform@tiker.net>
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/schedule.h
isl_schedule.c

index d8115a2..acaf0c2 100644 (file)
@@ -5691,6 +5691,9 @@ and manipulated using the following functions.
 
        #include <isl/schedule.h>
        __isl_give isl_schedule_constraints *
+       isl_schedule_constraints_copy(
+               __isl_keep isl_schedule_constraints *sc);
+       __isl_give isl_schedule_constraints *
        isl_schedule_constraints_on_domain(
                __isl_take isl_union_set *domain);
        isl_ctx *isl_schedule_constraints_get_ctx(
index 347bf9d..139a7e5 100644 (file)
@@ -38,6 +38,8 @@ int isl_options_get_schedule_separate_components(isl_ctx *ctx);
 int isl_options_set_schedule_fuse(isl_ctx *ctx, int val);
 int isl_options_get_schedule_fuse(isl_ctx *ctx);
 
+__isl_give isl_schedule_constraints *isl_schedule_constraints_copy(
+       __isl_keep isl_schedule_constraints *sc);
 __isl_give isl_schedule_constraints *isl_schedule_constraints_on_domain(
        __isl_take isl_union_set *domain);
 __isl_give isl_schedule_constraints *isl_schedule_constraints_set_validity(
index 472c7f5..95555ad 100644 (file)
  * Parallelization and Locality Optimization in the Polyhedral Model".
  */
 
+ __isl_give isl_schedule_constraints *isl_schedule_constraints_copy(
+       __isl_keep isl_schedule_constraints *sc)
+{
+       isl_ctx *ctx;
+       isl_schedule_constraints *sc_copy;
+       enum isl_edge_type i;
+
+       ctx = isl_union_set_get_ctx(sc->domain);
+       sc_copy = isl_calloc_type(ctx, struct isl_schedule_constraints);
+       if (!sc_copy)
+               return NULL;
+
+       sc_copy->domain = isl_union_set_copy(sc->domain);
+       if (!sc_copy->domain)
+               return isl_schedule_constraints_free(sc_copy);
+
+       for (i = isl_edge_first; i <= isl_edge_last; ++i) {
+               sc_copy->constraint[i] = isl_union_map_copy(sc->constraint[i]);
+               if (!sc_copy->constraint[i])
+                       return isl_schedule_constraints_free(sc_copy);
+       }
+
+       return sc_copy;
+}
+
+
 /* Construct an isl_schedule_constraints object for computing a schedule
  * on "domain".  The initial object does not impose any constraints.
  */