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 isl_bool 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 nparam_ran = isl_morph_ran_dim(morph, isl_dim_param); in identity_on_parameters()
120 sub = isl_mat_sub_alloc(morph->map, 0, 1 + nparam, 0, 1 + nparam); in identity_on_parameters()
134 __isl_keep isl_morph *morph) in isl_morph_get_var_multi_aff() argument
143 if (!morph) in isl_morph_get_var_multi_aff()
146 is_identity = identity_on_parameters(morph); in isl_morph_get_var_multi_aff()
150 isl_die(isl_morph_get_ctx(morph), isl_error_invalid, in isl_morph_get_var_multi_aff()
153 dom = isl_morph_get_dom_space(morph); in isl_morph_get_var_multi_aff()
155 ran = isl_morph_get_ran_space(morph); in isl_morph_get_var_multi_aff()
168 v = isl_mat_get_row(morph->map, 1 + nparam + i); in isl_morph_get_var_multi_aff()
170 val = isl_mat_get_element_val(morph->map, 0, 0); in isl_morph_get_var_multi_aff()
182 __isl_give isl_space *isl_morph_get_dom_space(__isl_keep isl_morph *morph) in isl_morph_get_dom_space() argument
184 if (!morph) in isl_morph_get_dom_space()
187 return isl_basic_set_get_space(morph->dom); in isl_morph_get_dom_space()
190 __isl_give isl_space *isl_morph_get_ran_space(__isl_keep isl_morph *morph) in isl_morph_get_ran_space() argument
192 if (!morph) in isl_morph_get_ran_space()
195 return isl_space_copy(morph->ran->dim); in isl_morph_get_ran_space()
198 isl_size isl_morph_dom_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) in isl_morph_dom_dim() argument
200 if (!morph) in isl_morph_dom_dim()
203 return isl_basic_set_dim(morph->dom, type); in isl_morph_dom_dim()
206 isl_size isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type) in isl_morph_ran_dim() argument
208 if (!morph) in isl_morph_ran_dim()
211 return isl_basic_set_dim(morph->ran, type); in isl_morph_ran_dim()
214 __isl_give isl_morph *isl_morph_remove_dom_dims(__isl_take isl_morph *morph, in isl_morph_remove_dom_dims() argument
220 return morph; in isl_morph_remove_dom_dims()
222 morph = isl_morph_cow(morph); in isl_morph_remove_dom_dims()
223 if (!morph) in isl_morph_remove_dom_dims()
226 dom_offset = 1 + isl_space_offset(morph->dom->dim, type); in isl_morph_remove_dom_dims()
228 morph->dom = isl_basic_set_remove_dims(morph->dom, type, first, n); in isl_morph_remove_dom_dims()
230 morph->map = isl_mat_drop_cols(morph->map, dom_offset + first, n); in isl_morph_remove_dom_dims()
232 morph->inv = isl_mat_drop_rows(morph->inv, dom_offset + first, n); in isl_morph_remove_dom_dims()
234 if (morph->dom && morph->ran && morph->map && morph->inv) in isl_morph_remove_dom_dims()
235 return morph; in isl_morph_remove_dom_dims()
237 isl_morph_free(morph); in isl_morph_remove_dom_dims()
241 __isl_give isl_morph *isl_morph_remove_ran_dims(__isl_take isl_morph *morph, in isl_morph_remove_ran_dims() argument
247 return morph; in isl_morph_remove_ran_dims()
249 morph = isl_morph_cow(morph); in isl_morph_remove_ran_dims()
250 if (!morph) in isl_morph_remove_ran_dims()
253 ran_offset = 1 + isl_space_offset(morph->ran->dim, type); in isl_morph_remove_ran_dims()
255 morph->ran = isl_basic_set_remove_dims(morph->ran, type, first, n); in isl_morph_remove_ran_dims()
257 morph->map = isl_mat_drop_rows(morph->map, ran_offset + first, n); in isl_morph_remove_ran_dims()
259 morph->inv = isl_mat_drop_cols(morph->inv, ran_offset + first, n); in isl_morph_remove_ran_dims()
261 if (morph->dom && morph->ran && morph->map && morph->inv) in isl_morph_remove_ran_dims()
262 return morph; in isl_morph_remove_ran_dims()
264 isl_morph_free(morph); in isl_morph_remove_ran_dims()
270 __isl_give isl_morph *isl_morph_dom_params(__isl_take isl_morph *morph) in isl_morph_dom_params() argument
274 morph = isl_morph_cow(morph); in isl_morph_dom_params()
275 if (!morph) in isl_morph_dom_params()
277 n = isl_basic_set_dim(morph->dom, isl_dim_set); in isl_morph_dom_params()
279 return isl_morph_free(morph); in isl_morph_dom_params()
280 morph = isl_morph_remove_dom_dims(morph, isl_dim_set, 0, n); in isl_morph_dom_params()
281 if (!morph) in isl_morph_dom_params()
283 morph->dom = isl_basic_set_params(morph->dom); in isl_morph_dom_params()
284 if (morph->dom) in isl_morph_dom_params()
285 return morph; in isl_morph_dom_params()
287 isl_morph_free(morph); in isl_morph_dom_params()
293 __isl_give isl_morph *isl_morph_ran_params(__isl_take isl_morph *morph) in isl_morph_ran_params() argument
297 morph = isl_morph_cow(morph); in isl_morph_ran_params()
298 if (!morph) in isl_morph_ran_params()
300 n = isl_basic_set_dim(morph->ran, isl_dim_set); in isl_morph_ran_params()
302 return isl_morph_free(morph); in isl_morph_ran_params()
303 morph = isl_morph_remove_ran_dims(morph, isl_dim_set, 0, n); in isl_morph_ran_params()
304 if (!morph) in isl_morph_ran_params()
306 morph->ran = isl_basic_set_params(morph->ran); in isl_morph_ran_params()
307 if (morph->ran) in isl_morph_ran_params()
308 return morph; in isl_morph_ran_params()
310 isl_morph_free(morph); in isl_morph_ran_params()
317 __isl_take isl_morph *morph, __isl_keep isl_id *id) in isl_morph_set_ran_tuple_id() argument
319 morph = isl_morph_cow(morph); in isl_morph_set_ran_tuple_id()
320 if (!morph) in isl_morph_set_ran_tuple_id()
322 morph->ran = isl_basic_set_set_tuple_id(morph->ran, isl_id_copy(id)); in isl_morph_set_ran_tuple_id()
323 if (!morph->ran) in isl_morph_set_ran_tuple_id()
324 return isl_morph_free(morph); in isl_morph_set_ran_tuple_id()
325 return morph; in isl_morph_set_ran_tuple_id()
328 void isl_morph_print_internal(__isl_take isl_morph *morph, FILE *out) in isl_morph_print_internal() argument
330 if (!morph) in isl_morph_print_internal()
333 isl_basic_set_dump(morph->dom); in isl_morph_print_internal()
334 isl_basic_set_dump(morph->ran); in isl_morph_print_internal()
335 isl_mat_print_internal(morph->map, out, 4); in isl_morph_print_internal()
336 isl_mat_print_internal(morph->inv, out, 4); in isl_morph_print_internal()
339 void isl_morph_dump(__isl_take isl_morph *morph) in isl_morph_dump() argument
341 isl_morph_print_internal(morph, stderr); in isl_morph_dump()
505 isl_morph *morph; in isl_basic_set_variable_compression_with_id() local
507 morph = isl_basic_set_variable_compression(bset, isl_dim_set); in isl_basic_set_variable_compression_with_id()
508 morph = isl_morph_set_ran_tuple_id(morph, id); in isl_basic_set_variable_compression_with_id()
509 return morph; in isl_basic_set_variable_compression_with_id()
602 __isl_keep isl_morph *morph) in add_strides() argument
607 if (isl_int_is_one(morph->inv->row[0][0])) in add_strides()
612 for (i = 0; 1 + i < morph->inv->n_row; ++i) { in add_strides()
613 isl_seq_gcd(morph->inv->row[1 + i], morph->inv->n_col, &gcd); in add_strides()
614 if (isl_int_is_divisible_by(gcd, morph->inv->row[0][0])) in add_strides()
623 isl_seq_cpy(bset->eq[k], morph->inv->row[1 + i], in add_strides()
624 morph->inv->n_col); in add_strides()
625 isl_seq_clr(bset->eq[k] + morph->inv->n_col, bset->n_div); in add_strides()
626 isl_int_set(bset->eq[k][morph->inv->n_col + div], in add_strides()
627 morph->inv->row[0][0]); in add_strides()
644 __isl_give isl_basic_set *isl_morph_basic_set(__isl_take isl_morph *morph, in isl_morph_basic_set() argument
652 if (!morph || isl_basic_set_check_equal_space(bset, morph->dom) < 0) in isl_morph_basic_set()
655 max_stride = morph->inv->n_row - 1; in isl_morph_basic_set()
656 if (isl_int_is_one(morph->inv->row[0][0])) in isl_morph_basic_set()
658 res = isl_basic_set_alloc_space(isl_space_copy(morph->ran->dim), in isl_morph_basic_set()
666 0, morph->inv->n_row); in isl_morph_basic_set()
667 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
676 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
681 0, morph->inv->n_row); in isl_morph_basic_set()
682 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
692 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
697 1, morph->inv->n_row); in isl_morph_basic_set()
698 mat = isl_mat_product(mat, isl_mat_copy(morph->inv)); in isl_morph_basic_set()
703 morph->inv->row[0][0], bset->div[i][0]); in isl_morph_basic_set()
707 morph->inv->row[0][0], bset->n_div); in isl_morph_basic_set()
711 res = add_strides(res, morph); in isl_morph_basic_set()
719 res = isl_basic_set_intersect(res, isl_basic_set_copy(morph->ran)); in isl_morph_basic_set()
721 isl_morph_free(morph); in isl_morph_basic_set()
726 isl_morph_free(morph); in isl_morph_basic_set()
734 __isl_give isl_set *isl_morph_set(__isl_take isl_morph *morph, in isl_morph_set() argument
739 if (!morph || isl_set_basic_set_check_equal_space(set, morph->dom) < 0) in isl_morph_set()
747 set->dim = isl_space_copy(morph->ran->dim); in isl_morph_set()
752 set->p[i] = isl_morph_basic_set(isl_morph_copy(morph), set->p[i]); in isl_morph_set()
757 isl_morph_free(morph); in isl_morph_set()
764 isl_morph_free(morph); in isl_morph_set()
798 __isl_give isl_morph *isl_morph_inverse(__isl_take isl_morph *morph) in isl_morph_inverse() argument
803 morph = isl_morph_cow(morph); in isl_morph_inverse()
804 if (!morph) in isl_morph_inverse()
807 bset = morph->dom; in isl_morph_inverse()
808 morph->dom = morph->ran; in isl_morph_inverse()
809 morph->ran = bset; in isl_morph_inverse()
811 mat = morph->map; in isl_morph_inverse()
812 morph->map = morph->inv; in isl_morph_inverse()
813 morph->inv = mat; in isl_morph_inverse()
815 return morph; in isl_morph_inverse()
828 isl_morph *morph, *morph2; in isl_basic_set_full_compression() local
833 morph = isl_basic_set_variable_compression(bset, isl_dim_param); in isl_basic_set_full_compression()
834 bset = isl_morph_basic_set(isl_morph_copy(morph), bset); in isl_basic_set_full_compression()
839 morph = isl_morph_compose(morph2, morph); in isl_basic_set_full_compression()
844 morph = isl_morph_compose(morph2, morph); in isl_basic_set_full_compression()
846 return morph; in isl_basic_set_full_compression()
849 __isl_give isl_vec *isl_morph_vec(__isl_take isl_morph *morph, in isl_morph_vec() argument
852 if (!morph) in isl_morph_vec()
855 vec = isl_mat_vec_product(isl_mat_copy(morph->map), vec); in isl_morph_vec()
857 isl_morph_free(morph); in isl_morph_vec()
860 isl_morph_free(morph); in isl_morph_vec()