summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/user.pod38
-rw-r--r--include/isl/aff.h31
-rw-r--r--include/isl/aff_type.h3
-rw-r--r--include/isl/multi.h1
-rw-r--r--isl_aff.c5
-rw-r--r--isl_aff_private.h5
-rw-r--r--isl_output.c30
-rw-r--r--print.c3
8 files changed, 115 insertions, 1 deletions
diff --git a/doc/user.pod b/doc/user.pod
index 7e00955b..9823d99a 100644
--- a/doc/user.pod
+++ b/doc/user.pod
@@ -746,6 +746,10 @@ of the original object.
__isl_keep isl_pw_multi_aff *pma);
__isl_give isl_space *isl_union_pw_multi_aff_get_space(
__isl_keep isl_union_pw_multi_aff *upma);
+ __isl_give isl_space *isl_multi_pw_aff_get_domain_space(
+ __isl_keep isl_multi_pw_aff *mpa);
+ __isl_give isl_space *isl_multi_pw_aff_get_space(
+ __isl_keep isl_multi_pw_aff *mpa);
#include <isl/point.h>
__isl_give isl_space *isl_point_get_space(
@@ -3578,14 +3582,18 @@ An expression can be printed using
An C<isl_multi_aff> object represents a sequence of
zero or more affine expressions, all defined on the same domain space.
+Similarly, an C<isl_multi_pw_aff> object represents a sequence of
+zero or more piecewise affine expressions.
An C<isl_multi_aff> can be constructed from a single
C<isl_aff> or an C<isl_aff_list> using the
-following functions.
+following functions. Similarly for C<isl_multi_pw_aff>.
#include <isl/aff.h>
__isl_give isl_multi_aff *isl_multi_aff_from_aff(
__isl_take isl_aff *aff);
+ __isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_pw_aff(
+ __isl_take isl_pw_aff *pa);
__isl_give isl_multi_aff *isl_multi_aff_from_aff_list(
__isl_take isl_space *space,
__isl_take isl_aff_list *list);
@@ -3604,10 +3612,14 @@ can be created using the following functions.
__isl_take isl_space *space);
__isl_give isl_multi_aff *isl_multi_aff_zero(
__isl_take isl_space *space);
+ __isl_give isl_multi_pw_aff *isl_multi_pw_aff_zero(
+ __isl_take isl_space *space);
__isl_give isl_multi_aff *isl_multi_aff_identity(
__isl_take isl_space *space);
__isl_give isl_pw_multi_aff *isl_pw_multi_aff_identity(
__isl_take isl_space *space);
+ __isl_give isl_multi_pw_aff *isl_multi_pw_aff_identity(
+ __isl_take isl_space *space);
__isl_give isl_pw_multi_aff *
isl_pw_multi_aff_from_multi_aff(
__isl_take isl_multi_aff *ma);
@@ -3655,6 +3667,11 @@ Multiple quasi affine expressions can be copied and freed using
void *isl_union_pw_multi_aff_free(
__isl_take isl_union_pw_multi_aff *upma);
+ __isl_give isl_multi_pw_aff *isl_multi_pw_aff_copy(
+ __isl_keep isl_multi_pw_aff *mpa);
+ void *isl_multi_pw_aff_free(
+ __isl_take isl_multi_pw_aff *mpa);
+
The expression can be inspected using
#include <isl/aff.h>
@@ -3664,15 +3681,22 @@ The expression can be inspected using
__isl_keep isl_pw_multi_aff *pma);
isl_ctx *isl_union_pw_multi_aff_get_ctx(
__isl_keep isl_union_pw_multi_aff *upma);
+ isl_ctx *isl_multi_pw_aff_get_ctx(
+ __isl_keep isl_multi_pw_aff *mpa);
unsigned isl_multi_aff_dim(__isl_keep isl_multi_aff *maff,
enum isl_dim_type type);
unsigned isl_pw_multi_aff_dim(
__isl_keep isl_pw_multi_aff *pma,
enum isl_dim_type type);
+ unsigned isl_multi_pw_aff_dim(
+ __isl_keep isl_multi_pw_aff *mpa,
+ enum isl_dim_type type);
__isl_give isl_aff *isl_multi_aff_get_aff(
__isl_keep isl_multi_aff *multi, int pos);
__isl_give isl_pw_aff *isl_pw_multi_aff_get_pw_aff(
__isl_keep isl_pw_multi_aff *pma, int pos);
+ __isl_give isl_pw_aff *isl_multi_pw_aff_get_pw_aff(
+ __isl_keep isl_multi_pw_aff *mpa, int pos);
const char *isl_pw_multi_aff_get_dim_name(
__isl_keep isl_pw_multi_aff *pma,
enum isl_dim_type type, unsigned pos);
@@ -3725,6 +3749,11 @@ It can be modified using
__isl_take isl_pw_multi_aff *pma,
enum isl_dim_type type, __isl_take isl_id *id);
+ __isl_give isl_multi_pw_aff *
+ isl_multi_pw_aff_set_dim_name(
+ __isl_take isl_multi_pw_aff *mpa,
+ enum isl_dim_type type, unsigned pos, const char *s);
+
__isl_give isl_multi_aff *isl_multi_aff_drop_dims(
__isl_take isl_multi_aff *maff,
enum isl_dim_type type, unsigned first, unsigned n);
@@ -3818,6 +3847,10 @@ Operations include
isl_union_pw_multi_aff_flat_range_product(
__isl_take isl_union_pw_multi_aff *upma1,
__isl_take isl_union_pw_multi_aff *upma2);
+ __isl_give isl_multi_pw_aff *
+ isl_multi_pw_aff_flat_range_product(
+ __isl_take isl_multi_pw_aff *mpa1,
+ __isl_take isl_multi_pw_aff *mpa2);
If the C<ls> argument of C<isl_multi_aff_lift> is not C<NULL>,
then it is assigned the local space that lies at the basis of
@@ -3855,6 +3888,9 @@ An expression can be printed using
__isl_give isl_printer *isl_printer_print_union_pw_multi_aff(
__isl_take isl_printer *p,
__isl_keep isl_union_pw_multi_aff *upma);
+ __isl_give isl_printer *isl_printer_print_multi_pw_aff(
+ __isl_take isl_printer *p,
+ __isl_keep isl_multi_pw_aff *mpa);
=head2 Points
diff --git a/include/isl/aff.h b/include/isl/aff.h
index 08b75b97..bfd2f5f5 100644
--- a/include/isl/aff.h
+++ b/include/isl/aff.h
@@ -475,6 +475,37 @@ __isl_give isl_union_map *isl_union_map_from_union_pw_multi_aff(
__isl_give isl_printer *isl_printer_print_union_pw_multi_aff(
__isl_take isl_printer *p, __isl_keep isl_union_pw_multi_aff *upma);
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_zero(__isl_take isl_space *space);
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_identity(
+ __isl_take isl_space *space);
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_pw_aff(
+ __isl_take isl_pw_aff *pa);
+
+isl_ctx *isl_multi_pw_aff_get_ctx(__isl_keep isl_multi_pw_aff *mpa);
+__isl_give isl_space *isl_multi_pw_aff_get_space(
+ __isl_keep isl_multi_pw_aff *mpa);
+__isl_give isl_space *isl_multi_pw_aff_get_domain_space(
+ __isl_keep isl_multi_pw_aff *mpa);
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_copy(
+ __isl_keep isl_multi_pw_aff *mpa);
+void *isl_multi_pw_aff_free(__isl_take isl_multi_pw_aff *mpa);
+
+unsigned isl_multi_pw_aff_dim(__isl_keep isl_multi_pw_aff *mpa,
+ enum isl_dim_type type);
+__isl_give isl_pw_aff *isl_multi_pw_aff_get_pw_aff(
+ __isl_keep isl_multi_pw_aff *mpa, int pos);
+
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_set_dim_name(
+ __isl_take isl_multi_pw_aff *mpa,
+ enum isl_dim_type type, unsigned pos, const char *s);
+
+__isl_give isl_multi_pw_aff *isl_multi_pw_aff_flat_range_product(
+ __isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2);
+
+__isl_give isl_printer *isl_printer_print_multi_pw_aff(
+ __isl_take isl_printer *p, __isl_keep isl_multi_pw_aff *mpa);
+void isl_multi_pw_aff_dump(__isl_keep isl_multi_pw_aff *mpa);
+
#if defined(__cplusplus)
}
#endif
diff --git a/include/isl/aff_type.h b/include/isl/aff_type.h
index 4be4d79f..e5308c70 100644
--- a/include/isl/aff_type.h
+++ b/include/isl/aff_type.h
@@ -16,4 +16,7 @@ typedef struct isl_pw_multi_aff isl_pw_multi_aff;
struct isl_union_pw_multi_aff;
typedef struct isl_union_pw_multi_aff isl_union_pw_multi_aff;
+struct isl_multi_pw_aff;
+typedef struct isl_multi_pw_aff isl_multi_pw_aff;
+
#endif
diff --git a/include/isl/multi.h b/include/isl/multi.h
index 31de5719..31b7acaf 100644
--- a/include/isl/multi.h
+++ b/include/isl/multi.h
@@ -17,6 +17,7 @@ __isl_give isl_multi_##BASE *isl_multi_##BASE##_set_##BASE( \
__isl_take isl_##BASE *el);
ISL_DECLARE_MULTI(aff)
+ISL_DECLARE_MULTI(pw_aff)
#if defined(__cplusplus)
}
diff --git a/isl_aff.c b/isl_aff.c
index 9ad26d6d..657b863d 100644
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -3817,3 +3817,8 @@ error:
isl_pw_aff_free(pa);
return NULL;
}
+
+#undef BASE
+#define BASE pw_aff
+
+#include <isl_multi_templ.c>
diff --git a/isl_aff_private.h b/isl_aff_private.h
index 06ee1ebc..770b73b9 100644
--- a/isl_aff_private.h
+++ b/isl_aff_private.h
@@ -99,4 +99,9 @@ __isl_give isl_pw_multi_aff *isl_pw_multi_aff_substitute(
__isl_take isl_pw_multi_aff *pma, enum isl_dim_type type, unsigned pos,
__isl_keep isl_pw_aff *subs);
+#undef BASE
+#define BASE pw_aff
+
+#include <isl_multi_templ.h>
+
#endif
diff --git a/isl_output.c b/isl_output.c
index 702a7f71..35c7cd36 100644
--- a/isl_output.c
+++ b/isl_output.c
@@ -2484,3 +2484,33 @@ error:
isl_printer_free(p);
return NULL;
}
+
+static __isl_give isl_printer *print_multi_pw_aff_isl(__isl_take isl_printer *p,
+ __isl_keep isl_multi_pw_aff *mpa)
+{
+ int i;
+
+ if (!mpa)
+ return isl_printer_free(p);
+
+ p = isl_printer_print_str(p, "(");
+ for (i = 0; i < mpa->n; ++i) {
+ if (i)
+ p = isl_printer_print_str(p, ",");
+ p = isl_printer_print_pw_aff(p, mpa->p[i]);
+ }
+ p = isl_printer_print_str(p, ")");
+ return p;
+}
+
+__isl_give isl_printer *isl_printer_print_multi_pw_aff(
+ __isl_take isl_printer *p, __isl_keep isl_multi_pw_aff *mpa)
+{
+ if (!p || !mpa)
+ return isl_printer_free(p);
+
+ if (p->output_format == ISL_FORMAT_ISL)
+ return print_multi_pw_aff_isl(p, mpa);
+ isl_die(p->ctx, isl_error_unsupported, "unsupported output format",
+ return isl_printer_free(p));
+}
diff --git a/print.c b/print.c
index 90e0deb8..abd8ad4b 100644
--- a/print.c
+++ b/print.c
@@ -79,5 +79,8 @@
#define BASE union_pw_multi_aff
#include <print_templ.c>
#undef BASE
+#define BASE multi_pw_aff
+#include <print_templ.c>
+#undef BASE
#define BASE point
#include <print_templ.c>