diff options
-rw-r--r-- | doc/user.pod | 38 | ||||
-rw-r--r-- | include/isl/aff.h | 31 | ||||
-rw-r--r-- | include/isl/aff_type.h | 3 | ||||
-rw-r--r-- | include/isl/multi.h | 1 | ||||
-rw-r--r-- | isl_aff.c | 5 | ||||
-rw-r--r-- | isl_aff_private.h | 5 | ||||
-rw-r--r-- | isl_output.c | 30 | ||||
-rw-r--r-- | print.c | 3 |
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) } @@ -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)); +} @@ -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> |