Home | History | Annotate | Download | only in isl
      1 #ifndef ISL_AFF_H
      2 #define ISL_AFF_H
      3 
      4 #include <isl/local_space.h>
      5 #include <isl/printer.h>
      6 #include <isl/set_type.h>
      7 #include <isl/aff_type.h>
      8 #include <isl/list.h>
      9 #include <isl/multi.h>
     10 #include <isl/union_set_type.h>
     11 
     12 #if defined(__cplusplus)
     13 extern "C" {
     14 #endif
     15 
     16 __isl_give isl_aff *isl_aff_zero_on_domain(__isl_take isl_local_space *ls);
     17 __isl_give isl_aff *isl_aff_var_on_domain(__isl_take isl_local_space *ls,
     18 	enum isl_dim_type type, unsigned pos);
     19 
     20 __isl_give isl_aff *isl_aff_copy(__isl_keep isl_aff *aff);
     21 void *isl_aff_free(__isl_take isl_aff *aff);
     22 
     23 isl_ctx *isl_aff_get_ctx(__isl_keep isl_aff *aff);
     24 
     25 int isl_aff_dim(__isl_keep isl_aff *aff, enum isl_dim_type type);
     26 int isl_aff_involves_dims(__isl_keep isl_aff *aff,
     27 	enum isl_dim_type type, unsigned first, unsigned n);
     28 
     29 __isl_give isl_space *isl_aff_get_domain_space(__isl_keep isl_aff *aff);
     30 __isl_give isl_space *isl_aff_get_space(__isl_keep isl_aff *aff);
     31 __isl_give isl_local_space *isl_aff_get_domain_local_space(
     32 	__isl_keep isl_aff *aff);
     33 __isl_give isl_local_space *isl_aff_get_local_space(__isl_keep isl_aff *aff);
     34 
     35 const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff,
     36 	enum isl_dim_type type, unsigned pos);
     37 int isl_aff_get_constant(__isl_keep isl_aff *aff, isl_int *v);
     38 int isl_aff_get_coefficient(__isl_keep isl_aff *aff,
     39 	enum isl_dim_type type, int pos, isl_int *v);
     40 int isl_aff_get_denominator(__isl_keep isl_aff *aff, isl_int *v);
     41 __isl_give isl_aff *isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v);
     42 __isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v);
     43 __isl_give isl_aff *isl_aff_set_coefficient(__isl_take isl_aff *aff,
     44 	enum isl_dim_type type, int pos, isl_int v);
     45 __isl_give isl_aff *isl_aff_set_coefficient_si(__isl_take isl_aff *aff,
     46 	enum isl_dim_type type, int pos, int v);
     47 __isl_give isl_aff *isl_aff_set_denominator(__isl_take isl_aff *aff, isl_int v);
     48 __isl_give isl_aff *isl_aff_add_constant(__isl_take isl_aff *aff, isl_int v);
     49 __isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v);
     50 __isl_give isl_aff *isl_aff_add_constant_num(__isl_take isl_aff *aff,
     51 	isl_int v);
     52 __isl_give isl_aff *isl_aff_add_constant_num_si(__isl_take isl_aff *aff, int v);
     53 __isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff,
     54 	enum isl_dim_type type, int pos, isl_int v);
     55 __isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff,
     56 	enum isl_dim_type type, int pos, int v);
     57 
     58 int isl_aff_is_cst(__isl_keep isl_aff *aff);
     59 
     60 __isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff,
     61 	enum isl_dim_type type, unsigned pos, const char *s);
     62 __isl_give isl_aff *isl_aff_set_dim_id(__isl_take isl_aff *aff,
     63 	enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
     64 
     65 int isl_aff_plain_is_equal(__isl_keep isl_aff *aff1, __isl_keep isl_aff *aff2);
     66 int isl_aff_plain_is_zero(__isl_keep isl_aff *aff);
     67 
     68 __isl_give isl_aff *isl_aff_get_div(__isl_keep isl_aff *aff, int pos);
     69 
     70 __isl_give isl_aff *isl_aff_neg(__isl_take isl_aff *aff);
     71 __isl_give isl_aff *isl_aff_ceil(__isl_take isl_aff *aff);
     72 __isl_give isl_aff *isl_aff_floor(__isl_take isl_aff *aff);
     73 __isl_give isl_aff *isl_aff_mod(__isl_take isl_aff *aff, isl_int mod);
     74 
     75 __isl_give isl_aff *isl_aff_mul(__isl_take isl_aff *aff1,
     76 	__isl_take isl_aff *aff2);
     77 __isl_give isl_aff *isl_aff_div(__isl_take isl_aff *aff1,
     78 	__isl_take isl_aff *aff2);
     79 __isl_give isl_aff *isl_aff_add(__isl_take isl_aff *aff1,
     80 	__isl_take isl_aff *aff2);
     81 __isl_give isl_aff *isl_aff_sub(__isl_take isl_aff *aff1,
     82 	__isl_take isl_aff *aff2);
     83 
     84 __isl_give isl_aff *isl_aff_scale(__isl_take isl_aff *aff, isl_int f);
     85 __isl_give isl_aff *isl_aff_scale_down(__isl_take isl_aff *aff, isl_int f);
     86 __isl_give isl_aff *isl_aff_scale_down_ui(__isl_take isl_aff *aff, unsigned f);
     87 
     88 __isl_give isl_aff *isl_aff_insert_dims(__isl_take isl_aff *aff,
     89 	enum isl_dim_type type, unsigned first, unsigned n);
     90 __isl_give isl_aff *isl_aff_add_dims(__isl_take isl_aff *aff,
     91 	enum isl_dim_type type, unsigned n);
     92 __isl_give isl_aff *isl_aff_drop_dims(__isl_take isl_aff *aff,
     93 	enum isl_dim_type type, unsigned first, unsigned n);
     94 __isl_give isl_aff *isl_aff_project_domain_on_params(__isl_take isl_aff *aff);
     95 
     96 __isl_give isl_aff *isl_aff_align_params(__isl_take isl_aff *aff,
     97 	__isl_take isl_space *model);
     98 
     99 __isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff,
    100 	__isl_take isl_set *context);
    101 __isl_give isl_aff *isl_aff_gist_params(__isl_take isl_aff *aff,
    102 	__isl_take isl_set *context);
    103 
    104 __isl_give isl_aff *isl_aff_pullback_multi_aff(__isl_take isl_aff *aff,
    105 	__isl_take isl_multi_aff *ma);
    106 
    107 __isl_give isl_basic_set *isl_aff_zero_basic_set(__isl_take isl_aff *aff);
    108 __isl_give isl_basic_set *isl_aff_neg_basic_set(__isl_take isl_aff *aff);
    109 
    110 __isl_give isl_basic_set *isl_aff_le_basic_set(__isl_take isl_aff *aff1,
    111 	__isl_take isl_aff *aff2);
    112 __isl_give isl_basic_set *isl_aff_ge_basic_set(__isl_take isl_aff *aff1,
    113 	__isl_take isl_aff *aff2);
    114 
    115 __isl_give isl_aff *isl_aff_read_from_str(isl_ctx *ctx, const char *str);
    116 __isl_give isl_printer *isl_printer_print_aff(__isl_take isl_printer *p,
    117 	__isl_keep isl_aff *aff);
    118 void isl_aff_dump(__isl_keep isl_aff *aff);
    119 
    120 isl_ctx *isl_pw_aff_get_ctx(__isl_keep isl_pw_aff *pwaff);
    121 __isl_give isl_space *isl_pw_aff_get_domain_space(__isl_keep isl_pw_aff *pwaff);
    122 __isl_give isl_space *isl_pw_aff_get_space(__isl_keep isl_pw_aff *pwaff);
    123 
    124 __isl_give isl_pw_aff *isl_pw_aff_from_aff(__isl_take isl_aff *aff);
    125 __isl_give isl_pw_aff *isl_pw_aff_empty(__isl_take isl_space *dim);
    126 __isl_give isl_pw_aff *isl_pw_aff_alloc(__isl_take isl_set *set,
    127 	__isl_take isl_aff *aff);
    128 __isl_give isl_pw_aff *isl_pw_aff_zero_on_domain(
    129 	__isl_take isl_local_space *ls);
    130 __isl_give isl_pw_aff *isl_pw_aff_var_on_domain(__isl_take isl_local_space *ls,
    131 	enum isl_dim_type type, unsigned pos);
    132 
    133 __isl_give isl_pw_aff *isl_set_indicator_function(__isl_take isl_set *set);
    134 
    135 const char *isl_pw_aff_get_dim_name(__isl_keep isl_pw_aff *pa,
    136 	enum isl_dim_type type, unsigned pos);
    137 int isl_pw_aff_has_dim_id(__isl_keep isl_pw_aff *pa,
    138 	enum isl_dim_type type, unsigned pos);
    139 __isl_give isl_id *isl_pw_aff_get_dim_id(__isl_keep isl_pw_aff *pa,
    140 	enum isl_dim_type type, unsigned pos);
    141 __isl_give isl_pw_aff *isl_pw_aff_set_dim_id(__isl_take isl_pw_aff *pma,
    142 	enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
    143 
    144 int isl_pw_aff_is_empty(__isl_keep isl_pw_aff *pwaff);
    145 int isl_pw_aff_plain_is_equal(__isl_keep isl_pw_aff *pwaff1,
    146 	__isl_keep isl_pw_aff *pwaff2);
    147 
    148 __isl_give isl_pw_aff *isl_pw_aff_union_min(__isl_take isl_pw_aff *pwaff1,
    149 	__isl_take isl_pw_aff *pwaff2);
    150 __isl_give isl_pw_aff *isl_pw_aff_union_max(__isl_take isl_pw_aff *pwaff1,
    151 	__isl_take isl_pw_aff *pwaff2);
    152 __isl_give isl_pw_aff *isl_pw_aff_union_add(__isl_take isl_pw_aff *pwaff1,
    153 	__isl_take isl_pw_aff *pwaff2);
    154 
    155 __isl_give isl_pw_aff *isl_pw_aff_copy(__isl_keep isl_pw_aff *pwaff);
    156 void *isl_pw_aff_free(__isl_take isl_pw_aff *pwaff);
    157 
    158 unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, enum isl_dim_type type);
    159 int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff,
    160 	enum isl_dim_type type, unsigned first, unsigned n);
    161 
    162 int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff);
    163 
    164 __isl_give isl_pw_aff *isl_pw_aff_align_params(__isl_take isl_pw_aff *pwaff,
    165 	__isl_take isl_space *model);
    166 
    167 __isl_give isl_id *isl_pw_aff_get_tuple_id(__isl_keep isl_pw_aff *pa,
    168 	enum isl_dim_type type);
    169 __isl_give isl_pw_aff *isl_pw_aff_set_tuple_id(__isl_take isl_pw_aff *pwaff,
    170 	enum isl_dim_type type, __isl_take isl_id *id);
    171 
    172 __isl_give isl_set *isl_pw_aff_domain(__isl_take isl_pw_aff *pwaff);
    173 
    174 __isl_give isl_pw_aff *isl_pw_aff_min(__isl_take isl_pw_aff *pwaff1,
    175 	__isl_take isl_pw_aff *pwaff2);
    176 __isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1,
    177 	__isl_take isl_pw_aff *pwaff2);
    178 __isl_give isl_pw_aff *isl_pw_aff_mul(__isl_take isl_pw_aff *pwaff1,
    179 	__isl_take isl_pw_aff *pwaff2);
    180 __isl_give isl_pw_aff *isl_pw_aff_div(__isl_take isl_pw_aff *pa1,
    181 	__isl_take isl_pw_aff *pa2);
    182 __isl_give isl_pw_aff *isl_pw_aff_add(__isl_take isl_pw_aff *pwaff1,
    183 	__isl_take isl_pw_aff *pwaff2);
    184 __isl_give isl_pw_aff *isl_pw_aff_sub(__isl_take isl_pw_aff *pwaff1,
    185 	__isl_take isl_pw_aff *pwaff2);
    186 __isl_give isl_pw_aff *isl_pw_aff_neg(__isl_take isl_pw_aff *pwaff);
    187 __isl_give isl_pw_aff *isl_pw_aff_ceil(__isl_take isl_pw_aff *pwaff);
    188 __isl_give isl_pw_aff *isl_pw_aff_floor(__isl_take isl_pw_aff *pwaff);
    189 __isl_give isl_pw_aff *isl_pw_aff_mod(__isl_take isl_pw_aff *pwaff,
    190 	isl_int mod);
    191 __isl_give isl_pw_aff *isl_pw_aff_tdiv_q(__isl_take isl_pw_aff *pa1,
    192 	__isl_take isl_pw_aff *pa2);
    193 __isl_give isl_pw_aff *isl_pw_aff_tdiv_r(__isl_take isl_pw_aff *pa1,
    194 	__isl_take isl_pw_aff *pa2);
    195 
    196 __isl_give isl_pw_aff *isl_pw_aff_intersect_params(__isl_take isl_pw_aff *pa,
    197 	__isl_take isl_set *set);
    198 __isl_give isl_pw_aff *isl_pw_aff_intersect_domain(__isl_take isl_pw_aff *pa,
    199 	__isl_take isl_set *set);
    200 
    201 __isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_pw_aff *cond,
    202 	__isl_take isl_pw_aff *pwaff_true, __isl_take isl_pw_aff *pwaff_false);
    203 
    204 __isl_give isl_pw_aff *isl_pw_aff_scale(__isl_take isl_pw_aff *pwaff,
    205 	isl_int f);
    206 __isl_give isl_pw_aff *isl_pw_aff_scale_down(__isl_take isl_pw_aff *pwaff,
    207 	isl_int f);
    208 
    209 __isl_give isl_pw_aff *isl_pw_aff_insert_dims(__isl_take isl_pw_aff *pwaff,
    210 	enum isl_dim_type type, unsigned first, unsigned n);
    211 __isl_give isl_pw_aff *isl_pw_aff_add_dims(__isl_take isl_pw_aff *pwaff,
    212 	enum isl_dim_type type, unsigned n);
    213 __isl_give isl_pw_aff *isl_pw_aff_drop_dims(__isl_take isl_pw_aff *pwaff,
    214 	enum isl_dim_type type, unsigned first, unsigned n);
    215 
    216 __isl_give isl_pw_aff *isl_pw_aff_coalesce(__isl_take isl_pw_aff *pwqp);
    217 __isl_give isl_pw_aff *isl_pw_aff_gist(__isl_take isl_pw_aff *pwaff,
    218 	__isl_take isl_set *context);
    219 __isl_give isl_pw_aff *isl_pw_aff_gist_params(__isl_take isl_pw_aff *pwaff,
    220 	__isl_take isl_set *context);
    221 
    222 __isl_give isl_pw_aff *isl_pw_aff_pullback_multi_aff(
    223 	__isl_take isl_pw_aff *pa, __isl_take isl_multi_aff *ma);
    224 __isl_give isl_pw_aff *isl_pw_aff_pullback_pw_multi_aff(
    225 	__isl_take isl_pw_aff *pa, __isl_take isl_pw_multi_aff *pma);
    226 
    227 int isl_pw_aff_n_piece(__isl_keep isl_pw_aff *pwaff);
    228 int isl_pw_aff_foreach_piece(__isl_keep isl_pw_aff *pwaff,
    229 	int (*fn)(__isl_take isl_set *set, __isl_take isl_aff *aff,
    230 		    void *user), void *user);
    231 
    232 __isl_give isl_set *isl_set_from_pw_aff(__isl_take isl_pw_aff *pwaff);
    233 __isl_give isl_map *isl_map_from_pw_aff(__isl_take isl_pw_aff *pwaff);
    234 
    235 __isl_give isl_set *isl_pw_aff_nonneg_set(__isl_take isl_pw_aff *pwaff);
    236 __isl_give isl_set *isl_pw_aff_zero_set(__isl_take isl_pw_aff *pwaff);
    237 __isl_give isl_set *isl_pw_aff_non_zero_set(__isl_take isl_pw_aff *pwaff);
    238 
    239 __isl_give isl_set *isl_pw_aff_eq_set(__isl_take isl_pw_aff *pwaff1,
    240 	__isl_take isl_pw_aff *pwaff2);
    241 __isl_give isl_set *isl_pw_aff_ne_set(__isl_take isl_pw_aff *pwaff1,
    242 	__isl_take isl_pw_aff *pwaff2);
    243 __isl_give isl_set *isl_pw_aff_le_set(__isl_take isl_pw_aff *pwaff1,
    244 	__isl_take isl_pw_aff *pwaff2);
    245 __isl_give isl_set *isl_pw_aff_lt_set(__isl_take isl_pw_aff *pwaff1,
    246 	__isl_take isl_pw_aff *pwaff2);
    247 __isl_give isl_set *isl_pw_aff_ge_set(__isl_take isl_pw_aff *pwaff1,
    248 	__isl_take isl_pw_aff *pwaff2);
    249 __isl_give isl_set *isl_pw_aff_gt_set(__isl_take isl_pw_aff *pwaff1,
    250 	__isl_take isl_pw_aff *pwaff2);
    251 
    252 __isl_give isl_pw_aff *isl_pw_aff_read_from_str(isl_ctx *ctx, const char *str);
    253 __isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p,
    254 	__isl_keep isl_pw_aff *pwaff);
    255 void isl_pw_aff_dump(__isl_keep isl_pw_aff *pwaff);
    256 
    257 __isl_give isl_pw_aff *isl_pw_aff_list_min(__isl_take isl_pw_aff_list *list);
    258 __isl_give isl_pw_aff *isl_pw_aff_list_max(__isl_take isl_pw_aff_list *list);
    259 
    260 __isl_give isl_set *isl_pw_aff_list_eq_set(__isl_take isl_pw_aff_list *list1,
    261 	__isl_take isl_pw_aff_list *list2);
    262 __isl_give isl_set *isl_pw_aff_list_ne_set(__isl_take isl_pw_aff_list *list1,
    263 	__isl_take isl_pw_aff_list *list2);
    264 __isl_give isl_set *isl_pw_aff_list_le_set(__isl_take isl_pw_aff_list *list1,
    265 	__isl_take isl_pw_aff_list *list2);
    266 __isl_give isl_set *isl_pw_aff_list_lt_set(__isl_take isl_pw_aff_list *list1,
    267 	__isl_take isl_pw_aff_list *list2);
    268 __isl_give isl_set *isl_pw_aff_list_ge_set(__isl_take isl_pw_aff_list *list1,
    269 	__isl_take isl_pw_aff_list *list2);
    270 __isl_give isl_set *isl_pw_aff_list_gt_set(__isl_take isl_pw_aff_list *list1,
    271 	__isl_take isl_pw_aff_list *list2);
    272 
    273 __isl_give isl_multi_aff *isl_multi_aff_from_aff(__isl_take isl_aff *aff);
    274 __isl_give isl_multi_aff *isl_multi_aff_zero(__isl_take isl_space *space);
    275 __isl_give isl_multi_aff *isl_multi_aff_identity(__isl_take isl_space *space);
    276 
    277 isl_ctx *isl_multi_aff_get_ctx(__isl_keep isl_multi_aff *maff);
    278 __isl_give isl_space *isl_multi_aff_get_space(__isl_keep isl_multi_aff *maff);
    279 __isl_give isl_space *isl_multi_aff_get_domain_space(
    280 	__isl_keep isl_multi_aff *maff);
    281 __isl_give isl_multi_aff *isl_multi_aff_set_tuple_name(
    282 	__isl_take isl_multi_aff *maff,
    283 	enum isl_dim_type type, const char *s);
    284 __isl_give isl_multi_aff *isl_multi_aff_set_tuple_id(
    285 	__isl_take isl_multi_aff *maff,
    286 	enum isl_dim_type type, __isl_take isl_id *id);
    287 __isl_give isl_multi_aff *isl_multi_aff_copy(__isl_keep isl_multi_aff *maff);
    288 void *isl_multi_aff_free(__isl_take isl_multi_aff *maff);
    289 
    290 unsigned isl_multi_aff_dim(__isl_keep isl_multi_aff *maff,
    291 	enum isl_dim_type type);
    292 __isl_give isl_aff *isl_multi_aff_get_aff(__isl_keep isl_multi_aff *multi,
    293 	int pos);
    294 
    295 __isl_give isl_multi_aff *isl_multi_aff_insert_dims(
    296 	__isl_take isl_multi_aff *ma,
    297 	enum isl_dim_type type, unsigned first, unsigned n);
    298 __isl_give isl_multi_aff *isl_multi_aff_add_dims(__isl_take isl_multi_aff *ma,
    299 	enum isl_dim_type type, unsigned n);
    300 __isl_give isl_multi_aff *isl_multi_aff_drop_dims(
    301 	__isl_take isl_multi_aff *maff,
    302 	enum isl_dim_type type, unsigned first, unsigned n);
    303 
    304 __isl_give isl_multi_aff *isl_multi_aff_set_dim_name(
    305 	__isl_take isl_multi_aff *maff,
    306 	enum isl_dim_type type, unsigned pos, const char *s);
    307 
    308 int isl_multi_aff_plain_is_equal(__isl_keep isl_multi_aff *maff1,
    309 	__isl_keep isl_multi_aff *maff2);
    310 
    311 __isl_give isl_multi_aff *isl_multi_aff_add(__isl_take isl_multi_aff *maff1,
    312 	__isl_take isl_multi_aff *maff2);
    313 
    314 __isl_give isl_multi_aff *isl_multi_aff_scale(__isl_take isl_multi_aff *maff,
    315 	isl_int f);
    316 
    317 __isl_give isl_multi_aff *isl_multi_aff_range_splice(
    318 	__isl_take isl_multi_aff *ma1, unsigned pos,
    319 	__isl_take isl_multi_aff *ma2);
    320 __isl_give isl_multi_aff *isl_multi_aff_splice(
    321 	__isl_take isl_multi_aff *ma1, unsigned in_pos, unsigned out_pos,
    322 	__isl_take isl_multi_aff *ma2);
    323 __isl_give isl_multi_aff *isl_multi_aff_range_product(
    324 	__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
    325 __isl_give isl_multi_aff *isl_multi_aff_flat_range_product(
    326 	__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
    327 __isl_give isl_multi_aff *isl_multi_aff_product(
    328 	__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
    329 
    330 __isl_give isl_multi_aff *isl_multi_aff_align_params(
    331 	__isl_take isl_multi_aff *multi, __isl_take isl_space *model);
    332 
    333 __isl_give isl_multi_aff *isl_multi_aff_gist_params(
    334 	__isl_take isl_multi_aff *maff, __isl_take isl_set *context);
    335 __isl_give isl_multi_aff *isl_multi_aff_gist(__isl_take isl_multi_aff *maff,
    336 	__isl_take isl_set *context);
    337 
    338 __isl_give isl_multi_aff *isl_multi_aff_lift(__isl_take isl_multi_aff *maff,
    339 	__isl_give isl_local_space **ls);
    340 
    341 __isl_give isl_multi_aff *isl_multi_aff_pullback_multi_aff(
    342 	__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2);
    343 
    344 __isl_give isl_set *isl_multi_aff_lex_le_set(__isl_take isl_multi_aff *ma1,
    345 	__isl_take isl_multi_aff *ma2);
    346 __isl_give isl_set *isl_multi_aff_lex_ge_set(__isl_take isl_multi_aff *ma1,
    347 	__isl_take isl_multi_aff *ma2);
    348 
    349 __isl_give isl_printer *isl_printer_print_multi_aff(__isl_take isl_printer *p,
    350 	__isl_keep isl_multi_aff *maff);
    351 
    352 __isl_give isl_multi_aff *isl_multi_aff_read_from_str(isl_ctx *ctx,
    353 		const char *str);
    354 void isl_multi_aff_dump(__isl_keep isl_multi_aff *maff);
    355 
    356 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_identity(
    357 	__isl_take isl_space *space);
    358 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_multi_aff(
    359 	__isl_take isl_multi_aff *ma);
    360 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_alloc(__isl_take isl_set *set,
    361 	__isl_take isl_multi_aff *maff);
    362 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_copy(
    363 	__isl_keep isl_pw_multi_aff *pma);
    364 void *isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma);
    365 
    366 unsigned isl_pw_multi_aff_dim(__isl_keep isl_pw_multi_aff *pma,
    367 	enum isl_dim_type type);
    368 __isl_give isl_pw_aff *isl_pw_multi_aff_get_pw_aff(
    369 	__isl_keep isl_pw_multi_aff *pma, int pos);
    370 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_pw_aff(
    371 	__isl_take isl_pw_multi_aff *pma, unsigned pos,
    372 	__isl_take isl_pw_aff *pa);
    373 
    374 isl_ctx *isl_pw_multi_aff_get_ctx(__isl_keep isl_pw_multi_aff *pma);
    375 __isl_give isl_space *isl_pw_multi_aff_get_domain_space(
    376 	__isl_keep isl_pw_multi_aff *pma);
    377 __isl_give isl_space *isl_pw_multi_aff_get_space(
    378 	__isl_keep isl_pw_multi_aff *pma);
    379 int isl_pw_multi_aff_has_tuple_name(__isl_keep isl_pw_multi_aff *pma,
    380 	enum isl_dim_type type);
    381 const char *isl_pw_multi_aff_get_tuple_name(__isl_keep isl_pw_multi_aff *pma,
    382 	enum isl_dim_type type);
    383 __isl_give isl_id *isl_pw_multi_aff_get_tuple_id(
    384 	__isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type);
    385 int isl_pw_multi_aff_has_tuple_id(__isl_keep isl_pw_multi_aff *pma,
    386 	enum isl_dim_type type);
    387 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_tuple_id(
    388 	__isl_take isl_pw_multi_aff *pma,
    389 	enum isl_dim_type type, __isl_take isl_id *id);
    390 
    391 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_drop_dims(
    392 	__isl_take isl_pw_multi_aff *pma,
    393 	enum isl_dim_type type, unsigned first, unsigned n);
    394 
    395 __isl_give isl_set *isl_pw_multi_aff_domain(__isl_take isl_pw_multi_aff *pma);
    396 
    397 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_empty(__isl_take isl_space *space);
    398 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_domain(
    399 	__isl_take isl_set *set);
    400 
    401 const char *isl_pw_multi_aff_get_dim_name(__isl_keep isl_pw_multi_aff *pma,
    402 	enum isl_dim_type type, unsigned pos);
    403 __isl_give isl_id *isl_pw_multi_aff_get_dim_id(
    404 	__isl_keep isl_pw_multi_aff *pma, enum isl_dim_type type,
    405 	unsigned pos);
    406 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_dim_id(
    407 	__isl_take isl_pw_multi_aff *pma,
    408 	enum isl_dim_type type, unsigned pos, __isl_take isl_id *id);
    409 
    410 int isl_pw_multi_aff_plain_is_equal(__isl_keep isl_pw_multi_aff *pma1,
    411 	__isl_keep isl_pw_multi_aff *pma2);
    412 
    413 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_add(
    414 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    415 
    416 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_add(
    417 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    418 
    419 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_lexmin(
    420 	__isl_take isl_pw_multi_aff *pma1,
    421 	__isl_take isl_pw_multi_aff *pma2);
    422 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_lexmax(
    423 	__isl_take isl_pw_multi_aff *pma1,
    424 	__isl_take isl_pw_multi_aff *pma2);
    425 
    426 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_range_product(
    427 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    428 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_flat_range_product(
    429 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    430 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_product(
    431 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    432 
    433 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_params(
    434 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set);
    435 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_domain(
    436 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set);
    437 
    438 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_project_domain_on_params(
    439 	__isl_take isl_pw_multi_aff *pma);
    440 
    441 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_align_params(
    442 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_space *model);
    443 
    444 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_coalesce(
    445 	__isl_take isl_pw_multi_aff *pma);
    446 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist_params(
    447 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set);
    448 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_gist(
    449 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set);
    450 
    451 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_pullback_multi_aff(
    452 	__isl_take isl_pw_multi_aff *pma, __isl_take isl_multi_aff *ma);
    453 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_pullback_pw_multi_aff(
    454 	__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2);
    455 
    456 int isl_pw_multi_aff_foreach_piece(__isl_keep isl_pw_multi_aff *pma,
    457 	int (*fn)(__isl_take isl_set *set, __isl_take isl_multi_aff *maff,
    458 		    void *user), void *user);
    459 
    460 __isl_give isl_map *isl_map_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma);
    461 __isl_give isl_set *isl_set_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma);
    462 
    463 __isl_give isl_printer *isl_printer_print_pw_multi_aff(__isl_take isl_printer *p,
    464 	__isl_keep isl_pw_multi_aff *pma);
    465 
    466 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set(__isl_take isl_set *set);
    467 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(__isl_take isl_map *map);
    468 
    469 __isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(isl_ctx *ctx,
    470 	const char *str);
    471 void isl_pw_multi_aff_dump(__isl_keep isl_pw_multi_aff *pma);
    472 
    473 
    474 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_empty(
    475 	__isl_take isl_space *space);
    476 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_from_domain(
    477 	__isl_take isl_union_set *uset);
    478 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_copy(
    479 	__isl_keep isl_union_pw_multi_aff *upma);
    480 void *isl_union_pw_multi_aff_free(__isl_take isl_union_pw_multi_aff *upma);
    481 
    482 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_add_pw_multi_aff(
    483 	__isl_take isl_union_pw_multi_aff *upma,
    484 	__isl_take isl_pw_multi_aff *pma);
    485 
    486 isl_ctx *isl_union_pw_multi_aff_get_ctx(
    487 	__isl_keep isl_union_pw_multi_aff *upma);
    488 __isl_give isl_space *isl_union_pw_multi_aff_get_space(
    489 	__isl_keep isl_union_pw_multi_aff *upma);
    490 
    491 int isl_union_pw_multi_aff_foreach_pw_multi_aff(
    492 	__isl_keep isl_union_pw_multi_aff *upma,
    493 	int (*fn)(__isl_take isl_pw_multi_aff *pma, void *user), void *user);
    494 
    495 __isl_give isl_union_set *isl_union_pw_multi_aff_domain(
    496 	__isl_take isl_union_pw_multi_aff *upma);
    497 
    498 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_add(
    499 	__isl_take isl_union_pw_multi_aff *upma1,
    500 	__isl_take isl_union_pw_multi_aff *upma2);
    501 
    502 __isl_give isl_union_pw_multi_aff *isl_union_pw_multi_aff_flat_range_product(
    503 	__isl_take isl_union_pw_multi_aff *upma1,
    504 	__isl_take isl_union_pw_multi_aff *upma2);
    505 
    506 __isl_give isl_union_map *isl_union_map_from_union_pw_multi_aff(
    507 	__isl_take isl_union_pw_multi_aff *upma);
    508 
    509 __isl_give isl_printer *isl_printer_print_union_pw_multi_aff(
    510 	__isl_take isl_printer *p, __isl_keep isl_union_pw_multi_aff *upma);
    511 
    512 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_zero(__isl_take isl_space *space);
    513 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_identity(
    514 	__isl_take isl_space *space);
    515 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_from_pw_aff(
    516 	__isl_take isl_pw_aff *pa);
    517 
    518 isl_ctx *isl_multi_pw_aff_get_ctx(__isl_keep isl_multi_pw_aff *mpa);
    519 __isl_give isl_space *isl_multi_pw_aff_get_space(
    520 	__isl_keep isl_multi_pw_aff *mpa);
    521 __isl_give isl_space *isl_multi_pw_aff_get_domain_space(
    522 	__isl_keep isl_multi_pw_aff *mpa);
    523 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_set_tuple_name(
    524 	__isl_take isl_multi_pw_aff *mpa,
    525 	enum isl_dim_type type, const char *s);
    526 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_copy(
    527 	__isl_keep isl_multi_pw_aff *mpa);
    528 void *isl_multi_pw_aff_free(__isl_take isl_multi_pw_aff *mpa);
    529 
    530 unsigned isl_multi_pw_aff_dim(__isl_keep isl_multi_pw_aff *mpa,
    531 	enum isl_dim_type type);
    532 __isl_give isl_pw_aff *isl_multi_pw_aff_get_pw_aff(
    533 	__isl_keep isl_multi_pw_aff *mpa, int pos);
    534 
    535 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_insert_dims(
    536 	__isl_take isl_multi_pw_aff *mpa,
    537 	enum isl_dim_type type, unsigned first, unsigned n);
    538 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_add_dims(
    539 	__isl_take isl_multi_pw_aff *mpa, enum isl_dim_type type, unsigned n);
    540 
    541 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_set_dim_name(
    542 	__isl_take isl_multi_pw_aff *mpa,
    543 	enum isl_dim_type type, unsigned pos, const char *s);
    544 
    545 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_range_splice(
    546 	__isl_take isl_multi_pw_aff *mpa1, unsigned pos,
    547 	__isl_take isl_multi_pw_aff *mpa2);
    548 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_splice(
    549 	__isl_take isl_multi_pw_aff *mpa1, unsigned in_pos, unsigned out_pos,
    550 	__isl_take isl_multi_pw_aff *mpa2);
    551 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_flat_range_product(
    552 	__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2);
    553 __isl_give isl_multi_pw_aff *isl_multi_pw_aff_range_product(
    554 	__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2);
    555 
    556 __isl_give isl_printer *isl_printer_print_multi_pw_aff(
    557 	__isl_take isl_printer *p, __isl_keep isl_multi_pw_aff *mpa);
    558 void isl_multi_pw_aff_dump(__isl_keep isl_multi_pw_aff *mpa);
    559 
    560 #if defined(__cplusplus)
    561 }
    562 #endif
    563 
    564 #include <isl/dim.h>
    565 
    566 #endif
    567