Lines Matching refs:morph

22 isl_ctx *isl_morph_get_ctx(__isl_keep isl_morph *morph)  in isl_morph_get_ctx()  argument
24 if (!morph) in isl_morph_get_ctx()
26 return isl_basic_set_get_ctx(morph->dom); in isl_morph_get_ctx()
33 isl_morph *morph; in isl_morph_alloc() local
38 morph = isl_alloc_type(dom->ctx, struct isl_morph); in isl_morph_alloc()
39 if (!morph) in isl_morph_alloc()
42 morph->ref = 1; in isl_morph_alloc()
43 morph->dom = dom; in isl_morph_alloc()
44 morph->ran = ran; in isl_morph_alloc()
45 morph->map = map; in isl_morph_alloc()
46 morph->inv = inv; in isl_morph_alloc()
48 return morph; in isl_morph_alloc()
57 __isl_give isl_morph *isl_morph_copy(__isl_keep isl_morph *morph) in isl_morph_copy() argument
59 if (!morph) in isl_morph_copy()
62 morph->ref++; in isl_morph_copy()
63 return morph; in isl_morph_copy()
66 __isl_give isl_morph *isl_morph_dup(__isl_keep isl_morph *morph) in isl_morph_dup() argument
68 if (!morph) in isl_morph_dup()
71 return isl_morph_alloc(isl_basic_set_copy(morph->dom), in isl_morph_dup()
72 isl_basic_set_copy(morph->ran), in isl_morph_dup()
73 isl_mat_copy(morph->map), isl_mat_copy(morph->inv)); in isl_morph_dup()
76 __isl_give isl_morph *isl_morph_cow(__isl_take isl_morph *morph) in isl_morph_cow() argument
78 if (!morph) in isl_morph_cow()
81 if (morph->ref == 1) in isl_morph_cow()
82 return morph; in isl_morph_cow()
83 morph->ref--; in isl_morph_cow()
84 return isl_morph_dup(morph); in isl_morph_cow()
87 __isl_null isl_morph *isl_morph_free(__isl_take isl_morph *morph) in isl_morph_free() argument
89 if (!morph) in isl_morph_free()
92 if (--morph->ref > 0) in isl_morph_free()
95 isl_basic_set_free(morph->dom); in isl_morph_free()
96 isl_basic_set_free(morph->ran); in isl_morph_free()
97 isl_mat_free(morph->map); in isl_morph_free()
98 isl_mat_free(morph->inv); in isl_morph_free()
99 free(morph); in isl_morph_free()
106 static int identity_on_parameters(__isl_keep isl_morph *morph) in identity_on_parameters() argument
112 nparam = isl_morph_dom_dim(morph, isl_dim_param); in identity_on_parameters()
113 if (nparam != isl_morph_ran_dim(morph, isl_dim_param)) in identity_on_parameters()
117 sub = isl_mat_sub_alloc(morph->map, 0, 1 + nparam, 0, 1 + nparam); in identity_on_parameters()
131 __isl_keep isl_morph *morph) in isl_morph_get_var_multi_aff() argument
140 if (!morph) in isl_morph_get_var_multi_aff()
143 is_identity = identity_on_parameters(morph); in isl_morph_get_var_multi_aff()
147 isl_die(isl_morph_get_ctx(morph), isl_error_invalid, in isl_morph_get_var_multi_aff()
150 dom = isl_morph_get_dom_space(morph); in isl_morph_get_var_multi_aff()
152 ran = isl_morph_get_ran_space(morph); in isl_morph_get_var_multi_aff()
163 v = isl_mat_get_row(morph->map, 1 + nparam + i); in isl_morph_get_var_multi_aff()
165 val = isl_mat_get_element_val(morph->map, 0, 0); in isl_morph_get_var_multi_aff()
177 __isl_give isl_space *isl_morph_get_dom_space(__isl_keep isl_morph *morph) in isl_morph_get_dom_space() argument
179 if (!morph) in isl_morph_get_dom_space()
182 return isl_basic_set_get_space(morph->dom); in isl_morph_get_dom_space()
185 __isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph) in isl_morph_get_ran_space() argument
187 if (!morph) in isl_morph_get_ran_space()
190 return isl_space_copy(morph->ran->dim); in isl_morph_get_ran_space()
193 unsigned isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) in isl_morph_dom_dim() argument
195 if (!morph) in isl_morph_dom_dim()
198 return isl_basic_set_dim(morph->dom, type); in isl_morph_dom_dim()
201 unsigned isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) in isl_morph_ran_dim() argument
203 if (!morph) in isl_morph_ran_dim()
206 return isl_basic_set_dim(morph->ran, type); in isl_morph_ran_dim()
209 __isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, in isl_morph_remove_dom_dims() argument
215 return morph; in isl_morph_remove_dom_dims()
217 morph = isl_morph_cow(morph); in isl_morph_remove_dom_dims()
218 if (!morph) in isl_morph_remove_dom_dims()
221 dom_offset = 1 + isl_space_offset(morph->dom->dim, type); in isl_morph_remove_dom_dims()
223 morph->dom = isl_basic_set_remove_dims(morph->dom, type, first, n); in isl_morph_remove_dom_dims()
225 morph->map = isl_mat_drop_cols(morph->map, dom_offset + first, n); in isl_morph_remove_dom_dims()
227 morph->inv = isl_mat_drop_rows(morph->inv, dom_offset + first, n); in isl_morph_remove_dom_dims()
229 if (morph->dom && morph->ran && morph->map && morph->inv) in isl_morph_remove_dom_dims()
230 return morph; in isl_morph_remove_dom_dims()
232 isl_morph_free(morph); in isl_morph_remove_dom_dims()
236 __isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, in isl_morph_remove_ran_dims() argument
242 return morph; in isl_morph_remove_ran_dims()
244 morph = isl_morph_cow(morph); in isl_morph_remove_ran_dims()
245 if (!morph) in isl_morph_remove_ran_dims()
248 ran_offset = 1 + isl_space_offset(morph->ran->dim, type); in isl_morph_remove_ran_dims()
250 morph->ran = isl_basic_set_remove_dims(morph->ran, type, first, n); in isl_morph_remove_ran_dims()
252 morph->map = isl_mat_drop_rows(morph->map, ran_offset + first, n); in isl_morph_remove_ran_dims()
254 morph->inv = isl_mat_drop_cols(morph->inv, ran_offset + first, n); in isl_morph_remove_ran_dims()
256 if (morph->dom && morph->ran && morph->map && morph->inv) in isl_morph_remove_ran_dims()
257 return morph; in isl_morph_remove_ran_dims()
259 isl_morph_free(morph); in isl_morph_remove_ran_dims()
265 __isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph) in isl_morph_dom_params() argument
269 morph = isl_morph_cow(morph); in isl_morph_dom_params()
270 if (!morph) in isl_morph_dom_params()
272 n = isl_basic_set_dim(morph->dom, isl_dim_set); in isl_morph_dom_params()
273 morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, n); in isl_morph_dom_params()
274 if (!morph) in isl_morph_dom_params()
276 morph->dom = isl_basic_set_params(morph->dom); in isl_morph_dom_params()
277 if (morph->dom) in isl_morph_dom_params()
278 return morph; in isl_morph_dom_params()
280 isl_morph_free(morph); in isl_morph_dom_params()
286 __isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph) in isl_morph_ran_params() argument
290 morph = isl_morph_cow(morph); in isl_morph_ran_params()
291 if (!morph) in isl_morph_ran_params()
293 n = isl_basic_set_dim(morph->ran, isl_dim_set); in isl_morph_ran_params()
294 morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, n); in isl_morph_ran_params()
295 if (!morph) in isl_morph_ran_params()
297 morph->ran = isl_basic_set_params(morph->ran); in isl_morph_ran_params()
298 if (morph->ran) in isl_morph_ran_params()
299 return morph; in isl_morph_ran_params()
301 isl_morph_free(morph); in isl_morph_ran_params()
305 void isl_morph_print_internal(__isl_take isl_morph *morph, FILE *out) in isl_morph_print_internal() argument
307 if (!morph) in isl_morph_print_internal()
310 isl_basic_set_dump(morph->dom); in isl_morph_print_internal()
311 isl_basic_set_dump(morph->ran); in isl_morph_print_internal()
312 isl_mat_print_internal(morph->map, out, 4); in isl_morph_print_internal()
313 isl_mat_print_internal(morph->inv, out, 4); in isl_morph_print_internal()
316 void isl_morph_dump(__isl_take isl_morph *morph) in isl_morph_dump() argument
318 isl_morph_print_internal(morph, stderr); in isl_morph_dump()
570 __isl_keep isl_morph *morph) in add_strides() argument
575 if (isl_int_is_one(morph->inv->row[0][0])) in add_strides()
580 for (i = 0; 1 + i < morph->inv->n_row; ++i) { in add_strides()
581 isl_seq_gcd(morph->inv->row[1 + i], morph->inv->n_col, &gcd); in add_strides()
582 if (isl_int_is_divisible_by(gcd, morph->inv->row[0][0])) in add_strides()
591 isl_seq_cpy(bset->eq[k], morph->inv->row[1 + i], in add_strides()
592 morph->inv->n_col); in add_strides()
593 isl_seq_clr(bset->eq[k] + morph->inv->n_col, bset->n_div); in add_strides()
594 isl_int_set(bset->eq[k][morph->inv->n_col + div], in add_strides()
595 morph->inv->row[0][0]); in add_strides()
612 __isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, in isl_morph_basic_set() argument
620 if (!morph || !bset) in isl_morph_basic_set()
623 isl_assert(bset->ctx, isl_space_is_equal(bset->dim, morph->dom->dim), in isl_morph_basic_set()
626 max_stride = morph->inv->n_row - 1; in isl_morph_basic_set()
627 if (isl_int_is_one(morph->inv->row[0][0])) in isl_morph_basic_set()
629 res = isl_basic_set_alloc_space(isl_space_copy(morph->ran->dim), in isl_morph_basic_set()
637 0, morph->inv->n_row); in isl_morph_basic_set()
638 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
647 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
652 0, morph->inv->n_row); in isl_morph_basic_set()
653 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
663 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
668 1, morph->inv->n_row); in isl_morph_basic_set()
669 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
674 morph->inv->row[0][0], bset->div[i][0]); in isl_morph_basic_set()
678 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
682 res = add_strides(res, morph); in isl_morph_basic_set()
690 res = isl_basic_set_intersect(res, isl_basic_set_copy(morph->ran)); in isl_morph_basic_set()
692 isl_morph_free(morph); in isl_morph_basic_set()
697 isl_morph_free(morph); in isl_morph_basic_set()
705 __isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, in isl_morph_set() argument
710 if (!morph || !set) in isl_morph_set()
713 isl_assert(set->ctx, isl_space_is_equal(set->dim, morph->dom->dim), goto error); in isl_morph_set()
720 set->dim = isl_space_copy(morph->ran->dim); in isl_morph_set()
725 set->p[i] = isl_morph_basic_set(isl_morph_copy(morph), set->p[i]); in isl_morph_set()
730 isl_morph_free(morph); in isl_morph_set()
737 isl_morph_free(morph); in isl_morph_set()
771 __isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) in isl_morph_inverse() argument
776 morph = isl_morph_cow(morph); in isl_morph_inverse()
777 if (!morph) in isl_morph_inverse()
780 bset = morph->dom; in isl_morph_inverse()
781 morph->dom = morph->ran; in isl_morph_inverse()
782 morph->ran = bset; in isl_morph_inverse()
784 mat = morph->map; in isl_morph_inverse()
785 morph->map = morph->inv; in isl_morph_inverse()
786 morph->inv = mat; in isl_morph_inverse()
788 return morph; in isl_morph_inverse()
801 isl_morph *morph, *morph2; in isl_basic_set_full_compression() local
806 morph = isl_basic_set_variable_compression(bset, isl_dim_param); in isl_basic_set_full_compression()
807 bset = isl_morph_basic_set(isl_morph_copy(morph), bset); in isl_basic_set_full_compression()
812 morph = isl_morph_compose(morph2, morph); in isl_basic_set_full_compression()
817 morph = isl_morph_compose(morph2, morph); in isl_basic_set_full_compression()
819 return morph; in isl_basic_set_full_compression()
822 __isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, in isl_morph_vec() argument
825 if (!morph) in isl_morph_vec()
828 vec = isl_mat_vec_product(isl_mat_copy(morph->map), vec); in isl_morph_vec()
830 isl_morph_free(morph); in isl_morph_vec()
833 isl_morph_free(morph); in isl_morph_vec()