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