• Home
  • Raw
  • Download

Lines Matching refs:space

23 isl_ctx *isl_space_get_ctx(__isl_keep isl_space *space)  in isl_space_get_ctx()  argument
25 return space ? space->ctx : NULL; in isl_space_get_ctx()
31 isl_space *space; in isl_space_alloc() local
33 space = isl_alloc_type(ctx, struct isl_space); in isl_space_alloc()
34 if (!space) in isl_space_alloc()
37 space->ctx = ctx; in isl_space_alloc()
39 space->ref = 1; in isl_space_alloc()
40 space->nparam = nparam; in isl_space_alloc()
41 space->n_in = n_in; in isl_space_alloc()
42 space->n_out = n_out; in isl_space_alloc()
44 space->tuple_id[0] = NULL; in isl_space_alloc()
45 space->tuple_id[1] = NULL; in isl_space_alloc()
47 space->nested[0] = NULL; in isl_space_alloc()
48 space->nested[1] = NULL; in isl_space_alloc()
50 space->n_id = 0; in isl_space_alloc()
51 space->ids = NULL; in isl_space_alloc()
53 return space; in isl_space_alloc()
59 static __isl_give isl_space *mark_as_set(__isl_take isl_space *space) in mark_as_set() argument
61 space = isl_space_cow(space); in mark_as_set()
62 if (!space) in mark_as_set()
64 space = isl_space_set_tuple_id(space, isl_dim_in, &isl_id_none); in mark_as_set()
65 return space; in mark_as_set()
70 isl_bool isl_space_is_set(__isl_keep isl_space *space) in isl_space_is_set() argument
72 if (!space) in isl_space_is_set()
74 if (space->n_in != 0 || space->nested[0]) in isl_space_is_set()
76 if (space->tuple_id[0] != &isl_id_none) in isl_space_is_set()
83 isl_stat isl_space_check_is_set(__isl_keep isl_space *space) in isl_space_check_is_set() argument
87 is_set = isl_space_is_set(space); in isl_space_check_is_set()
91 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_check_is_set()
98 isl_bool isl_space_is_map(__isl_keep isl_space *space) in isl_space_is_map() argument
102 if (!space) in isl_space_is_map()
104 r = space->tuple_id[0] != &isl_id_none && in isl_space_is_map()
105 space->tuple_id[1] != &isl_id_none; in isl_space_is_map()
111 static isl_stat isl_space_check_is_map(__isl_keep isl_space *space) in isl_space_check_is_map() argument
115 is_space = isl_space_is_map(space); in isl_space_check_is_map()
119 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_check_is_map()
127 isl_stat isl_space_check_range_is_wrapping(__isl_keep isl_space *space) in isl_space_check_range_is_wrapping() argument
131 wrapping = isl_space_range_is_wrapping(space); in isl_space_check_range_is_wrapping()
135 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_check_range_is_wrapping()
143 isl_space *space; in isl_space_set_alloc() local
144 space = isl_space_alloc(ctx, nparam, 0, dim); in isl_space_set_alloc()
145 space = mark_as_set(space); in isl_space_set_alloc()
146 return space; in isl_space_set_alloc()
152 static __isl_give isl_space *mark_as_params(isl_space *space) in mark_as_params() argument
154 if (!space) in mark_as_params()
156 space = isl_space_set_tuple_id(space, isl_dim_in, &isl_id_none); in mark_as_params()
157 space = isl_space_set_tuple_id(space, isl_dim_out, &isl_id_none); in mark_as_params()
158 return space; in mark_as_params()
163 isl_bool isl_space_is_params(__isl_keep isl_space *space) in isl_space_is_params() argument
165 if (!space) in isl_space_is_params()
167 if (space->n_in != 0 || space->nested[0] || in isl_space_is_params()
168 space->n_out != 0 || space->nested[1]) in isl_space_is_params()
170 if (space->tuple_id[0] != &isl_id_none) in isl_space_is_params()
172 if (space->tuple_id[1] != &isl_id_none) in isl_space_is_params()
181 isl_space *space; in isl_space_params_alloc() local
182 space = isl_space_alloc(ctx, nparam, 0, 0); in isl_space_params_alloc()
183 space = mark_as_params(space); in isl_space_params_alloc()
184 return space; in isl_space_params_alloc()
194 static isl_size global_pos(__isl_keep isl_space *space, in global_pos() argument
197 if (isl_space_check_range(space, type, pos, 1) < 0) in global_pos()
204 return pos + space->nparam; in global_pos()
206 return pos + space->nparam + space->n_in; in global_pos()
208 isl_assert(isl_space_get_ctx(space), 0, return isl_size_error); in global_pos()
215 static __isl_give isl_space *extend_ids(__isl_take isl_space *space) in extend_ids() argument
221 dim = isl_space_dim(space, isl_dim_all); in extend_ids()
223 return isl_space_free(space); in extend_ids()
224 if (dim <= space->n_id) in extend_ids()
225 return space; in extend_ids()
227 if (!space->ids) { in extend_ids()
228 space->ids = isl_calloc_array(space->ctx, isl_id *, dim); in extend_ids()
229 if (!space->ids) in extend_ids()
232 ids = isl_realloc_array(space->ctx, space->ids, isl_id *, dim); in extend_ids()
235 space->ids = ids; in extend_ids()
236 for (i = space->n_id; i < dim; ++i) in extend_ids()
237 space->ids[i] = NULL; in extend_ids()
240 space->n_id = dim; in extend_ids()
242 return space; in extend_ids()
244 isl_space_free(space); in extend_ids()
248 static __isl_give isl_space *set_id(__isl_take isl_space *space, in set_id() argument
253 space = isl_space_cow(space); in set_id()
255 gpos = global_pos(space, type, pos); in set_id()
259 if (gpos >= space->n_id) { in set_id()
261 return space; in set_id()
262 space = extend_ids(space); in set_id()
263 if (!space) in set_id()
267 space->ids[gpos] = id; in set_id()
269 return space; in set_id()
272 isl_space_free(space); in set_id()
276 static __isl_keep isl_id *get_id(__isl_keep isl_space *space, in get_id() argument
281 gpos = global_pos(space, type, pos); in get_id()
284 if (gpos >= space->n_id) in get_id()
286 return space->ids[gpos]; in get_id()
291 static __isl_keep isl_space *isl_space_peek_nested(__isl_keep isl_space *space, in isl_space_peek_nested() argument
294 if (!space) in isl_space_peek_nested()
296 if (!space->nested[pos]) in isl_space_peek_nested()
297 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_peek_nested()
299 return space->nested[pos]; in isl_space_peek_nested()
302 static unsigned offset(__isl_keep isl_space *space, enum isl_dim_type type) in offset() argument
306 case isl_dim_in: return space->nparam; in offset()
307 case isl_dim_out: return space->nparam + space->n_in; in offset()
312 static unsigned n(__isl_keep isl_space *space, enum isl_dim_type type) in n() argument
315 case isl_dim_param: return space->nparam; in n()
316 case isl_dim_in: return space->n_in; in n()
317 case isl_dim_out: return space->n_out; in n()
319 return space->nparam + space->n_in + space->n_out; in n()
324 isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type) in isl_space_dim() argument
326 if (!space) in isl_space_dim()
328 return n(space, type); in isl_space_dim()
334 isl_size isl_space_wrapped_dim(__isl_keep isl_space *space, in isl_space_wrapped_dim() argument
339 if (!space) in isl_space_wrapped_dim()
342 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_wrapped_dim()
346 return isl_space_dim(isl_space_peek_nested(space, pos), inner); in isl_space_wrapped_dim()
349 unsigned isl_space_offset(__isl_keep isl_space *space, enum isl_dim_type type) in isl_space_offset() argument
351 if (!space) in isl_space_offset()
353 return offset(space, type); in isl_space_offset()
377 __isl_take isl_space *isl_space_dup(__isl_keep isl_space *space) in isl_space_dup() argument
380 if (!space) in isl_space_dup()
382 dup = isl_space_alloc(space->ctx, in isl_space_dup()
383 space->nparam, space->n_in, space->n_out); in isl_space_dup()
386 if (space->tuple_id[0] && in isl_space_dup()
387 !(dup->tuple_id[0] = isl_id_copy(space->tuple_id[0]))) in isl_space_dup()
389 if (space->tuple_id[1] && in isl_space_dup()
390 !(dup->tuple_id[1] = isl_id_copy(space->tuple_id[1]))) in isl_space_dup()
392 if (space->nested[0] && in isl_space_dup()
393 !(dup->nested[0] = isl_space_copy(space->nested[0]))) in isl_space_dup()
395 if (space->nested[1] && in isl_space_dup()
396 !(dup->nested[1] = isl_space_copy(space->nested[1]))) in isl_space_dup()
398 if (!space->ids) in isl_space_dup()
400 dup = copy_ids(dup, isl_dim_param, 0, space, isl_dim_param); in isl_space_dup()
401 dup = copy_ids(dup, isl_dim_in, 0, space, isl_dim_in); in isl_space_dup()
402 dup = copy_ids(dup, isl_dim_out, 0, space, isl_dim_out); in isl_space_dup()
409 __isl_give isl_space *isl_space_cow(__isl_take isl_space *space) in isl_space_cow() argument
411 if (!space) in isl_space_cow()
414 if (space->ref == 1) in isl_space_cow()
415 return space; in isl_space_cow()
416 space->ref--; in isl_space_cow()
417 return isl_space_dup(space); in isl_space_cow()
420 __isl_give isl_space *isl_space_copy(__isl_keep isl_space *space) in isl_space_copy() argument
422 if (!space) in isl_space_copy()
425 space->ref++; in isl_space_copy()
426 return space; in isl_space_copy()
429 __isl_null isl_space *isl_space_free(__isl_take isl_space *space) in isl_space_free() argument
433 if (!space) in isl_space_free()
436 if (--space->ref > 0) in isl_space_free()
439 isl_id_free(space->tuple_id[0]); in isl_space_free()
440 isl_id_free(space->tuple_id[1]); in isl_space_free()
442 isl_space_free(space->nested[0]); in isl_space_free()
443 isl_space_free(space->nested[1]); in isl_space_free()
445 for (i = 0; i < space->n_id; ++i) in isl_space_free()
446 isl_id_free(space->ids[i]); in isl_space_free()
447 free(space->ids); in isl_space_free()
448 isl_ctx_deref(space->ctx); in isl_space_free()
450 free(space); in isl_space_free()
475 static __isl_keep isl_space *isl_space_get_nested(__isl_keep isl_space *space, in isl_space_get_nested() argument
478 return isl_space_copy(isl_space_peek_nested(space, pos)); in isl_space_get_nested()
490 static __isl_give isl_space *isl_space_take_nested(__isl_keep isl_space *space, in isl_space_take_nested() argument
495 if (!space) in isl_space_take_nested()
497 if (space->ref != 1) in isl_space_take_nested()
498 return isl_space_get_nested(space, pos); in isl_space_take_nested()
499 nested = space->nested[pos]; in isl_space_take_nested()
500 space->nested[pos] = NULL; in isl_space_take_nested()
511 __isl_take isl_space *space, int pos, __isl_take isl_space *nested) in isl_space_restore_nested() argument
513 if (!space || !nested) in isl_space_restore_nested()
516 if (space->nested[pos] == nested) { in isl_space_restore_nested()
518 return space; in isl_space_restore_nested()
521 space = isl_space_cow(space); in isl_space_restore_nested()
522 if (!space) in isl_space_restore_nested()
524 isl_space_free(space->nested[pos]); in isl_space_restore_nested()
525 space->nested[pos] = nested; in isl_space_restore_nested()
527 return space; in isl_space_restore_nested()
529 isl_space_free(space); in isl_space_restore_nested()
536 static int space_can_have_id(__isl_keep isl_space *space, in space_can_have_id() argument
539 if (!space) in space_can_have_id()
541 if (isl_space_is_params(space)) in space_can_have_id()
542 isl_die(space->ctx, isl_error_invalid, in space_can_have_id()
544 if (isl_space_is_set(space) && type != isl_dim_set) in space_can_have_id()
545 isl_die(space->ctx, isl_error_invalid, in space_can_have_id()
548 isl_die(space->ctx, isl_error_invalid, in space_can_have_id()
557 isl_bool isl_space_has_tuple_id(__isl_keep isl_space *space, in isl_space_has_tuple_id() argument
560 if (!space_can_have_id(space, type)) in isl_space_has_tuple_id()
562 return isl_bool_ok(space->tuple_id[type - isl_dim_in] != NULL); in isl_space_has_tuple_id()
565 __isl_give isl_id *isl_space_get_tuple_id(__isl_keep isl_space *space, in isl_space_get_tuple_id() argument
570 if (!space) in isl_space_get_tuple_id()
572 has_id = isl_space_has_tuple_id(space, type); in isl_space_get_tuple_id()
576 isl_die(space->ctx, isl_error_invalid, in isl_space_get_tuple_id()
578 return isl_id_copy(space->tuple_id[type - isl_dim_in]); in isl_space_get_tuple_id()
581 __isl_give isl_space *isl_space_set_tuple_id(__isl_take isl_space *space, in isl_space_set_tuple_id() argument
584 space = isl_space_cow(space); in isl_space_set_tuple_id()
585 if (!space || !id) in isl_space_set_tuple_id()
588 isl_die(space->ctx, isl_error_invalid, in isl_space_set_tuple_id()
592 isl_id_free(space->tuple_id[type - isl_dim_in]); in isl_space_set_tuple_id()
593 space->tuple_id[type - isl_dim_in] = id; in isl_space_set_tuple_id()
595 return space; in isl_space_set_tuple_id()
598 isl_space_free(space); in isl_space_set_tuple_id()
602 __isl_give isl_space *isl_space_reset_tuple_id(__isl_take isl_space *space, in isl_space_reset_tuple_id() argument
605 space = isl_space_cow(space); in isl_space_reset_tuple_id()
606 if (!space) in isl_space_reset_tuple_id()
609 isl_die(space->ctx, isl_error_invalid, in isl_space_reset_tuple_id()
613 isl_id_free(space->tuple_id[type - isl_dim_in]); in isl_space_reset_tuple_id()
614 space->tuple_id[type - isl_dim_in] = NULL; in isl_space_reset_tuple_id()
616 return space; in isl_space_reset_tuple_id()
618 isl_space_free(space); in isl_space_reset_tuple_id()
627 __isl_give isl_space *isl_space_set_dim_id(__isl_take isl_space *space, in isl_space_set_dim_id() argument
630 space = isl_space_cow(space); in isl_space_set_dim_id()
631 if (!space || !id) in isl_space_set_dim_id()
638 if (!space->nested[i]) in isl_space_set_dim_id()
640 space->nested[i] = in isl_space_set_dim_id()
641 isl_space_set_dim_id(space->nested[i], in isl_space_set_dim_id()
643 if (!space->nested[i]) in isl_space_set_dim_id()
648 isl_id_free(get_id(space, type, pos)); in isl_space_set_dim_id()
649 return set_id(space, type, pos, id); in isl_space_set_dim_id()
652 isl_space_free(space); in isl_space_set_dim_id()
661 __isl_give isl_space *isl_space_reset_dim_id(__isl_take isl_space *space, in isl_space_reset_dim_id() argument
664 space = isl_space_cow(space); in isl_space_reset_dim_id()
665 if (!space) in isl_space_reset_dim_id()
672 if (!space->nested[i]) in isl_space_reset_dim_id()
674 space->nested[i] = in isl_space_reset_dim_id()
675 isl_space_reset_dim_id(space->nested[i], in isl_space_reset_dim_id()
677 if (!space->nested[i]) in isl_space_reset_dim_id()
682 isl_id_free(get_id(space, type, pos)); in isl_space_reset_dim_id()
683 return set_id(space, type, pos, NULL); in isl_space_reset_dim_id()
685 isl_space_free(space); in isl_space_reset_dim_id()
689 isl_bool isl_space_has_dim_id(__isl_keep isl_space *space, in isl_space_has_dim_id() argument
692 if (!space) in isl_space_has_dim_id()
694 return isl_bool_ok(get_id(space, type, pos) != NULL); in isl_space_has_dim_id()
697 __isl_give isl_id *isl_space_get_dim_id(__isl_keep isl_space *space, in isl_space_get_dim_id() argument
700 if (!space) in isl_space_get_dim_id()
702 if (!get_id(space, type, pos)) in isl_space_get_dim_id()
703 isl_die(space->ctx, isl_error_invalid, in isl_space_get_dim_id()
705 return isl_id_copy(get_id(space, type, pos)); in isl_space_get_dim_id()
708 __isl_give isl_space *isl_space_set_tuple_name(__isl_take isl_space *space, in isl_space_set_tuple_name() argument
713 if (!space) in isl_space_set_tuple_name()
717 return isl_space_reset_tuple_id(space, type); in isl_space_set_tuple_name()
719 if (!name_ok(space->ctx, s)) in isl_space_set_tuple_name()
722 id = isl_id_alloc(space->ctx, s, NULL); in isl_space_set_tuple_name()
723 return isl_space_set_tuple_id(space, type, id); in isl_space_set_tuple_name()
725 isl_space_free(space); in isl_space_set_tuple_name()
731 isl_bool isl_space_has_tuple_name(__isl_keep isl_space *space, in isl_space_has_tuple_name() argument
736 if (!space_can_have_id(space, type)) in isl_space_has_tuple_name()
738 id = space->tuple_id[type - isl_dim_in]; in isl_space_has_tuple_name()
742 __isl_keep const char *isl_space_get_tuple_name(__isl_keep isl_space *space, in isl_space_get_tuple_name() argument
746 if (!space) in isl_space_get_tuple_name()
750 id = space->tuple_id[type - isl_dim_in]; in isl_space_get_tuple_name()
754 __isl_give isl_space *isl_space_set_dim_name(__isl_take isl_space *space, in isl_space_set_dim_name() argument
760 if (!space) in isl_space_set_dim_name()
763 return isl_space_reset_dim_id(space, type, pos); in isl_space_set_dim_name()
764 if (!name_ok(space->ctx, s)) in isl_space_set_dim_name()
766 id = isl_id_alloc(space->ctx, s, NULL); in isl_space_set_dim_name()
767 return isl_space_set_dim_id(space, type, pos, id); in isl_space_set_dim_name()
769 isl_space_free(space); in isl_space_set_dim_name()
775 isl_bool isl_space_has_dim_name(__isl_keep isl_space *space, in isl_space_has_dim_name() argument
780 if (!space) in isl_space_has_dim_name()
782 id = get_id(space, type, pos); in isl_space_has_dim_name()
786 __isl_keep const char *isl_space_get_dim_name(__isl_keep isl_space *space, in isl_space_get_dim_name() argument
789 isl_id *id = get_id(space, type, pos); in isl_space_get_dim_name()
793 int isl_space_find_dim_by_id(__isl_keep isl_space *space, in isl_space_find_dim_by_id() argument
800 n = isl_space_dim(space, type); in isl_space_find_dim_by_id()
804 offset = isl_space_offset(space, type); in isl_space_find_dim_by_id()
805 for (i = 0; i < n && offset + i < space->n_id; ++i) in isl_space_find_dim_by_id()
806 if (space->ids[offset + i] == id) in isl_space_find_dim_by_id()
812 int isl_space_find_dim_by_name(__isl_keep isl_space *space, in isl_space_find_dim_by_name() argument
819 n = isl_space_dim(space, type); in isl_space_find_dim_by_name()
823 offset = isl_space_offset(space, type); in isl_space_find_dim_by_name()
824 for (i = 0; i < n && offset + i < space->n_id; ++i) { in isl_space_find_dim_by_name()
825 isl_id *id = get_id(space, type, i); in isl_space_find_dim_by_name()
836 __isl_give isl_space *isl_space_reset_user(__isl_take isl_space *space) in isl_space_reset_user() argument
843 if (!space) in isl_space_reset_user()
846 ctx = isl_space_get_ctx(space); in isl_space_reset_user()
848 for (i = 0; i < space->nparam && i < space->n_id; ++i) { in isl_space_reset_user()
849 if (!isl_id_get_user(space->ids[i])) in isl_space_reset_user()
851 space = isl_space_cow(space); in isl_space_reset_user()
852 if (!space) in isl_space_reset_user()
854 name = isl_id_get_name(space->ids[i]); in isl_space_reset_user()
856 isl_id_free(space->ids[i]); in isl_space_reset_user()
857 space->ids[i] = id; in isl_space_reset_user()
859 return isl_space_free(space); in isl_space_reset_user()
863 if (!space->tuple_id[i]) in isl_space_reset_user()
865 if (!isl_id_get_user(space->tuple_id[i])) in isl_space_reset_user()
867 space = isl_space_cow(space); in isl_space_reset_user()
868 if (!space) in isl_space_reset_user()
870 name = isl_id_get_name(space->tuple_id[i]); in isl_space_reset_user()
872 isl_id_free(space->tuple_id[i]); in isl_space_reset_user()
873 space->tuple_id[i] = id; in isl_space_reset_user()
875 return isl_space_free(space); in isl_space_reset_user()
881 if (!space->nested[i]) in isl_space_reset_user()
883 nested = isl_space_take_nested(space, i); in isl_space_reset_user()
885 space = isl_space_restore_nested(space, i, nested); in isl_space_reset_user()
886 if (!space) in isl_space_reset_user()
890 return space; in isl_space_reset_user()
893 static __isl_keep isl_id *tuple_id(__isl_keep isl_space *space, in tuple_id() argument
896 if (!space) in tuple_id()
899 return space->tuple_id[0]; in tuple_id()
901 return space->tuple_id[1]; in tuple_id()
905 static __isl_keep isl_space *nested(__isl_keep isl_space *space, in nested() argument
908 if (!space) in nested()
911 return space->nested[0]; in nested()
913 return space->nested[1]; in nested()
1046 static void get_ids(__isl_keep isl_space *space, enum isl_dim_type type, in get_ids() argument
1052 ids[i] = get_id(space, type, first + i); in get_ids()
1055 static __isl_give isl_space *space_extend(__isl_take isl_space *space, in space_extend() argument
1060 if (!space) in space_extend()
1062 if (space->nparam == nparam && in space_extend()
1063 space->n_in == n_in && space->n_out == n_out) in space_extend()
1064 return space; in space_extend()
1066 isl_assert(space->ctx, space->nparam <= nparam, goto error); in space_extend()
1067 isl_assert(space->ctx, space->n_in <= n_in, goto error); in space_extend()
1068 isl_assert(space->ctx, space->n_out <= n_out, goto error); in space_extend()
1070 space = isl_space_cow(space); in space_extend()
1071 if (!space) in space_extend()
1074 if (space->ids) { in space_extend()
1078 isl_die(isl_space_get_ctx(space), isl_error_invalid, in space_extend()
1081 ids = isl_calloc_array(space->ctx, isl_id *, n); in space_extend()
1084 get_ids(space, isl_dim_param, 0, space->nparam, ids); in space_extend()
1085 get_ids(space, isl_dim_in, 0, space->n_in, ids + nparam); in space_extend()
1086 get_ids(space, isl_dim_out, 0, space->n_out, in space_extend()
1088 free(space->ids); in space_extend()
1089 space->ids = ids; in space_extend()
1090 space->n_id = nparam + n_in + n_out; in space_extend()
1092 space->nparam = nparam; in space_extend()
1093 space->n_in = n_in; in space_extend()
1094 space->n_out = n_out; in space_extend()
1096 return space; in space_extend()
1099 isl_space_free(space); in space_extend()
1103 __isl_give isl_space *isl_space_extend(__isl_take isl_space *space, in isl_space_extend() argument
1106 return space_extend(space, nparam, n_in, n_out); in isl_space_extend()
1109 __isl_give isl_space *isl_space_add_dims(__isl_take isl_space *space, in isl_space_add_dims() argument
1112 space = isl_space_reset(space, type); in isl_space_add_dims()
1113 if (!space) in isl_space_add_dims()
1117 space = space_extend(space, in isl_space_add_dims()
1118 space->nparam + n, space->n_in, space->n_out); in isl_space_add_dims()
1119 if (space && space->nested[0] && in isl_space_add_dims()
1120 !(space->nested[0] = isl_space_add_dims(space->nested[0], in isl_space_add_dims()
1123 if (space && space->nested[1] && in isl_space_add_dims()
1124 !(space->nested[1] = isl_space_add_dims(space->nested[1], in isl_space_add_dims()
1127 return space; in isl_space_add_dims()
1129 return space_extend(space, in isl_space_add_dims()
1130 space->nparam, space->n_in + n, space->n_out); in isl_space_add_dims()
1132 return space_extend(space, in isl_space_add_dims()
1133 space->nparam, space->n_in, space->n_out + n); in isl_space_add_dims()
1135 isl_die(space->ctx, isl_error_invalid, in isl_space_add_dims()
1139 isl_space_free(space); in isl_space_add_dims()
1146 __isl_give isl_space *isl_space_add_param_id(__isl_take isl_space *space, in isl_space_add_param_id() argument
1151 if (!space || !id) in isl_space_add_param_id()
1154 if (isl_space_find_dim_by_id(space, isl_dim_param, id) >= 0) { in isl_space_add_param_id()
1156 return space; in isl_space_add_param_id()
1159 pos = isl_space_dim(space, isl_dim_param); in isl_space_add_param_id()
1162 space = isl_space_add_dims(space, isl_dim_param, 1); in isl_space_add_param_id()
1163 space = isl_space_set_dim_id(space, isl_dim_param, pos, id); in isl_space_add_param_id()
1165 return space; in isl_space_add_param_id()
1167 isl_space_free(space); in isl_space_add_param_id()
1192 __isl_give isl_space *isl_space_insert_dims(__isl_take isl_space *space, in isl_space_insert_dims() argument
1198 if (!space) in isl_space_insert_dims()
1201 return isl_space_reset(space, type); in isl_space_insert_dims()
1203 ctx = isl_space_get_ctx(space); in isl_space_insert_dims()
1209 if (isl_space_check_range(space, type, pos, 0) < 0) in isl_space_insert_dims()
1210 return isl_space_free(space); in isl_space_insert_dims()
1212 space = isl_space_cow(space); in isl_space_insert_dims()
1213 if (!space) in isl_space_insert_dims()
1216 if (space->ids) { in isl_space_insert_dims()
1221 space->nparam + space->n_in + space->n_out + n); in isl_space_insert_dims()
1225 s[isl_dim_param - o] = space->nparam; in isl_space_insert_dims()
1226 s[isl_dim_in - o] = space->n_in; in isl_space_insert_dims()
1227 s[isl_dim_out - o] = space->n_out; in isl_space_insert_dims()
1230 get_ids(space, t, 0, s[t - o], ids + off); in isl_space_insert_dims()
1233 get_ids(space, t, 0, pos, ids + off); in isl_space_insert_dims()
1235 get_ids(space, t, pos, s[t - o] - pos, in isl_space_insert_dims()
1240 free(space->ids); in isl_space_insert_dims()
1241 space->ids = ids; in isl_space_insert_dims()
1242 space->n_id = space->nparam + space->n_in + space->n_out + n; in isl_space_insert_dims()
1245 case isl_dim_param: space->nparam += n; break; in isl_space_insert_dims()
1246 case isl_dim_in: space->n_in += n; break; in isl_space_insert_dims()
1247 case isl_dim_out: space->n_out += n; break; in isl_space_insert_dims()
1250 space = isl_space_reset(space, type); in isl_space_insert_dims()
1253 if (space && space->nested[0] && in isl_space_insert_dims()
1254 !(space->nested[0] = isl_space_insert_dims(space->nested[0], in isl_space_insert_dims()
1257 if (space && space->nested[1] && in isl_space_insert_dims()
1258 !(space->nested[1] = isl_space_insert_dims(space->nested[1], in isl_space_insert_dims()
1263 return space; in isl_space_insert_dims()
1265 isl_space_free(space); in isl_space_insert_dims()
1269 __isl_give isl_space *isl_space_move_dims(__isl_take isl_space *space, in isl_space_move_dims() argument
1275 space = isl_space_reset(space, src_type); in isl_space_move_dims()
1276 space = isl_space_reset(space, dst_type); in isl_space_move_dims()
1277 if (!space) in isl_space_move_dims()
1280 return space; in isl_space_move_dims()
1282 if (isl_space_check_range(space, src_type, src_pos, n) < 0) in isl_space_move_dims()
1283 return isl_space_free(space); in isl_space_move_dims()
1286 return space; in isl_space_move_dims()
1288 isl_assert(space->ctx, dst_type != src_type, goto error); in isl_space_move_dims()
1290 space = isl_space_cow(space); in isl_space_move_dims()
1291 if (!space) in isl_space_move_dims()
1294 if (space->ids) { in isl_space_move_dims()
1299 ids = isl_calloc_array(space->ctx, isl_id *, in isl_space_move_dims()
1300 space->nparam + space->n_in + space->n_out); in isl_space_move_dims()
1304 s[isl_dim_param - o] = space->nparam; in isl_space_move_dims()
1305 s[isl_dim_in - o] = space->n_in; in isl_space_move_dims()
1306 s[isl_dim_out - o] = space->n_out; in isl_space_move_dims()
1309 get_ids(space, t, 0, dst_pos, ids + off); in isl_space_move_dims()
1311 get_ids(space, src_type, src_pos, n, ids + off); in isl_space_move_dims()
1313 get_ids(space, t, dst_pos, s[t - o] - dst_pos, in isl_space_move_dims()
1317 get_ids(space, t, 0, src_pos, ids + off); in isl_space_move_dims()
1319 get_ids(space, t, src_pos + n, in isl_space_move_dims()
1323 get_ids(space, t, 0, s[t - o], ids + off); in isl_space_move_dims()
1327 free(space->ids); in isl_space_move_dims()
1328 space->ids = ids; in isl_space_move_dims()
1329 space->n_id = space->nparam + space->n_in + space->n_out; in isl_space_move_dims()
1333 case isl_dim_param: space->nparam += n; break; in isl_space_move_dims()
1334 case isl_dim_in: space->n_in += n; break; in isl_space_move_dims()
1335 case isl_dim_out: space->n_out += n; break; in isl_space_move_dims()
1340 case isl_dim_param: space->nparam -= n; break; in isl_space_move_dims()
1341 case isl_dim_in: space->n_in -= n; break; in isl_space_move_dims()
1342 case isl_dim_out: space->n_out -= n; break; in isl_space_move_dims()
1347 return space; in isl_space_move_dims()
1352 if (!space->nested[i]) in isl_space_move_dims()
1354 nested = isl_space_take_nested(space, i); in isl_space_move_dims()
1355 nested = isl_space_replace_params(nested, space); in isl_space_move_dims()
1356 space = isl_space_restore_nested(space, i, nested); in isl_space_move_dims()
1357 if (!space) in isl_space_move_dims()
1361 return space; in isl_space_move_dims()
1363 isl_space_free(space); in isl_space_move_dims()
1387 isl_space *space; in isl_space_join() local
1396 space = isl_space_alloc(left->ctx, in isl_space_join()
1398 if (!space) in isl_space_join()
1401 space = copy_ids(space, isl_dim_param, 0, left, isl_dim_param); in isl_space_join()
1402 space = copy_ids(space, isl_dim_in, 0, left, isl_dim_in); in isl_space_join()
1403 space = copy_ids(space, isl_dim_out, 0, right, isl_dim_out); in isl_space_join()
1405 if (space && left->tuple_id[0] && in isl_space_join()
1406 !(space->tuple_id[0] = isl_id_copy(left->tuple_id[0]))) in isl_space_join()
1408 if (space && right->tuple_id[1] && in isl_space_join()
1409 !(space->tuple_id[1] = isl_id_copy(right->tuple_id[1]))) in isl_space_join()
1411 if (space && left->nested[0] && in isl_space_join()
1412 !(space->nested[0] = isl_space_copy(left->nested[0]))) in isl_space_join()
1414 if (space && right->nested[1] && in isl_space_join()
1415 !(space->nested[1] = isl_space_copy(right->nested[1]))) in isl_space_join()
1421 return space; in isl_space_join()
1523 __isl_take isl_space *space) in isl_space_domain_factor_domain() argument
1528 if (!space) in isl_space_domain_factor_domain()
1530 if (!isl_space_domain_is_wrapping(space)) in isl_space_domain_factor_domain()
1531 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_domain_factor_domain()
1532 "domain not a product", return isl_space_free(space)); in isl_space_domain_factor_domain()
1534 nested = space->nested[0]; in isl_space_domain_factor_domain()
1535 domain = isl_space_copy(space); in isl_space_domain_factor_domain()
1539 return isl_space_free(space); in isl_space_domain_factor_domain()
1551 isl_space_free(space); in isl_space_domain_factor_domain()
1554 isl_space_free(space); in isl_space_domain_factor_domain()
1562 __isl_take isl_space *space) in isl_space_domain_factor_range() argument
1567 if (!space) in isl_space_domain_factor_range()
1569 if (!isl_space_domain_is_wrapping(space)) in isl_space_domain_factor_range()
1570 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_domain_factor_range()
1571 "domain not a product", return isl_space_free(space)); in isl_space_domain_factor_range()
1573 nested = space->nested[0]; in isl_space_domain_factor_range()
1574 range = isl_space_copy(space); in isl_space_domain_factor_range()
1577 return isl_space_free(space); in isl_space_domain_factor_range()
1589 isl_space_free(space); in isl_space_domain_factor_range()
1592 isl_space_free(space); in isl_space_domain_factor_range()
1602 static __isl_give isl_space *range_factor_domain(__isl_take isl_space *space) in range_factor_domain() argument
1607 if (!space) in range_factor_domain()
1610 nested = space->nested[1]; in range_factor_domain()
1611 domain = isl_space_copy(space); in range_factor_domain()
1615 return isl_space_free(space); in range_factor_domain()
1627 isl_space_free(space); in range_factor_domain()
1630 isl_space_free(space); in range_factor_domain()
1638 __isl_take isl_space *space) in isl_space_range_factor_domain() argument
1640 if (isl_space_check_range_is_wrapping(space) < 0) in isl_space_range_factor_domain()
1641 return isl_space_free(space); in isl_space_range_factor_domain()
1643 return range_factor_domain(space); in isl_space_range_factor_domain()
1648 static __isl_give isl_space *set_factor_domain(__isl_take isl_space *space) in set_factor_domain() argument
1650 if (!space) in set_factor_domain()
1652 if (!isl_space_is_wrapping(space)) in set_factor_domain()
1653 isl_die(isl_space_get_ctx(space), isl_error_invalid, in set_factor_domain()
1654 "not a product", return isl_space_free(space)); in set_factor_domain()
1656 return range_factor_domain(space); in set_factor_domain()
1662 __isl_give isl_space *isl_space_factor_domain(__isl_take isl_space *space) in isl_space_factor_domain() argument
1664 if (!space) in isl_space_factor_domain()
1666 if (isl_space_is_set(space)) in isl_space_factor_domain()
1667 return set_factor_domain(space); in isl_space_factor_domain()
1668 space = isl_space_domain_factor_domain(space); in isl_space_factor_domain()
1669 space = isl_space_range_factor_domain(space); in isl_space_factor_domain()
1670 return space; in isl_space_factor_domain()
1678 static __isl_give isl_space *range_factor_range(__isl_take isl_space *space) in range_factor_range() argument
1683 if (!space) in range_factor_range()
1686 nested = space->nested[1]; in range_factor_range()
1687 range = isl_space_copy(space); in range_factor_range()
1690 return isl_space_free(space); in range_factor_range()
1702 isl_space_free(space); in range_factor_range()
1705 isl_space_free(space); in range_factor_range()
1713 __isl_take isl_space *space) in isl_space_range_factor_range() argument
1715 if (isl_space_check_range_is_wrapping(space) < 0) in isl_space_range_factor_range()
1716 return isl_space_free(space); in isl_space_range_factor_range()
1718 return range_factor_range(space); in isl_space_range_factor_range()
1723 static __isl_give isl_space *set_factor_range(__isl_take isl_space *space) in set_factor_range() argument
1725 if (!space) in set_factor_range()
1727 if (!isl_space_is_wrapping(space)) in set_factor_range()
1728 isl_die(isl_space_get_ctx(space), isl_error_invalid, in set_factor_range()
1729 "not a product", return isl_space_free(space)); in set_factor_range()
1731 return range_factor_range(space); in set_factor_range()
1737 __isl_give isl_space *isl_space_factor_range(__isl_take isl_space *space) in isl_space_factor_range() argument
1739 if (!space) in isl_space_factor_range()
1741 if (isl_space_is_set(space)) in isl_space_factor_range()
1742 return set_factor_range(space); in isl_space_factor_range()
1743 space = isl_space_domain_factor_range(space); in isl_space_factor_range()
1744 space = isl_space_range_factor_range(space); in isl_space_factor_range()
1745 return space; in isl_space_factor_range()
1748 __isl_give isl_space *isl_space_map_from_set(__isl_take isl_space *space) in isl_space_map_from_set() argument
1754 if (!space) in isl_space_map_from_set()
1756 ctx = isl_space_get_ctx(space); in isl_space_map_from_set()
1757 if (!isl_space_is_set(space)) in isl_space_map_from_set()
1759 space = isl_space_cow(space); in isl_space_map_from_set()
1760 if (!space) in isl_space_map_from_set()
1762 n_id = space->nparam + space->n_out + space->n_out; in isl_space_map_from_set()
1763 if (n_id > 0 && space->ids) { in isl_space_map_from_set()
1764 ids = isl_calloc_array(space->ctx, isl_id *, n_id); in isl_space_map_from_set()
1767 get_ids(space, isl_dim_param, 0, space->nparam, ids); in isl_space_map_from_set()
1768 get_ids(space, isl_dim_out, 0, space->n_out, in isl_space_map_from_set()
1769 ids + space->nparam); in isl_space_map_from_set()
1771 space->n_in = space->n_out; in isl_space_map_from_set()
1773 free(space->ids); in isl_space_map_from_set()
1774 space->ids = ids; in isl_space_map_from_set()
1775 space->n_id = n_id; in isl_space_map_from_set()
1776 space = copy_ids(space, isl_dim_out, 0, space, isl_dim_in); in isl_space_map_from_set()
1778 isl_id_free(space->tuple_id[0]); in isl_space_map_from_set()
1779 space->tuple_id[0] = isl_id_copy(space->tuple_id[1]); in isl_space_map_from_set()
1780 isl_space_free(space->nested[0]); in isl_space_map_from_set()
1781 space->nested[0] = isl_space_copy(space->nested[1]); in isl_space_map_from_set()
1782 return space; in isl_space_map_from_set()
1784 isl_space_free(space); in isl_space_map_from_set()
1806 static __isl_give isl_space *set_ids(__isl_take isl_space *space, in set_ids() argument
1813 space = set_id(space, type, first + i, ids[i]); in set_ids()
1815 return space; in set_ids()
1818 __isl_give isl_space *isl_space_reverse(__isl_take isl_space *space) in isl_space_reverse() argument
1826 equal = match(space, isl_dim_in, space, isl_dim_out); in isl_space_reverse()
1828 return isl_space_free(space); in isl_space_reverse()
1830 return space; in isl_space_reverse()
1832 space = isl_space_cow(space); in isl_space_reverse()
1833 if (!space) in isl_space_reverse()
1836 id = space->tuple_id[0]; in isl_space_reverse()
1837 space->tuple_id[0] = space->tuple_id[1]; in isl_space_reverse()
1838 space->tuple_id[1] = id; in isl_space_reverse()
1840 nested = space->nested[0]; in isl_space_reverse()
1841 space->nested[0] = space->nested[1]; in isl_space_reverse()
1842 space->nested[1] = nested; in isl_space_reverse()
1844 if (space->ids) { in isl_space_reverse()
1845 int n_id = space->n_in + space->n_out; in isl_space_reverse()
1846 ids = isl_alloc_array(space->ctx, isl_id *, n_id); in isl_space_reverse()
1849 get_ids(space, isl_dim_in, 0, space->n_in, ids); in isl_space_reverse()
1850 get_ids(space, isl_dim_out, 0, space->n_out, ids + space->n_in); in isl_space_reverse()
1853 t = space->n_in; in isl_space_reverse()
1854 space->n_in = space->n_out; in isl_space_reverse()
1855 space->n_out = t; in isl_space_reverse()
1857 if (space->ids) { in isl_space_reverse()
1858 space = set_ids(space, isl_dim_out, 0, space->n_out, ids); in isl_space_reverse()
1859 space = set_ids(space, isl_dim_in, 0, space->n_in, in isl_space_reverse()
1860 ids + space->n_out); in isl_space_reverse()
1864 return space; in isl_space_reverse()
1867 isl_space_free(space); in isl_space_reverse()
1878 __isl_give isl_space *isl_space_range_reverse(__isl_take isl_space *space) in isl_space_range_reverse() argument
1883 if (isl_space_check_range_is_wrapping(space) < 0) in isl_space_range_reverse()
1884 return isl_space_free(space); in isl_space_range_reverse()
1886 nested = isl_space_peek_nested(space, 1); in isl_space_range_reverse()
1890 return isl_space_free(space); in isl_space_range_reverse()
1892 nested = isl_space_take_nested(space, 1); in isl_space_range_reverse()
1894 space = isl_space_restore_nested(space, 1, nested); in isl_space_range_reverse()
1896 space = isl_space_reset_tuple_id(space, isl_dim_out); in isl_space_range_reverse()
1898 return space; in isl_space_range_reverse()
1901 __isl_give isl_space *isl_space_drop_dims(__isl_take isl_space *space, in isl_space_drop_dims() argument
1906 if (!space) in isl_space_drop_dims()
1910 return isl_space_reset(space, type); in isl_space_drop_dims()
1913 isl_die(space->ctx, isl_error_invalid, in isl_space_drop_dims()
1916 if (isl_space_check_range(space, type, first, num) < 0) in isl_space_drop_dims()
1917 return isl_space_free(space); in isl_space_drop_dims()
1918 space = isl_space_cow(space); in isl_space_drop_dims()
1919 if (!space) in isl_space_drop_dims()
1921 if (space->ids) { in isl_space_drop_dims()
1922 space = extend_ids(space); in isl_space_drop_dims()
1923 if (!space) in isl_space_drop_dims()
1926 isl_id_free(get_id(space, type, first + i)); in isl_space_drop_dims()
1927 for (i = first+num; i < n(space, type); ++i) in isl_space_drop_dims()
1928 set_id(space, type, i - num, get_id(space, type, i)); in isl_space_drop_dims()
1931 get_ids(space, isl_dim_in, 0, space->n_in, in isl_space_drop_dims()
1932 space->ids + offset(space, isl_dim_in) - num); in isl_space_drop_dims()
1934 get_ids(space, isl_dim_out, 0, space->n_out, in isl_space_drop_dims()
1935 space->ids + offset(space, isl_dim_out) - num); in isl_space_drop_dims()
1939 space->n_id -= num; in isl_space_drop_dims()
1942 case isl_dim_param: space->nparam -= num; break; in isl_space_drop_dims()
1943 case isl_dim_in: space->n_in -= num; break; in isl_space_drop_dims()
1944 case isl_dim_out: space->n_out -= num; break; in isl_space_drop_dims()
1947 space = isl_space_reset(space, type); in isl_space_drop_dims()
1949 if (space && space->nested[0] && in isl_space_drop_dims()
1950 !(space->nested[0] = isl_space_drop_dims(space->nested[0], in isl_space_drop_dims()
1953 if (space && space->nested[1] && in isl_space_drop_dims()
1954 !(space->nested[1] = isl_space_drop_dims(space->nested[1], in isl_space_drop_dims()
1958 return space; in isl_space_drop_dims()
1960 isl_space_free(space); in isl_space_drop_dims()
1964 __isl_give isl_space *isl_space_drop_inputs(__isl_take isl_space *space, in isl_space_drop_inputs() argument
1967 if (!space) in isl_space_drop_inputs()
1969 return isl_space_drop_dims(space, isl_dim_in, first, n); in isl_space_drop_inputs()
1972 __isl_give isl_space *isl_space_drop_outputs(__isl_take isl_space *space, in isl_space_drop_outputs() argument
1975 if (!space) in isl_space_drop_outputs()
1977 return isl_space_drop_dims(space, isl_dim_out, first, n); in isl_space_drop_outputs()
1982 __isl_give isl_space *isl_space_drop_all_params(__isl_take isl_space *space) in isl_space_drop_all_params() argument
1986 nparam = isl_space_dim(space, isl_dim_param); in isl_space_drop_all_params()
1988 return isl_space_free(space); in isl_space_drop_all_params()
1989 return isl_space_drop_dims(space, isl_dim_param, 0, nparam); in isl_space_drop_all_params()
1992 __isl_give isl_space *isl_space_domain(__isl_take isl_space *space) in isl_space_domain() argument
1994 if (!space) in isl_space_domain()
1996 space = isl_space_drop_dims(space, isl_dim_out, 0, space->n_out); in isl_space_domain()
1997 space = isl_space_reverse(space); in isl_space_domain()
1998 space = mark_as_set(space); in isl_space_domain()
1999 return space; in isl_space_domain()
2002 __isl_give isl_space *isl_space_from_domain(__isl_take isl_space *space) in isl_space_from_domain() argument
2004 if (!space) in isl_space_from_domain()
2006 if (!isl_space_is_set(space)) in isl_space_from_domain()
2007 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_from_domain()
2009 space = isl_space_reverse(space); in isl_space_from_domain()
2010 space = isl_space_reset(space, isl_dim_out); in isl_space_from_domain()
2011 return space; in isl_space_from_domain()
2013 isl_space_free(space); in isl_space_from_domain()
2017 __isl_give isl_space *isl_space_range(__isl_take isl_space *space) in isl_space_range() argument
2019 if (!space) in isl_space_range()
2021 space = isl_space_drop_dims(space, isl_dim_in, 0, space->n_in); in isl_space_range()
2022 space = mark_as_set(space); in isl_space_range()
2023 return space; in isl_space_range()
2026 __isl_give isl_space *isl_space_from_range(__isl_take isl_space *space) in isl_space_from_range() argument
2028 if (!space) in isl_space_from_range()
2030 if (!isl_space_is_set(space)) in isl_space_from_range()
2031 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_from_range()
2033 return isl_space_reset(space, isl_dim_in); in isl_space_from_range()
2035 isl_space_free(space); in isl_space_from_range()
2041 __isl_give isl_space *isl_space_domain_map(__isl_take isl_space *space) in isl_space_domain_map() argument
2045 domain = isl_space_from_range(isl_space_domain(isl_space_copy(space))); in isl_space_domain_map()
2046 space = isl_space_from_domain(isl_space_wrap(space)); in isl_space_domain_map()
2047 space = isl_space_join(space, domain); in isl_space_domain_map()
2049 return space; in isl_space_domain_map()
2054 __isl_give isl_space *isl_space_range_map(__isl_take isl_space *space) in isl_space_range_map() argument
2058 range = isl_space_from_range(isl_space_range(isl_space_copy(space))); in isl_space_range_map()
2059 space = isl_space_from_domain(isl_space_wrap(space)); in isl_space_range_map()
2060 space = isl_space_join(space, range); in isl_space_range_map()
2062 return space; in isl_space_range_map()
2065 __isl_give isl_space *isl_space_params(__isl_take isl_space *space) in isl_space_params() argument
2069 if (isl_space_is_params(space)) in isl_space_params()
2070 return space; in isl_space_params()
2071 n_in = isl_space_dim(space, isl_dim_in); in isl_space_params()
2072 n_out = isl_space_dim(space, isl_dim_out); in isl_space_params()
2074 return isl_space_free(space); in isl_space_params()
2075 space = isl_space_drop_dims(space, isl_dim_in, 0, n_in); in isl_space_params()
2076 space = isl_space_drop_dims(space, isl_dim_out, 0, n_out); in isl_space_params()
2077 space = mark_as_params(space); in isl_space_params()
2078 return space; in isl_space_params()
2081 __isl_give isl_space *isl_space_set_from_params(__isl_take isl_space *space) in isl_space_set_from_params() argument
2083 if (!space) in isl_space_set_from_params()
2085 if (!isl_space_is_params(space)) in isl_space_set_from_params()
2086 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_set_from_params()
2088 return isl_space_reset(space, isl_dim_set); in isl_space_set_from_params()
2090 isl_space_free(space); in isl_space_set_from_params()
2103 __isl_take isl_space *space, unsigned dim) in isl_space_add_unnamed_tuple_ui() argument
2107 is_params = isl_space_is_params(space); in isl_space_add_unnamed_tuple_ui()
2108 is_set = isl_space_is_set(space); in isl_space_add_unnamed_tuple_ui()
2110 return isl_space_free(space); in isl_space_add_unnamed_tuple_ui()
2112 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_add_unnamed_tuple_ui()
2114 return isl_space_free(space)); in isl_space_add_unnamed_tuple_ui()
2116 space = isl_space_set_from_params(space); in isl_space_add_unnamed_tuple_ui()
2118 space = isl_space_from_domain(space); in isl_space_add_unnamed_tuple_ui()
2119 space = isl_space_add_dims(space, isl_dim_out, dim); in isl_space_add_unnamed_tuple_ui()
2120 return space; in isl_space_add_unnamed_tuple_ui()
2128 __isl_take isl_space *space, __isl_take isl_id *tuple_id, unsigned dim) in isl_space_add_named_tuple_id_ui() argument
2130 space = isl_space_add_unnamed_tuple_ui(space, dim); in isl_space_add_named_tuple_id_ui()
2131 space = isl_space_set_tuple_id(space, isl_dim_out, tuple_id); in isl_space_add_named_tuple_id_ui()
2132 return space; in isl_space_add_named_tuple_id_ui()
2138 static isl_stat check_fresh_params(__isl_keep isl_space *space, in check_fresh_params() argument
2154 pos = isl_space_find_dim_by_id(space, isl_dim_param, id); in check_fresh_params()
2157 isl_die(isl_space_get_ctx(space), isl_error_invalid, in check_fresh_params()
2167 static __isl_give isl_space *add_bind_params(__isl_take isl_space *space, in add_bind_params() argument
2173 first = isl_space_dim(space, isl_dim_param); in add_bind_params()
2176 return isl_space_free(space); in add_bind_params()
2177 space = isl_space_add_dims(space, isl_dim_param, n); in add_bind_params()
2182 space = isl_space_set_dim_id(space, in add_bind_params()
2186 return space; in add_bind_params()
2195 __isl_give isl_space *isl_space_bind_set(__isl_take isl_space *space, in isl_space_bind_set() argument
2200 if (isl_space_check_is_set(space) < 0) in isl_space_bind_set()
2201 return isl_space_free(space); in isl_space_bind_set()
2203 if (isl_space_check_equal_tuples(tuple_space, space) < 0) in isl_space_bind_set()
2204 return isl_space_free(space); in isl_space_bind_set()
2205 if (check_fresh_params(space, tuple) < 0) in isl_space_bind_set()
2206 return isl_space_free(space); in isl_space_bind_set()
2207 space = isl_space_params(space); in isl_space_bind_set()
2208 space = add_bind_params(space, tuple); in isl_space_bind_set()
2209 return space; in isl_space_bind_set()
2218 __isl_give isl_space *isl_space_bind_map_domain(__isl_take isl_space *space, in isl_space_bind_map_domain() argument
2223 if (isl_space_check_is_map(space) < 0) in isl_space_bind_map_domain()
2224 return isl_space_free(space); in isl_space_bind_map_domain()
2226 if (isl_space_check_domain_tuples(tuple_space, space) < 0) in isl_space_bind_map_domain()
2227 return isl_space_free(space); in isl_space_bind_map_domain()
2228 if (check_fresh_params(space, tuple) < 0) in isl_space_bind_map_domain()
2229 return isl_space_free(space); in isl_space_bind_map_domain()
2230 space = isl_space_range(space); in isl_space_bind_map_domain()
2231 space = add_bind_params(space, tuple); in isl_space_bind_map_domain()
2232 return space; in isl_space_bind_map_domain()
2243 __isl_take isl_space *space, __isl_keep isl_multi_id *tuple) in isl_space_bind_domain_wrapped_domain() argument
2247 if (isl_space_check_is_map(space) < 0) in isl_space_bind_domain_wrapped_domain()
2248 return isl_space_free(space); in isl_space_bind_domain_wrapped_domain()
2251 space) < 0) in isl_space_bind_domain_wrapped_domain()
2252 return isl_space_free(space); in isl_space_bind_domain_wrapped_domain()
2253 if (check_fresh_params(space, tuple) < 0) in isl_space_bind_domain_wrapped_domain()
2254 return isl_space_free(space); in isl_space_bind_domain_wrapped_domain()
2255 space = isl_space_domain_factor_range(space); in isl_space_bind_domain_wrapped_domain()
2256 space = add_bind_params(space, tuple); in isl_space_bind_domain_wrapped_domain()
2257 return space; in isl_space_bind_domain_wrapped_domain()
2267 __isl_take isl_space *space, __isl_take isl_space *domain) in isl_space_insert_domain() argument
2271 domain = isl_space_replace_params(domain, space); in isl_space_insert_domain()
2273 is_params = isl_space_is_params(space); in isl_space_insert_domain()
2276 space = isl_space_free(space); in isl_space_insert_domain()
2278 isl_space_free(space); in isl_space_insert_domain()
2279 space = domain; in isl_space_insert_domain()
2281 space = isl_space_map_from_domain_and_range(domain, space); in isl_space_insert_domain()
2283 return space; in isl_space_insert_domain()
2301 __isl_take isl_space *space, __isl_keep isl_multi_id *tuple) in isl_space_unbind_params_insert_domain() argument
2308 if (!space || n < 0) in isl_space_unbind_params_insert_domain()
2309 return isl_space_free(space); in isl_space_unbind_params_insert_domain()
2316 return isl_space_free(space); in isl_space_unbind_params_insert_domain()
2317 pos = isl_space_find_dim_by_id(space, isl_dim_param, id); in isl_space_unbind_params_insert_domain()
2321 space = isl_space_drop_dims(space, isl_dim_param, pos, 1); in isl_space_unbind_params_insert_domain()
2331 return isl_space_insert_domain(space, tuple_space); in isl_space_unbind_params_insert_domain()
2334 __isl_give isl_space *isl_space_underlying(__isl_take isl_space *space, in isl_space_underlying() argument
2340 is_set = isl_space_is_set(space); in isl_space_underlying()
2342 return isl_space_free(space); in isl_space_underlying()
2344 space->nparam == 0 && space->n_in == 0 && space->n_id == 0) in isl_space_underlying()
2345 return isl_space_reset(space, isl_dim_out); in isl_space_underlying()
2346 space = isl_space_cow(space); in isl_space_underlying()
2347 if (!space) in isl_space_underlying()
2349 space->n_out += space->nparam + space->n_in + n_div; in isl_space_underlying()
2350 space->nparam = 0; in isl_space_underlying()
2351 space->n_in = 0; in isl_space_underlying()
2353 for (i = 0; i < space->n_id; ++i) in isl_space_underlying()
2354 isl_id_free(get_id(space, isl_dim_out, i)); in isl_space_underlying()
2355 space->n_id = 0; in isl_space_underlying()
2356 space = isl_space_reset(space, isl_dim_in); in isl_space_underlying()
2357 space = isl_space_reset(space, isl_dim_out); in isl_space_underlying()
2358 space = mark_as_set(space); in isl_space_underlying()
2360 return space; in isl_space_underlying()
2516 static uint32_t isl_hash_params(uint32_t hash, __isl_keep isl_space *space) in isl_hash_params() argument
2521 if (!space) in isl_hash_params()
2524 isl_hash_byte(hash, space->nparam % 256); in isl_hash_params()
2526 for (i = 0; i < space->nparam; ++i) { in isl_hash_params()
2527 id = get_id(space, isl_dim_param, i); in isl_hash_params()
2537 static uint32_t isl_hash_tuples(uint32_t hash, __isl_keep isl_space *space) in isl_hash_tuples() argument
2541 if (!space) in isl_hash_tuples()
2544 isl_hash_byte(hash, space->n_in % 256); in isl_hash_tuples()
2545 isl_hash_byte(hash, space->n_out % 256); in isl_hash_tuples()
2547 id = tuple_id(space, isl_dim_in); in isl_hash_tuples()
2549 id = tuple_id(space, isl_dim_out); in isl_hash_tuples()
2552 hash = isl_hash_tuples(hash, space->nested[0]); in isl_hash_tuples()
2553 hash = isl_hash_tuples(hash, space->nested[1]); in isl_hash_tuples()
2563 __isl_keep isl_space *space) in isl_hash_tuples_domain() argument
2567 if (!space) in isl_hash_tuples_domain()
2571 isl_hash_byte(hash, space->n_in % 256); in isl_hash_tuples_domain()
2574 id = tuple_id(space, isl_dim_in); in isl_hash_tuples_domain()
2577 hash = isl_hash_tuples(hash, space->nested[0]); in isl_hash_tuples_domain()
2585 uint32_t isl_space_get_tuple_hash(__isl_keep isl_space *space) in isl_space_get_tuple_hash() argument
2589 if (!space) in isl_space_get_tuple_hash()
2593 hash = isl_hash_tuples(hash, space); in isl_space_get_tuple_hash()
2598 uint32_t isl_space_get_hash(__isl_keep isl_space *space) in isl_space_get_hash() argument
2602 if (!space) in isl_space_get_hash()
2606 hash = isl_hash_params(hash, space); in isl_space_get_hash()
2607 hash = isl_hash_tuples(hash, space); in isl_space_get_hash()
2616 uint32_t isl_space_get_domain_hash(__isl_keep isl_space *space) in isl_space_get_domain_hash() argument
2620 if (!space) in isl_space_get_domain_hash()
2624 hash = isl_hash_params(hash, space); in isl_space_get_domain_hash()
2625 hash = isl_hash_tuples_domain(hash, space); in isl_space_get_domain_hash()
2632 isl_bool isl_space_is_wrapping(__isl_keep isl_space *space) in isl_space_is_wrapping() argument
2634 if (!space) in isl_space_is_wrapping()
2637 if (!isl_space_is_set(space)) in isl_space_is_wrapping()
2640 return isl_bool_ok(space->nested[1] != NULL); in isl_space_is_wrapping()
2645 isl_bool isl_space_domain_is_wrapping(__isl_keep isl_space *space) in isl_space_domain_is_wrapping() argument
2647 if (!space) in isl_space_domain_is_wrapping()
2650 if (isl_space_is_set(space)) in isl_space_domain_is_wrapping()
2653 return isl_bool_ok(space->nested[0] != NULL); in isl_space_domain_is_wrapping()
2658 isl_bool isl_space_range_is_wrapping(__isl_keep isl_space *space) in isl_space_range_is_wrapping() argument
2660 if (!space) in isl_space_range_is_wrapping()
2663 if (isl_space_is_set(space)) in isl_space_range_is_wrapping()
2666 return isl_bool_ok(space->nested[1] != NULL); in isl_space_range_is_wrapping()
2673 isl_bool isl_space_is_product(__isl_keep isl_space *space) in isl_space_is_product() argument
2678 is_set = isl_space_is_set(space); in isl_space_is_product()
2682 return isl_space_is_wrapping(space); in isl_space_is_product()
2683 is_product = isl_space_domain_is_wrapping(space); in isl_space_is_product()
2686 return isl_space_range_is_wrapping(space); in isl_space_is_product()
2689 __isl_give isl_space *isl_space_wrap(__isl_take isl_space *space) in isl_space_wrap() argument
2693 if (!space) in isl_space_wrap()
2696 wrap = isl_space_set_alloc(space->ctx, in isl_space_wrap()
2697 space->nparam, space->n_in + space->n_out); in isl_space_wrap()
2699 wrap = copy_ids(wrap, isl_dim_param, 0, space, isl_dim_param); in isl_space_wrap()
2700 wrap = copy_ids(wrap, isl_dim_set, 0, space, isl_dim_in); in isl_space_wrap()
2701 wrap = copy_ids(wrap, isl_dim_set, space->n_in, space, isl_dim_out); in isl_space_wrap()
2706 wrap->nested[1] = space; in isl_space_wrap()
2710 isl_space_free(space); in isl_space_wrap()
2714 __isl_give isl_space *isl_space_unwrap(__isl_take isl_space *space) in isl_space_unwrap() argument
2718 if (!space) in isl_space_unwrap()
2721 if (!isl_space_is_wrapping(space)) in isl_space_unwrap()
2722 isl_die(space->ctx, isl_error_invalid, "not a wrapping space", in isl_space_unwrap()
2725 unwrap = isl_space_copy(space->nested[1]); in isl_space_unwrap()
2726 isl_space_free(space); in isl_space_unwrap()
2730 isl_space_free(space); in isl_space_unwrap()
2734 isl_bool isl_space_is_named_or_nested(__isl_keep isl_space *space, in isl_space_is_named_or_nested() argument
2739 if (!space) in isl_space_is_named_or_nested()
2741 if (space->tuple_id[type - isl_dim_in]) in isl_space_is_named_or_nested()
2743 if (space->nested[type - isl_dim_in]) in isl_space_is_named_or_nested()
2748 isl_bool isl_space_may_be_set(__isl_keep isl_space *space) in isl_space_may_be_set() argument
2753 if (!space) in isl_space_may_be_set()
2755 if (isl_space_is_set(space)) in isl_space_may_be_set()
2757 n_in = isl_space_dim(space, isl_dim_in); in isl_space_may_be_set()
2762 nested = isl_space_is_named_or_nested(space, isl_dim_in); in isl_space_may_be_set()
2768 __isl_give isl_space *isl_space_reset(__isl_take isl_space *space, in isl_space_reset() argument
2771 if (!isl_space_is_named_or_nested(space, type)) in isl_space_reset()
2772 return space; in isl_space_reset()
2774 space = isl_space_cow(space); in isl_space_reset()
2775 if (!space) in isl_space_reset()
2778 isl_id_free(space->tuple_id[type - isl_dim_in]); in isl_space_reset()
2779 space->tuple_id[type - isl_dim_in] = NULL; in isl_space_reset()
2780 isl_space_free(space->nested[type - isl_dim_in]); in isl_space_reset()
2781 space->nested[type - isl_dim_in] = NULL; in isl_space_reset()
2783 return space; in isl_space_reset()
2786 __isl_give isl_space *isl_space_flatten(__isl_take isl_space *space) in isl_space_flatten() argument
2788 if (!space) in isl_space_flatten()
2790 if (!space->nested[0] && !space->nested[1]) in isl_space_flatten()
2791 return space; in isl_space_flatten()
2793 if (space->nested[0]) in isl_space_flatten()
2794 space = isl_space_reset(space, isl_dim_in); in isl_space_flatten()
2795 if (space && space->nested[1]) in isl_space_flatten()
2796 space = isl_space_reset(space, isl_dim_out); in isl_space_flatten()
2798 return space; in isl_space_flatten()
2801 __isl_give isl_space *isl_space_flatten_domain(__isl_take isl_space *space) in isl_space_flatten_domain() argument
2803 if (!space) in isl_space_flatten_domain()
2805 if (!space->nested[0]) in isl_space_flatten_domain()
2806 return space; in isl_space_flatten_domain()
2808 return isl_space_reset(space, isl_dim_in); in isl_space_flatten_domain()
2811 __isl_give isl_space *isl_space_flatten_range(__isl_take isl_space *space) in isl_space_flatten_range() argument
2813 if (!space) in isl_space_flatten_range()
2815 if (!space->nested[1]) in isl_space_flatten_range()
2816 return space; in isl_space_flatten_range()
2818 return isl_space_reset(space, isl_dim_out); in isl_space_flatten_range()
2912 __isl_give isl_space *isl_space_lift(__isl_take isl_space *space, in isl_space_lift() argument
2917 if (!space) in isl_space_lift()
2920 local_space = isl_space_dup(space); in isl_space_lift()
2922 space->n_out); in isl_space_lift()
2926 space = isl_space_join(isl_space_from_domain(space), in isl_space_lift()
2928 space = isl_space_wrap(space); in isl_space_lift()
2929 space = isl_space_set_tuple_name(space, isl_dim_set, "lifted"); in isl_space_lift()
2931 return space; in isl_space_lift()
2934 isl_bool isl_space_can_zip(__isl_keep isl_space *space) in isl_space_can_zip() argument
2938 is_set = isl_space_is_set(space); in isl_space_can_zip()
2943 return isl_space_is_product(space); in isl_space_can_zip()
2946 __isl_give isl_space *isl_space_zip(__isl_take isl_space *space) in isl_space_zip() argument
2951 if (!isl_space_can_zip(space)) in isl_space_zip()
2952 isl_die(space->ctx, isl_error_invalid, "space cannot be zipped", in isl_space_zip()
2955 if (!space) in isl_space_zip()
2957 dom = isl_space_unwrap(isl_space_domain(isl_space_copy(space))); in isl_space_zip()
2958 ran = isl_space_unwrap(isl_space_range(space)); in isl_space_zip()
2970 isl_space_free(space); in isl_space_zip()
2977 isl_bool isl_space_can_curry(__isl_keep isl_space *space) in isl_space_can_curry() argument
2979 return isl_space_domain_is_wrapping(space); in isl_space_can_curry()
2985 __isl_give isl_space *isl_space_curry(__isl_take isl_space *space) in isl_space_curry() argument
2990 if (!space) in isl_space_curry()
2993 if (!isl_space_can_curry(space)) in isl_space_curry()
2994 isl_die(space->ctx, isl_error_invalid, in isl_space_curry()
2997 dom = isl_space_unwrap(isl_space_domain(isl_space_copy(space))); in isl_space_curry()
2998 ran = isl_space_range(space); in isl_space_curry()
3006 isl_space_free(space); in isl_space_curry()
3014 isl_bool isl_space_can_range_curry(__isl_keep isl_space *space) in isl_space_can_range_curry() argument
3018 if (!space) in isl_space_can_range_curry()
3020 can = isl_space_range_is_wrapping(space); in isl_space_can_range_curry()
3023 return isl_space_can_curry(space->nested[1]); in isl_space_can_range_curry()
3029 __isl_give isl_space *isl_space_range_curry(__isl_take isl_space *space) in isl_space_range_curry() argument
3033 if (!space) in isl_space_range_curry()
3036 if (!isl_space_can_range_curry(space)) in isl_space_range_curry()
3037 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_range_curry()
3039 return isl_space_free(space)); in isl_space_range_curry()
3041 nested = isl_space_take_nested(space, 1); in isl_space_range_curry()
3043 space = isl_space_restore_nested(space, 1, nested); in isl_space_range_curry()
3045 return space; in isl_space_range_curry()
3051 isl_bool isl_space_can_uncurry(__isl_keep isl_space *space) in isl_space_can_uncurry() argument
3053 return isl_space_range_is_wrapping(space); in isl_space_can_uncurry()
3059 __isl_give isl_space *isl_space_uncurry(__isl_take isl_space *space) in isl_space_uncurry() argument
3064 if (!space) in isl_space_uncurry()
3067 if (!isl_space_can_uncurry(space)) in isl_space_uncurry()
3068 isl_die(space->ctx, isl_error_invalid, in isl_space_uncurry()
3070 return isl_space_free(space)); in isl_space_uncurry()
3072 dom = isl_space_domain(isl_space_copy(space)); in isl_space_uncurry()
3073 ran = isl_space_unwrap(isl_space_range(space)); in isl_space_uncurry()
3082 isl_bool isl_space_has_named_params(__isl_keep isl_space *space) in isl_space_has_named_params() argument
3087 if (!space) in isl_space_has_named_params()
3089 if (space->nparam == 0) in isl_space_has_named_params()
3091 off = isl_space_offset(space, isl_dim_param); in isl_space_has_named_params()
3092 if (off + space->nparam > space->n_id) in isl_space_has_named_params()
3094 for (i = 0; i < space->nparam; ++i) in isl_space_has_named_params()
3095 if (!space->ids[off + i]) in isl_space_has_named_params()
3103 isl_stat isl_space_check_named_params(__isl_keep isl_space *space) in isl_space_check_named_params() argument
3107 named = isl_space_has_named_params(space); in isl_space_check_named_params()
3111 isl_die(isl_space_get_ctx(space), isl_error_invalid, in isl_space_check_named_params()
3144 __isl_take isl_space *space, __isl_take isl_space *model) in isl_space_extend_domain_with_range() argument
3151 space = isl_space_from_domain(space); in isl_space_extend_domain_with_range()
3155 space = isl_space_add_dims(space, isl_dim_out, n_out); in isl_space_extend_domain_with_range()
3157 space = isl_space_set_tuple_id(space, isl_dim_out, in isl_space_extend_domain_with_range()
3159 if (!space) in isl_space_extend_domain_with_range()
3164 nested = isl_space_align_params(nested, isl_space_copy(space)); in isl_space_extend_domain_with_range()
3166 n_space = isl_space_dim(space, isl_dim_param); in isl_space_extend_domain_with_range()
3174 space->nested[1] = nested; in isl_space_extend_domain_with_range()
3177 return space; in isl_space_extend_domain_with_range()
3180 isl_space_free(space); in isl_space_extend_domain_with_range()