1 /* 2 * Copyright 2008-2009 Katholieke Universiteit Leuven 3 * 4 * Use of this software is governed by the MIT license 5 * 6 * Written by Sven Verdoolaege, K.U.Leuven, Departement 7 * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium 8 */ 9 10 #ifndef ISL_MAP_H 11 #define ISL_MAP_H 12 13 #include <stdio.h> 14 15 #include <isl/ctx.h> 16 #include <isl/space_type.h> 17 #include <isl/vec.h> 18 #include <isl/mat.h> 19 #include <isl/printer.h> 20 #include <isl/local_space.h> 21 #include <isl/aff_type.h> 22 #include <isl/list.h> 23 #include <isl/map_type.h> 24 #include <isl/val_type.h> 25 #include <isl/stdint.h> 26 #include <isl/stride_info.h> 27 #include <isl/fixed_box.h> 28 29 #if defined(__cplusplus) 30 extern "C" { 31 #endif 32 33 isl_size isl_basic_map_total_dim(__isl_keep const isl_basic_map *bmap); 34 isl_size isl_basic_map_dim(__isl_keep isl_basic_map *bmap, 35 enum isl_dim_type type); 36 37 __isl_export 38 isl_size isl_map_domain_tuple_dim(__isl_keep isl_map *map); 39 __isl_export 40 isl_size isl_map_range_tuple_dim(__isl_keep isl_map *map); 41 isl_size isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type); 42 43 isl_ctx *isl_basic_map_get_ctx(__isl_keep isl_basic_map *bmap); 44 isl_ctx *isl_map_get_ctx(__isl_keep isl_map *map); 45 __isl_give isl_space *isl_basic_map_get_space(__isl_keep isl_basic_map *bmap); 46 __isl_export 47 __isl_give isl_space *isl_map_get_space(__isl_keep isl_map *map); 48 49 __isl_give isl_aff *isl_basic_map_get_div(__isl_keep isl_basic_map *bmap, 50 int pos); 51 52 __isl_give isl_local_space *isl_basic_map_get_local_space( 53 __isl_keep isl_basic_map *bmap); 54 55 __isl_give isl_basic_map *isl_basic_map_set_tuple_name( 56 __isl_take isl_basic_map *bmap, enum isl_dim_type type, const char *s); 57 const char *isl_basic_map_get_tuple_name(__isl_keep isl_basic_map *bmap, 58 enum isl_dim_type type); 59 isl_bool isl_map_has_tuple_name(__isl_keep isl_map *map, 60 enum isl_dim_type type); 61 const char *isl_map_get_tuple_name(__isl_keep isl_map *map, 62 enum isl_dim_type type); 63 __isl_give isl_map *isl_map_set_tuple_name(__isl_take isl_map *map, 64 enum isl_dim_type type, const char *s); 65 const char *isl_basic_map_get_dim_name(__isl_keep isl_basic_map *bmap, 66 enum isl_dim_type type, unsigned pos); 67 isl_bool isl_map_has_dim_name(__isl_keep isl_map *map, 68 enum isl_dim_type type, unsigned pos); 69 const char *isl_map_get_dim_name(__isl_keep isl_map *map, 70 enum isl_dim_type type, unsigned pos); 71 __isl_give isl_basic_map *isl_basic_map_set_dim_name( 72 __isl_take isl_basic_map *bmap, 73 enum isl_dim_type type, unsigned pos, const char *s); 74 __isl_give isl_map *isl_map_set_dim_name(__isl_take isl_map *map, 75 enum isl_dim_type type, unsigned pos, const char *s); 76 77 __isl_give isl_basic_map *isl_basic_map_set_tuple_id( 78 __isl_take isl_basic_map *bmap, 79 enum isl_dim_type type, __isl_take isl_id *id); 80 __isl_give isl_map *isl_map_set_dim_id(__isl_take isl_map *map, 81 enum isl_dim_type type, unsigned pos, __isl_take isl_id *id); 82 isl_bool isl_basic_map_has_dim_id(__isl_keep isl_basic_map *bmap, 83 enum isl_dim_type type, unsigned pos); 84 isl_bool isl_map_has_dim_id(__isl_keep isl_map *map, 85 enum isl_dim_type type, unsigned pos); 86 __isl_give isl_id *isl_map_get_dim_id(__isl_keep isl_map *map, 87 enum isl_dim_type type, unsigned pos); 88 __isl_overload 89 __isl_give isl_map *isl_map_set_domain_tuple_id(__isl_take isl_map *map, 90 __isl_take isl_id *id); 91 __isl_overload 92 __isl_give isl_map *isl_map_set_range_tuple_id(__isl_take isl_map *map, 93 __isl_take isl_id *id); 94 __isl_give isl_map *isl_map_set_tuple_id(__isl_take isl_map *map, 95 enum isl_dim_type type, __isl_take isl_id *id); 96 __isl_give isl_map *isl_map_reset_tuple_id(__isl_take isl_map *map, 97 enum isl_dim_type type); 98 __isl_export 99 isl_bool isl_map_has_domain_tuple_id(__isl_keep isl_map *map); 100 __isl_export 101 isl_bool isl_map_has_range_tuple_id(__isl_keep isl_map *map); 102 isl_bool isl_map_has_tuple_id(__isl_keep isl_map *map, enum isl_dim_type type); 103 __isl_export 104 __isl_give isl_id *isl_map_get_domain_tuple_id(__isl_keep isl_map *map); 105 __isl_export 106 __isl_give isl_id *isl_map_get_range_tuple_id(__isl_keep isl_map *map); 107 __isl_give isl_id *isl_map_get_tuple_id(__isl_keep isl_map *map, 108 enum isl_dim_type type); 109 __isl_give isl_map *isl_map_reset_user(__isl_take isl_map *map); 110 111 int isl_basic_map_find_dim_by_name(__isl_keep isl_basic_map *bmap, 112 enum isl_dim_type type, const char *name); 113 int isl_map_find_dim_by_id(__isl_keep isl_map *map, enum isl_dim_type type, 114 __isl_keep isl_id *id); 115 int isl_map_find_dim_by_name(__isl_keep isl_map *map, enum isl_dim_type type, 116 const char *name); 117 118 isl_bool isl_basic_map_is_rational(__isl_keep isl_basic_map *bmap); 119 120 __isl_give isl_basic_map *isl_basic_map_identity(__isl_take isl_space *space); 121 __isl_null isl_basic_map *isl_basic_map_free(__isl_take isl_basic_map *bmap); 122 __isl_give isl_basic_map *isl_basic_map_copy(__isl_keep isl_basic_map *bmap); 123 __isl_give isl_basic_map *isl_basic_map_equal( 124 __isl_take isl_space *space, unsigned n_equal); 125 __isl_give isl_basic_map *isl_basic_map_less_at(__isl_take isl_space *space, 126 unsigned pos); 127 __isl_give isl_basic_map *isl_basic_map_more_at(__isl_take isl_space *space, 128 unsigned pos); 129 __isl_give isl_basic_map *isl_basic_map_empty(__isl_take isl_space *space); 130 __isl_give isl_basic_map *isl_basic_map_universe(__isl_take isl_space *space); 131 __isl_give isl_basic_map *isl_basic_map_nat_universe( 132 __isl_take isl_space *space); 133 __isl_give isl_basic_map *isl_basic_map_remove_redundancies( 134 __isl_take isl_basic_map *bmap); 135 __isl_give isl_map *isl_map_remove_redundancies(__isl_take isl_map *map); 136 __isl_give isl_basic_map *isl_map_simple_hull(__isl_take isl_map *map); 137 __isl_export 138 __isl_give isl_basic_map *isl_map_unshifted_simple_hull( 139 __isl_take isl_map *map); 140 __isl_give isl_basic_map *isl_map_plain_unshifted_simple_hull( 141 __isl_take isl_map *map); 142 __isl_give isl_basic_map *isl_map_unshifted_simple_hull_from_map_list( 143 __isl_take isl_map *map, __isl_take isl_map_list *list); 144 145 __isl_export 146 __isl_give isl_basic_map *isl_basic_map_intersect_domain( 147 __isl_take isl_basic_map *bmap, 148 __isl_take isl_basic_set *bset); 149 __isl_export 150 __isl_give isl_basic_map *isl_basic_map_intersect_range( 151 __isl_take isl_basic_map *bmap, 152 __isl_take isl_basic_set *bset); 153 __isl_export 154 __isl_give isl_basic_map *isl_basic_map_intersect( 155 __isl_take isl_basic_map *bmap1, 156 __isl_take isl_basic_map *bmap2); 157 __isl_give isl_basic_map *isl_basic_map_list_intersect( 158 __isl_take isl_basic_map_list *list); 159 __isl_export 160 __isl_give isl_map *isl_basic_map_union( 161 __isl_take isl_basic_map *bmap1, 162 __isl_take isl_basic_map *bmap2); 163 __isl_export 164 __isl_give isl_basic_map *isl_basic_map_apply_domain( 165 __isl_take isl_basic_map *bmap1, 166 __isl_take isl_basic_map *bmap2); 167 __isl_export 168 __isl_give isl_basic_map *isl_basic_map_apply_range( 169 __isl_take isl_basic_map *bmap1, 170 __isl_take isl_basic_map *bmap2); 171 __isl_export 172 __isl_give isl_basic_map *isl_basic_map_affine_hull( 173 __isl_take isl_basic_map *bmap); 174 __isl_give isl_basic_map *isl_basic_map_preimage_domain_multi_aff( 175 __isl_take isl_basic_map *bmap, __isl_take isl_multi_aff *ma); 176 __isl_give isl_basic_map *isl_basic_map_preimage_range_multi_aff( 177 __isl_take isl_basic_map *bmap, __isl_take isl_multi_aff *ma); 178 __isl_export 179 __isl_give isl_basic_map *isl_basic_map_reverse(__isl_take isl_basic_map *bmap); 180 __isl_give isl_basic_set *isl_basic_map_domain(__isl_take isl_basic_map *bmap); 181 __isl_give isl_basic_set *isl_basic_map_range(__isl_take isl_basic_map *bmap); 182 __isl_give isl_basic_map *isl_basic_map_domain_map( 183 __isl_take isl_basic_map *bmap); 184 __isl_give isl_basic_map *isl_basic_map_range_map( 185 __isl_take isl_basic_map *bmap); 186 __isl_give isl_basic_map *isl_basic_map_remove_dims( 187 __isl_take isl_basic_map *bmap, 188 enum isl_dim_type type, unsigned first, unsigned n); 189 __isl_give isl_basic_map *isl_basic_map_eliminate( 190 __isl_take isl_basic_map *bmap, 191 enum isl_dim_type type, unsigned first, unsigned n); 192 __isl_export 193 __isl_give isl_basic_map *isl_basic_map_sample(__isl_take isl_basic_map *bmap); 194 __isl_export 195 __isl_give isl_basic_map *isl_basic_map_detect_equalities( 196 __isl_take isl_basic_map *bmap); 197 __isl_give isl_basic_map *isl_basic_map_read_from_file(isl_ctx *ctx, 198 FILE *input); 199 __isl_constructor 200 __isl_give isl_basic_map *isl_basic_map_read_from_str(isl_ctx *ctx, 201 const char *str); 202 __isl_give isl_map *isl_map_read_from_file(isl_ctx *ctx, FILE *input); 203 __isl_constructor 204 __isl_give isl_map *isl_map_read_from_str(isl_ctx *ctx, const char *str); 205 void isl_basic_map_dump(__isl_keep isl_basic_map *bmap); 206 void isl_map_dump(__isl_keep isl_map *map); 207 __isl_give char *isl_basic_map_to_str(__isl_keep isl_basic_map *bmap); 208 __isl_give isl_printer *isl_printer_print_basic_map( 209 __isl_take isl_printer *printer, __isl_keep isl_basic_map *bmap); 210 __isl_give char *isl_map_to_str(__isl_keep isl_map *map); 211 __isl_give isl_printer *isl_printer_print_map(__isl_take isl_printer *printer, 212 __isl_keep isl_map *map); 213 __isl_give isl_basic_map *isl_basic_map_fix_si(__isl_take isl_basic_map *bmap, 214 enum isl_dim_type type, unsigned pos, int value); 215 __isl_give isl_basic_map *isl_basic_map_fix_val(__isl_take isl_basic_map *bmap, 216 enum isl_dim_type type, unsigned pos, __isl_take isl_val *v); 217 __isl_give isl_basic_map *isl_basic_map_lower_bound_si( 218 __isl_take isl_basic_map *bmap, 219 enum isl_dim_type type, unsigned pos, int value); 220 __isl_give isl_basic_map *isl_basic_map_upper_bound_si( 221 __isl_take isl_basic_map *bmap, 222 enum isl_dim_type type, unsigned pos, int value); 223 __isl_overload 224 __isl_give isl_map *isl_map_lower_bound_multi_pw_aff(__isl_take isl_map *map, 225 __isl_take isl_multi_pw_aff *lower); 226 __isl_overload 227 __isl_give isl_map *isl_map_upper_bound_multi_pw_aff(__isl_take isl_map *map, 228 __isl_take isl_multi_pw_aff *upper); 229 230 __isl_give isl_basic_map *isl_basic_map_sum(__isl_take isl_basic_map *bmap1, 231 __isl_take isl_basic_map *bmap2); 232 __isl_give isl_basic_map *isl_basic_map_neg(__isl_take isl_basic_map *bmap); 233 234 __isl_give isl_map *isl_map_sum(__isl_take isl_map *map1, 235 __isl_take isl_map *map2); 236 __isl_give isl_map *isl_map_neg(__isl_take isl_map *map); 237 __isl_give isl_map *isl_map_floordiv_val(__isl_take isl_map *map, 238 __isl_take isl_val *d); 239 240 __isl_export 241 isl_bool isl_basic_map_is_equal(__isl_keep isl_basic_map *bmap1, 242 __isl_keep isl_basic_map *bmap2); 243 isl_bool isl_basic_map_is_disjoint(__isl_keep isl_basic_map *bmap1, 244 __isl_keep isl_basic_map *bmap2); 245 246 __isl_give isl_map *isl_basic_map_partial_lexmax( 247 __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, 248 __isl_give isl_set **empty); 249 __isl_give isl_map *isl_basic_map_partial_lexmin( 250 __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, 251 __isl_give isl_set **empty); 252 __isl_give isl_map *isl_map_partial_lexmax( 253 __isl_take isl_map *map, __isl_take isl_set *dom, 254 __isl_give isl_set **empty); 255 __isl_give isl_map *isl_map_partial_lexmin( 256 __isl_take isl_map *map, __isl_take isl_set *dom, 257 __isl_give isl_set **empty); 258 __isl_export 259 __isl_give isl_map *isl_basic_map_lexmin(__isl_take isl_basic_map *bmap); 260 __isl_export 261 __isl_give isl_map *isl_basic_map_lexmax(__isl_take isl_basic_map *bmap); 262 __isl_export 263 __isl_give isl_map *isl_map_lexmin(__isl_take isl_map *map); 264 __isl_export 265 __isl_give isl_map *isl_map_lexmax(__isl_take isl_map *map); 266 __isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmin_pw_multi_aff( 267 __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, 268 __isl_give isl_set **empty); 269 __isl_give isl_pw_multi_aff *isl_basic_map_partial_lexmax_pw_multi_aff( 270 __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, 271 __isl_give isl_set **empty); 272 __isl_give isl_pw_multi_aff *isl_basic_map_lexmin_pw_multi_aff( 273 __isl_take isl_basic_map *bmap); 274 __isl_export 275 __isl_give isl_pw_multi_aff *isl_map_lexmin_pw_multi_aff( 276 __isl_take isl_map *map); 277 __isl_export 278 __isl_give isl_pw_multi_aff *isl_map_lexmax_pw_multi_aff( 279 __isl_take isl_map *map); 280 __isl_export 281 __isl_give isl_multi_pw_aff *isl_map_min_multi_pw_aff(__isl_take isl_map *map); 282 __isl_export 283 __isl_give isl_multi_pw_aff *isl_map_max_multi_pw_aff(__isl_take isl_map *map); 284 285 void isl_basic_map_print_internal(__isl_keep isl_basic_map *bmap, 286 FILE *out, int indent); 287 288 __isl_give isl_val *isl_basic_map_plain_get_val_if_fixed( 289 __isl_keep isl_basic_map *bmap, 290 enum isl_dim_type type, unsigned pos); 291 292 isl_bool isl_basic_map_image_is_bounded(__isl_keep isl_basic_map *bmap); 293 isl_bool isl_basic_map_plain_is_universe(__isl_keep isl_basic_map *bmap); 294 isl_bool isl_basic_map_is_universe(__isl_keep isl_basic_map *bmap); 295 isl_bool isl_basic_map_plain_is_empty(__isl_keep isl_basic_map *bmap); 296 __isl_export 297 isl_bool isl_basic_map_is_empty(__isl_keep isl_basic_map *bmap); 298 __isl_export 299 isl_bool isl_basic_map_is_subset(__isl_keep isl_basic_map *bmap1, 300 __isl_keep isl_basic_map *bmap2); 301 isl_bool isl_basic_map_is_strict_subset(__isl_keep isl_basic_map *bmap1, 302 __isl_keep isl_basic_map *bmap2); 303 304 __isl_export 305 __isl_give isl_map *isl_map_universe(__isl_take isl_space *space); 306 __isl_export 307 __isl_give isl_map *isl_space_universe_map(__isl_take isl_space *space); 308 __isl_give isl_map *isl_map_nat_universe(__isl_take isl_space *space); 309 __isl_export 310 __isl_give isl_map *isl_map_empty(__isl_take isl_space *space); 311 __isl_give isl_map *isl_map_identity(__isl_take isl_space *space); 312 __isl_give isl_map *isl_map_lex_lt_first(__isl_take isl_space *space, 313 unsigned n); 314 __isl_give isl_map *isl_map_lex_le_first(__isl_take isl_space *space, 315 unsigned n); 316 __isl_give isl_map *isl_map_lex_lt(__isl_take isl_space *set_space); 317 __isl_give isl_map *isl_map_lex_le(__isl_take isl_space *set_space); 318 __isl_give isl_map *isl_map_lex_gt_first(__isl_take isl_space *space, 319 unsigned n); 320 __isl_give isl_map *isl_map_lex_ge_first(__isl_take isl_space *space, 321 unsigned n); 322 __isl_give isl_map *isl_map_lex_gt(__isl_take isl_space *set_space); 323 __isl_give isl_map *isl_map_lex_ge(__isl_take isl_space *set_space); 324 __isl_null isl_map *isl_map_free(__isl_take isl_map *map); 325 __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map); 326 __isl_export 327 __isl_give isl_map *isl_map_reverse(__isl_take isl_map *map); 328 __isl_export 329 __isl_give isl_map *isl_map_domain_reverse(__isl_take isl_map *map); 330 __isl_export 331 __isl_give isl_map *isl_map_range_reverse(__isl_take isl_map *map); 332 __isl_export 333 __isl_give isl_map *isl_map_union( 334 __isl_take isl_map *map1, 335 __isl_take isl_map *map2); 336 __isl_give isl_map *isl_map_union_disjoint( 337 __isl_take isl_map *map1, __isl_take isl_map *map2); 338 __isl_export 339 __isl_give isl_map *isl_map_intersect_domain( 340 __isl_take isl_map *map, 341 __isl_take isl_set *set); 342 __isl_export 343 __isl_give isl_map *isl_map_intersect_range( 344 __isl_take isl_map *map, 345 __isl_take isl_set *set); 346 __isl_export 347 __isl_give isl_map *isl_map_intersect_domain_factor_domain( 348 __isl_take isl_map *map, __isl_take isl_map *factor); 349 __isl_export 350 __isl_give isl_map *isl_map_intersect_domain_factor_range( 351 __isl_take isl_map *map, __isl_take isl_map *factor); 352 __isl_export 353 __isl_give isl_map *isl_map_intersect_range_factor_domain( 354 __isl_take isl_map *map, __isl_take isl_map *factor); 355 __isl_export 356 __isl_give isl_map *isl_map_intersect_range_factor_range( 357 __isl_take isl_map *map, __isl_take isl_map *factor); 358 __isl_export 359 __isl_give isl_map *isl_map_intersect_domain_wrapped_domain( 360 __isl_take isl_map *map, __isl_take isl_set *domain); 361 __isl_export 362 __isl_give isl_map *isl_map_intersect_range_wrapped_domain( 363 __isl_take isl_map *map, __isl_take isl_set *domain); 364 __isl_export 365 __isl_give isl_map *isl_map_apply_domain( 366 __isl_take isl_map *map1, 367 __isl_take isl_map *map2); 368 __isl_export 369 __isl_give isl_map *isl_map_apply_range( 370 __isl_take isl_map *map1, 371 __isl_take isl_map *map2); 372 __isl_overload 373 __isl_give isl_map *isl_map_preimage_domain_multi_aff(__isl_take isl_map *map, 374 __isl_take isl_multi_aff *ma); 375 __isl_overload 376 __isl_give isl_map *isl_map_preimage_range_multi_aff(__isl_take isl_map *map, 377 __isl_take isl_multi_aff *ma); 378 __isl_overload 379 __isl_give isl_map *isl_map_preimage_domain_pw_multi_aff( 380 __isl_take isl_map *map, __isl_take isl_pw_multi_aff *pma); 381 __isl_overload 382 __isl_give isl_map *isl_map_preimage_range_pw_multi_aff( 383 __isl_take isl_map *map, __isl_take isl_pw_multi_aff *pma); 384 __isl_overload 385 __isl_give isl_map *isl_map_preimage_domain_multi_pw_aff( 386 __isl_take isl_map *map, __isl_take isl_multi_pw_aff *mpa); 387 __isl_give isl_basic_map *isl_basic_map_product( 388 __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); 389 __isl_export 390 __isl_give isl_map *isl_map_product(__isl_take isl_map *map1, 391 __isl_take isl_map *map2); 392 __isl_give isl_basic_map *isl_basic_map_domain_product( 393 __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); 394 __isl_give isl_basic_map *isl_basic_map_range_product( 395 __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); 396 __isl_export 397 __isl_give isl_map *isl_map_domain_product(__isl_take isl_map *map1, 398 __isl_take isl_map *map2); 399 __isl_export 400 __isl_give isl_map *isl_map_range_product(__isl_take isl_map *map1, 401 __isl_take isl_map *map2); 402 __isl_give isl_basic_map *isl_basic_map_flat_product( 403 __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); 404 __isl_give isl_map *isl_map_flat_product(__isl_take isl_map *map1, 405 __isl_take isl_map *map2); 406 __isl_give isl_basic_map *isl_basic_map_flat_range_product( 407 __isl_take isl_basic_map *bmap1, __isl_take isl_basic_map *bmap2); 408 __isl_give isl_map *isl_map_flat_domain_product(__isl_take isl_map *map1, 409 __isl_take isl_map *map2); 410 __isl_give isl_map *isl_map_flat_range_product(__isl_take isl_map *map1, 411 __isl_take isl_map *map2); 412 isl_bool isl_map_domain_is_wrapping(__isl_keep isl_map *map); 413 isl_bool isl_map_range_is_wrapping(__isl_keep isl_map *map); 414 isl_bool isl_map_is_product(__isl_keep isl_map *map); 415 __isl_export 416 __isl_give isl_map *isl_map_factor_domain(__isl_take isl_map *map); 417 __isl_export 418 __isl_give isl_map *isl_map_factor_range(__isl_take isl_map *map); 419 __isl_export 420 __isl_give isl_map *isl_map_domain_factor_domain(__isl_take isl_map *map); 421 __isl_export 422 __isl_give isl_map *isl_map_domain_factor_range(__isl_take isl_map *map); 423 __isl_export 424 __isl_give isl_map *isl_map_range_factor_domain(__isl_take isl_map *map); 425 __isl_export 426 __isl_give isl_map *isl_map_range_factor_range(__isl_take isl_map *map); 427 __isl_export 428 __isl_give isl_map *isl_map_intersect(__isl_take isl_map *map1, 429 __isl_take isl_map *map2); 430 __isl_export 431 __isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map, 432 __isl_take isl_set *params); 433 __isl_export 434 __isl_give isl_map *isl_map_subtract( 435 __isl_take isl_map *map1, 436 __isl_take isl_map *map2); 437 __isl_give isl_map *isl_map_subtract_domain(__isl_take isl_map *map, 438 __isl_take isl_set *dom); 439 __isl_give isl_map *isl_map_subtract_range(__isl_take isl_map *map, 440 __isl_take isl_set *dom); 441 __isl_export 442 __isl_give isl_map *isl_map_complement(__isl_take isl_map *map); 443 __isl_give isl_map *isl_map_fix_input_si(__isl_take isl_map *map, 444 unsigned input, int value); 445 __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map, 446 enum isl_dim_type type, unsigned pos, int value); 447 __isl_give isl_map *isl_map_fix_val(__isl_take isl_map *map, 448 enum isl_dim_type type, unsigned pos, __isl_take isl_val *v); 449 __isl_give isl_map *isl_map_lower_bound_si(__isl_take isl_map *map, 450 enum isl_dim_type type, unsigned pos, int value); 451 __isl_give isl_map *isl_map_lower_bound_val(__isl_take isl_map *map, 452 enum isl_dim_type type, unsigned pos, __isl_take isl_val *value); 453 __isl_give isl_map *isl_map_upper_bound_si(__isl_take isl_map *map, 454 enum isl_dim_type type, unsigned pos, int value); 455 __isl_give isl_map *isl_map_upper_bound_val(__isl_take isl_map *map, 456 enum isl_dim_type type, unsigned pos, __isl_take isl_val *value); 457 __isl_export 458 __isl_give isl_basic_set *isl_basic_map_deltas(__isl_take isl_basic_map *bmap); 459 __isl_export 460 __isl_give isl_set *isl_map_deltas(__isl_take isl_map *map); 461 __isl_give isl_basic_map *isl_basic_map_deltas_map( 462 __isl_take isl_basic_map *bmap); 463 __isl_give isl_map *isl_map_deltas_map(__isl_take isl_map *map); 464 __isl_export 465 __isl_give isl_map *isl_map_detect_equalities(__isl_take isl_map *map); 466 __isl_export 467 __isl_give isl_basic_map *isl_map_affine_hull(__isl_take isl_map *map); 468 __isl_give isl_basic_map *isl_map_convex_hull(__isl_take isl_map *map); 469 __isl_export 470 __isl_give isl_basic_map *isl_map_polyhedral_hull(__isl_take isl_map *map); 471 __isl_give isl_basic_map *isl_basic_map_add_dims(__isl_take isl_basic_map *bmap, 472 enum isl_dim_type type, unsigned n); 473 __isl_give isl_map *isl_map_add_dims(__isl_take isl_map *map, 474 enum isl_dim_type type, unsigned n); 475 __isl_give isl_basic_map *isl_basic_map_insert_dims( 476 __isl_take isl_basic_map *bmap, enum isl_dim_type type, 477 unsigned pos, unsigned n); 478 __isl_give isl_map *isl_map_insert_dims(__isl_take isl_map *map, 479 enum isl_dim_type type, unsigned pos, unsigned n); 480 __isl_give isl_basic_map *isl_basic_map_move_dims( 481 __isl_take isl_basic_map *bmap, 482 enum isl_dim_type dst_type, unsigned dst_pos, 483 enum isl_dim_type src_type, unsigned src_pos, unsigned n); 484 __isl_give isl_map *isl_map_move_dims(__isl_take isl_map *map, 485 enum isl_dim_type dst_type, unsigned dst_pos, 486 enum isl_dim_type src_type, unsigned src_pos, unsigned n); 487 __isl_give isl_basic_map *isl_basic_map_project_out( 488 __isl_take isl_basic_map *bmap, 489 enum isl_dim_type type, unsigned first, unsigned n); 490 __isl_overload 491 __isl_give isl_map *isl_map_project_out_param_id(__isl_take isl_map *map, 492 __isl_take isl_id *id); 493 __isl_overload 494 __isl_give isl_map *isl_map_project_out_param_id_list(__isl_take isl_map *map, 495 __isl_take isl_id_list *list); 496 __isl_give isl_map *isl_map_project_out(__isl_take isl_map *map, 497 enum isl_dim_type type, unsigned first, unsigned n); 498 __isl_export 499 __isl_give isl_map *isl_map_project_out_all_params(__isl_take isl_map *map); 500 __isl_give isl_basic_map *isl_basic_map_remove_divs( 501 __isl_take isl_basic_map *bmap); 502 __isl_give isl_map *isl_map_remove_unknown_divs(__isl_take isl_map *map); 503 __isl_give isl_map *isl_map_remove_divs(__isl_take isl_map *map); 504 __isl_give isl_map *isl_map_eliminate(__isl_take isl_map *map, 505 enum isl_dim_type type, unsigned first, unsigned n); 506 __isl_give isl_map *isl_map_remove_dims(__isl_take isl_map *map, 507 enum isl_dim_type type, unsigned first, unsigned n); 508 __isl_give isl_basic_map *isl_basic_map_remove_divs_involving_dims( 509 __isl_take isl_basic_map *bmap, 510 enum isl_dim_type type, unsigned first, unsigned n); 511 __isl_give isl_map *isl_map_remove_divs_involving_dims(__isl_take isl_map *map, 512 enum isl_dim_type type, unsigned first, unsigned n); 513 __isl_give isl_map *isl_map_remove_inputs(__isl_take isl_map *map, 514 unsigned first, unsigned n); 515 516 __isl_give isl_basic_map *isl_basic_map_equate(__isl_take isl_basic_map *bmap, 517 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 518 __isl_give isl_basic_map *isl_basic_map_order_ge(__isl_take isl_basic_map *bmap, 519 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 520 __isl_give isl_map *isl_map_order_ge(__isl_take isl_map *map, 521 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 522 __isl_give isl_map *isl_map_order_le(__isl_take isl_map *map, 523 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 524 __isl_give isl_map *isl_map_equate(__isl_take isl_map *map, 525 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 526 __isl_give isl_map *isl_map_oppose(__isl_take isl_map *map, 527 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 528 __isl_give isl_map *isl_map_order_lt(__isl_take isl_map *map, 529 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 530 __isl_give isl_basic_map *isl_basic_map_order_gt(__isl_take isl_basic_map *bmap, 531 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 532 __isl_give isl_map *isl_map_order_gt(__isl_take isl_map *map, 533 enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2); 534 535 __isl_export 536 __isl_give isl_map *isl_set_translation(__isl_take isl_set *deltas); 537 __isl_export 538 __isl_give isl_map *isl_set_identity(__isl_take isl_set *set); 539 540 __isl_export 541 isl_bool isl_basic_set_is_wrapping(__isl_keep isl_basic_set *bset); 542 __isl_export 543 isl_bool isl_set_is_wrapping(__isl_keep isl_set *set); 544 __isl_give isl_basic_set *isl_basic_map_wrap(__isl_take isl_basic_map *bmap); 545 __isl_export 546 __isl_give isl_set *isl_map_wrap(__isl_take isl_map *map); 547 __isl_give isl_basic_map *isl_basic_set_unwrap(__isl_take isl_basic_set *bset); 548 __isl_export 549 __isl_give isl_map *isl_set_unwrap(__isl_take isl_set *set); 550 __isl_export 551 __isl_give isl_basic_map *isl_basic_map_flatten(__isl_take isl_basic_map *bmap); 552 __isl_export 553 __isl_give isl_map *isl_map_flatten(__isl_take isl_map *map); 554 __isl_export 555 __isl_give isl_basic_map *isl_basic_map_flatten_domain( 556 __isl_take isl_basic_map *bmap); 557 __isl_export 558 __isl_give isl_basic_map *isl_basic_map_flatten_range( 559 __isl_take isl_basic_map *bmap); 560 __isl_export 561 __isl_give isl_map *isl_map_flatten_domain(__isl_take isl_map *map); 562 __isl_export 563 __isl_give isl_map *isl_map_flatten_range(__isl_take isl_map *map); 564 __isl_export 565 __isl_give isl_basic_set *isl_basic_set_flatten(__isl_take isl_basic_set *bset); 566 __isl_export 567 __isl_give isl_set *isl_set_flatten(__isl_take isl_set *set); 568 __isl_give isl_map *isl_set_flatten_map(__isl_take isl_set *set); 569 __isl_export 570 __isl_give isl_set *isl_map_params(__isl_take isl_map *map); 571 __isl_export 572 __isl_give isl_set *isl_map_domain(__isl_take isl_map *bmap); 573 __isl_export 574 __isl_give isl_set *isl_map_range(__isl_take isl_map *map); 575 __isl_export 576 __isl_give isl_map *isl_set_insert_domain(__isl_take isl_set *set, 577 __isl_take isl_space *domain); 578 __isl_give isl_map *isl_map_domain_map(__isl_take isl_map *map); 579 __isl_give isl_map *isl_map_range_map(__isl_take isl_map *map); 580 __isl_give isl_map *isl_set_wrapped_domain_map(__isl_take isl_set *set); 581 __isl_constructor 582 __isl_give isl_map *isl_map_from_basic_map(__isl_take isl_basic_map *bmap); 583 __isl_give isl_map *isl_map_from_domain(__isl_take isl_set *set); 584 __isl_give isl_basic_map *isl_basic_map_from_domain( 585 __isl_take isl_basic_set *bset); 586 __isl_give isl_basic_map *isl_basic_map_from_range( 587 __isl_take isl_basic_set *bset); 588 __isl_give isl_map *isl_map_from_range(__isl_take isl_set *set); 589 __isl_give isl_basic_map *isl_basic_map_from_domain_and_range( 590 __isl_take isl_basic_set *domain, __isl_take isl_basic_set *range); 591 __isl_give isl_map *isl_map_from_domain_and_range(__isl_take isl_set *domain, 592 __isl_take isl_set *range); 593 __isl_export 594 __isl_give isl_basic_map *isl_map_sample(__isl_take isl_map *map); 595 596 __isl_export 597 __isl_give isl_set *isl_map_bind_domain(__isl_take isl_map *map, 598 __isl_take isl_multi_id *tuple); 599 __isl_export 600 __isl_give isl_set *isl_map_bind_range(__isl_take isl_map *map, 601 __isl_take isl_multi_id *tuple); 602 603 isl_bool isl_map_plain_is_empty(__isl_keep isl_map *map); 604 isl_bool isl_map_plain_is_universe(__isl_keep isl_map *map); 605 __isl_export 606 isl_bool isl_map_is_empty(__isl_keep isl_map *map); 607 __isl_export 608 isl_bool isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2); 609 __isl_export 610 isl_bool isl_map_is_strict_subset(__isl_keep isl_map *map1, 611 __isl_keep isl_map *map2); 612 __isl_export 613 isl_bool isl_map_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2); 614 __isl_export 615 isl_bool isl_map_is_disjoint(__isl_keep isl_map *map1, 616 __isl_keep isl_map *map2); 617 isl_bool isl_basic_map_is_single_valued(__isl_keep isl_basic_map *bmap); 618 isl_bool isl_map_plain_is_single_valued(__isl_keep isl_map *map); 619 __isl_export 620 isl_bool isl_map_is_single_valued(__isl_keep isl_map *map); 621 isl_bool isl_map_plain_is_injective(__isl_keep isl_map *map); 622 __isl_export 623 isl_bool isl_map_is_injective(__isl_keep isl_map *map); 624 __isl_export 625 isl_bool isl_map_is_bijective(__isl_keep isl_map *map); 626 isl_bool isl_map_is_identity(__isl_keep isl_map *map); 627 int isl_map_is_translation(__isl_keep isl_map *map); 628 isl_bool isl_map_has_equal_space(__isl_keep isl_map *map1, 629 __isl_keep isl_map *map2); 630 631 isl_bool isl_basic_map_can_zip(__isl_keep isl_basic_map *bmap); 632 isl_bool isl_map_can_zip(__isl_keep isl_map *map); 633 __isl_give isl_basic_map *isl_basic_map_zip(__isl_take isl_basic_map *bmap); 634 __isl_export 635 __isl_give isl_map *isl_map_zip(__isl_take isl_map *map); 636 637 isl_bool isl_basic_map_can_curry(__isl_keep isl_basic_map *bmap); 638 isl_bool isl_map_can_curry(__isl_keep isl_map *map); 639 __isl_give isl_basic_map *isl_basic_map_curry(__isl_take isl_basic_map *bmap); 640 __isl_export 641 __isl_give isl_map *isl_map_curry(__isl_take isl_map *map); 642 643 isl_bool isl_map_can_range_curry(__isl_keep isl_map *map); 644 __isl_give isl_map *isl_map_range_curry(__isl_take isl_map *map); 645 646 isl_bool isl_basic_map_can_uncurry(__isl_keep isl_basic_map *bmap); 647 isl_bool isl_map_can_uncurry(__isl_keep isl_map *map); 648 __isl_give isl_basic_map *isl_basic_map_uncurry(__isl_take isl_basic_map *bmap); 649 __isl_export 650 __isl_give isl_map *isl_map_uncurry(__isl_take isl_map *map); 651 652 __isl_give isl_map *isl_map_make_disjoint(__isl_take isl_map *map); 653 __isl_give isl_map *isl_basic_map_compute_divs(__isl_take isl_basic_map *bmap); 654 __isl_give isl_map *isl_map_compute_divs(__isl_take isl_map *map); 655 ISL_DEPRECATED 656 __isl_give isl_map *isl_map_align_divs(__isl_take isl_map *map); 657 658 __isl_give isl_basic_map *isl_basic_map_drop_constraints_involving_dims( 659 __isl_take isl_basic_map *bmap, 660 enum isl_dim_type type, unsigned first, unsigned n); 661 __isl_give isl_basic_map *isl_basic_map_drop_constraints_not_involving_dims( 662 __isl_take isl_basic_map *bmap, 663 enum isl_dim_type type, unsigned first, unsigned n); 664 __isl_give isl_map *isl_map_drop_constraints_involving_dims( 665 __isl_take isl_map *map, 666 enum isl_dim_type type, unsigned first, unsigned n); 667 __isl_give isl_map *isl_map_drop_constraints_not_involving_dims( 668 __isl_take isl_map *map, 669 enum isl_dim_type type, unsigned first, unsigned n); 670 671 isl_bool isl_basic_map_involves_dims(__isl_keep isl_basic_map *bmap, 672 enum isl_dim_type type, unsigned first, unsigned n); 673 isl_bool isl_map_involves_dims(__isl_keep isl_map *map, 674 enum isl_dim_type type, unsigned first, unsigned n); 675 676 void isl_map_print_internal(__isl_keep isl_map *map, FILE *out, int indent); 677 678 __isl_give isl_val *isl_map_plain_get_val_if_fixed(__isl_keep isl_map *map, 679 enum isl_dim_type type, unsigned pos); 680 681 __isl_give isl_basic_map *isl_basic_map_gist_domain( 682 __isl_take isl_basic_map *bmap, __isl_take isl_basic_set *context); 683 __isl_export 684 __isl_give isl_basic_map *isl_basic_map_gist(__isl_take isl_basic_map *bmap, 685 __isl_take isl_basic_map *context); 686 __isl_export 687 __isl_give isl_map *isl_map_gist(__isl_take isl_map *map, 688 __isl_take isl_map *context); 689 __isl_export 690 __isl_give isl_map *isl_map_gist_domain(__isl_take isl_map *map, 691 __isl_take isl_set *context); 692 __isl_give isl_map *isl_map_gist_range(__isl_take isl_map *map, 693 __isl_take isl_set *context); 694 __isl_export 695 __isl_give isl_map *isl_map_gist_params(__isl_take isl_map *map, 696 __isl_take isl_set *context); 697 __isl_give isl_map *isl_map_gist_basic_map(__isl_take isl_map *map, 698 __isl_take isl_basic_map *context); 699 700 __isl_give isl_stride_info *isl_map_get_range_stride_info( 701 __isl_keep isl_map *map, int pos); 702 __isl_export 703 __isl_give isl_fixed_box *isl_map_get_range_lattice_tile( 704 __isl_keep isl_map *map); 705 __isl_export 706 __isl_give isl_fixed_box *isl_map_get_range_simple_fixed_box_hull( 707 __isl_keep isl_map *map); 708 709 __isl_export 710 __isl_give isl_map *isl_map_coalesce(__isl_take isl_map *map); 711 712 isl_bool isl_map_plain_is_equal(__isl_keep isl_map *map1, 713 __isl_keep isl_map *map2); 714 715 uint32_t isl_map_get_hash(__isl_keep isl_map *map); 716 717 __isl_export 718 isl_size isl_map_n_basic_map(__isl_keep isl_map *map); 719 __isl_export 720 isl_stat isl_map_foreach_basic_map(__isl_keep isl_map *map, 721 isl_stat (*fn)(__isl_take isl_basic_map *bmap, void *user), void *user); 722 __isl_give isl_basic_map_list *isl_map_get_basic_map_list( 723 __isl_keep isl_map *map); 724 725 __isl_overload 726 __isl_give isl_map *isl_map_fixed_power_val(__isl_take isl_map *map, 727 __isl_take isl_val *exp); 728 __isl_give isl_map *isl_map_power(__isl_take isl_map *map, isl_bool *exact); 729 __isl_give isl_map *isl_map_reaching_path_lengths(__isl_take isl_map *map, 730 isl_bool *exact); 731 __isl_give isl_map *isl_map_transitive_closure(__isl_take isl_map *map, 732 isl_bool *exact); 733 734 __isl_give isl_map *isl_map_lex_le_map(__isl_take isl_map *map1, 735 __isl_take isl_map *map2); 736 __isl_give isl_map *isl_map_lex_lt_map(__isl_take isl_map *map1, 737 __isl_take isl_map *map2); 738 __isl_give isl_map *isl_map_lex_ge_map(__isl_take isl_map *map1, 739 __isl_take isl_map *map2); 740 __isl_give isl_map *isl_map_lex_gt_map(__isl_take isl_map *map1, 741 __isl_take isl_map *map2); 742 743 __isl_overload 744 __isl_give isl_map *isl_map_eq_at_multi_pw_aff(__isl_take isl_map *map, 745 __isl_take isl_multi_pw_aff *mpa); 746 __isl_overload 747 __isl_give isl_map *isl_map_lex_lt_at_multi_pw_aff(__isl_take isl_map *map, 748 __isl_take isl_multi_pw_aff *mpa); 749 __isl_overload 750 __isl_give isl_map *isl_map_lex_le_at_multi_pw_aff(__isl_take isl_map *map, 751 __isl_take isl_multi_pw_aff *mpa); 752 __isl_overload 753 __isl_give isl_map *isl_map_lex_gt_at_multi_pw_aff(__isl_take isl_map *map, 754 __isl_take isl_multi_pw_aff *mpa); 755 __isl_overload 756 __isl_give isl_map *isl_map_lex_ge_at_multi_pw_aff(__isl_take isl_map *map, 757 __isl_take isl_multi_pw_aff *mpa); 758 759 __isl_give isl_basic_map *isl_basic_map_align_params( 760 __isl_take isl_basic_map *bmap, __isl_take isl_space *model); 761 __isl_give isl_map *isl_map_align_params(__isl_take isl_map *map, 762 __isl_take isl_space *model); 763 __isl_give isl_basic_map *isl_basic_map_drop_unused_params( 764 __isl_take isl_basic_map *bmap); 765 __isl_export 766 __isl_give isl_map *isl_map_drop_unused_params(__isl_take isl_map *map); 767 768 __isl_give isl_mat *isl_basic_map_equalities_matrix( 769 __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, 770 enum isl_dim_type c2, enum isl_dim_type c3, 771 enum isl_dim_type c4, enum isl_dim_type c5); 772 __isl_give isl_mat *isl_basic_map_inequalities_matrix( 773 __isl_keep isl_basic_map *bmap, enum isl_dim_type c1, 774 enum isl_dim_type c2, enum isl_dim_type c3, 775 enum isl_dim_type c4, enum isl_dim_type c5); 776 __isl_give isl_basic_map *isl_basic_map_from_constraint_matrices( 777 __isl_take isl_space *space, 778 __isl_take isl_mat *eq, __isl_take isl_mat *ineq, enum isl_dim_type c1, 779 enum isl_dim_type c2, enum isl_dim_type c3, 780 enum isl_dim_type c4, enum isl_dim_type c5); 781 782 __isl_give isl_basic_map *isl_basic_map_from_aff(__isl_take isl_aff *aff); 783 __isl_give isl_basic_map *isl_basic_map_from_multi_aff( 784 __isl_take isl_multi_aff *maff); 785 __isl_give isl_basic_map *isl_basic_map_from_aff_list( 786 __isl_take isl_space *domain_space, __isl_take isl_aff_list *list); 787 788 __isl_give isl_map *isl_map_from_aff(__isl_take isl_aff *aff); 789 __isl_export 790 __isl_give isl_map *isl_multi_aff_as_map(__isl_take isl_multi_aff *ma); 791 __isl_give isl_map *isl_map_from_multi_aff(__isl_take isl_multi_aff *maff); 792 793 __isl_give isl_pw_aff *isl_map_dim_min(__isl_take isl_map *map, int pos); 794 __isl_give isl_pw_aff *isl_map_dim_max(__isl_take isl_map *map, int pos); 795 796 ISL_DECLARE_LIST_FN(basic_map) 797 ISL_DECLARE_EXPORTED_LIST_FN(map) 798 ISL_DECLARE_EXPORTED_LIST_FN_READ(map) 799 800 #if defined(__cplusplus) 801 } 802 #endif 803 804 #endif 805