Lines Matching full:div
42 div_hash = isl_mat_get_hash(ls->div); in isl_local_space_get_hash()
49 __isl_take isl_space *space, __isl_take isl_mat *div) in isl_local_space_alloc_div() argument
54 if (!space || !div) in isl_local_space_alloc_div()
64 ls->div = div; in isl_local_space_alloc_div()
68 isl_mat_free(div); in isl_local_space_alloc_div()
78 isl_mat *div; in isl_local_space_alloc() local
89 div = isl_mat_alloc(ctx, n_div, 1 + 1 + total + n_div); in isl_local_space_alloc()
90 return isl_local_space_alloc_div(space, div); in isl_local_space_alloc()
114 isl_mat_copy(ls->div)); in isl_local_space_dup()
139 isl_mat_free(ls->div); in isl_local_space_free()
201 return isl_mat_is_equal(ls1->div, ls2->div); in isl_local_space_is_equal()
225 return isl_local_cmp(ls1->div, ls2->div); in isl_local_space_cmp()
234 return ls->div->n_row; in isl_local_space_dim()
239 return dim + ls->div->n_row; in isl_local_space_dim()
341 isl_seq_cpy(aff->v->el, ls->div->row[pos], aff->v->size); in extract_div()
393 if (pos < 0 || pos >= ls->div->n_row) in isl_local_space_get_div()
402 "expression of div unknown", return NULL); in isl_local_space_get_div()
486 return ls ? ls->div : NULL; in isl_local_space_peek_local()
514 local = ls->div; in isl_local_space_take_local()
515 ls->div = NULL; in isl_local_space_take_local()
531 if (ls->div == local) { in isl_local_space_restore_local()
539 isl_local_free(ls->div); in isl_local_space_restore_local()
540 ls->div = local; in isl_local_space_restore_local()
649 __isl_take isl_local_space *ls, __isl_take isl_vec *div) in isl_local_space_add_div() argument
652 if (!ls || !div) in isl_local_space_add_div()
655 if (ls->div->n_col != div->size) in isl_local_space_add_div()
659 ls->div = isl_mat_add_zero_cols(ls->div, 1); in isl_local_space_add_div()
660 ls->div = isl_mat_add_rows(ls->div, 1); in isl_local_space_add_div()
661 if (!ls->div) in isl_local_space_add_div()
664 isl_seq_cpy(ls->div->row[ls->div->n_row - 1], div->el, div->size); in isl_local_space_add_div()
665 isl_int_set_si(ls->div->row[ls->div->n_row - 1][div->size], 0); in isl_local_space_add_div()
667 isl_vec_free(div); in isl_local_space_add_div()
671 isl_vec_free(div); in isl_local_space_add_div()
676 __isl_take isl_local_space *ls, __isl_take isl_mat *div) in isl_local_space_replace_divs() argument
680 if (!ls || !div) in isl_local_space_replace_divs()
683 isl_mat_free(ls->div); in isl_local_space_replace_divs()
684 ls->div = div; in isl_local_space_replace_divs()
687 isl_mat_free(div); in isl_local_space_replace_divs()
711 * current order. Otherwise, we sort the known div after the unknown
712 * div only if the known div depends on the unknown div.
743 int isl_mat_cmp_div(__isl_keep isl_mat *div, int i, int j) in isl_mat_cmp_div() argument
745 return cmp_row(div->row[i], div->row[j], i, j, div->n_row, div->n_col); in isl_mat_cmp_div()
753 return cmp_row(bmap->div[i], bmap->div[j], i, j, bmap->n_div, total); in bmap_cmp_row()
809 isl_mat *div = NULL; in isl_merge_divs() local
816 div = isl_mat_alloc(div1->ctx, 1 + div1->n_row + div2->n_row, in isl_merge_divs()
818 if (!div) in isl_merge_divs()
824 expand_row(div, k, div1, i, exp1); in isl_merge_divs()
825 expand_row(div, k + 1, div2, j, exp2); in isl_merge_divs()
827 cmp = isl_mat_cmp_div(div, k, k + 1); in isl_merge_divs()
835 isl_seq_cpy(div->row[k], div->row[k + 1], div->n_col); in isl_merge_divs()
839 expand_row(div, k, div1, i, exp1); in isl_merge_divs()
843 expand_row(div, k, div2, j, exp2); in isl_merge_divs()
847 div->n_row = k; in isl_merge_divs()
848 div->n_col = d + k; in isl_merge_divs()
850 return div; in isl_merge_divs()
863 if (a < 0 || a >= ls->div->n_row || b < 0 || b >= ls->div->n_row) in isl_local_space_swap_div()
866 offset = ls->div->n_col - ls->div->n_row; in isl_local_space_swap_div()
867 ls->div = isl_mat_swap_cols(ls->div, offset + a, offset + b); in isl_local_space_swap_div()
868 ls->div = isl_mat_swap_rows(ls->div, a, b); in isl_local_space_swap_div()
869 if (!ls->div) in isl_local_space_swap_div()
883 isl_mat *div = NULL; in isl_local_space_intersect() local
894 if (ls2->div->n_row == 0) { in isl_local_space_intersect()
899 if (ls1->div->n_row == 0) { in isl_local_space_intersect()
904 exp1 = isl_alloc_array(ctx, int, ls1->div->n_row); in isl_local_space_intersect()
905 exp2 = isl_alloc_array(ctx, int, ls2->div->n_row); in isl_local_space_intersect()
909 div = isl_merge_divs(ls1->div, ls2->div, exp1, exp2); in isl_local_space_intersect()
910 if (!div) in isl_local_space_intersect()
913 equal = isl_mat_is_equal(ls1->div, div); in isl_local_space_intersect()
924 isl_mat_free(ls1->div); in isl_local_space_intersect()
925 ls1->div = div; in isl_local_space_intersect()
931 isl_mat_free(div); in isl_local_space_intersect()
937 /* Is the local variable "div" of "ls" marked as not having
945 int div) in isl_local_space_div_is_marked_unknown() argument
949 return isl_local_div_is_marked_unknown(ls->div, div); in isl_local_space_div_is_marked_unknown()
952 /* Does "ls" have a complete explicit representation for div "div"?
954 isl_bool isl_local_space_div_is_known(__isl_keep isl_local_space *ls, int div) in isl_local_space_div_is_known() argument
958 return isl_local_div_is_known(ls->div, div); in isl_local_space_div_is_known()
967 return isl_local_divs_known(ls->div); in isl_local_space_divs_known()
1104 __isl_take isl_local_space *ls, int div) in normalize_div() argument
1106 isl_ctx *ctx = ls->div->ctx; in normalize_div()
1107 unsigned total = ls->div->n_col - 2; in normalize_div()
1109 isl_seq_gcd(ls->div->row[div] + 2, total, &ctx->normalize_gcd); in normalize_div()
1111 ctx->normalize_gcd, ls->div->row[div][0]); in normalize_div()
1115 isl_seq_scale_down(ls->div->row[div] + 2, ls->div->row[div] + 2, in normalize_div()
1117 isl_int_divexact(ls->div->row[div][0], ls->div->row[div][0], in normalize_div()
1119 isl_int_fdiv_q(ls->div->row[div][1], ls->div->row[div][1], in normalize_div()
1154 for (k = 0; k < ls->div->n_row; ++k) { in isl_local_space_substitute_equalities()
1155 if (isl_int_is_zero(ls->div->row[k][1 + j])) in isl_local_space_substitute_equalities()
1160 ls->div = isl_mat_cow(ls->div); in isl_local_space_substitute_equalities()
1161 if (!ls->div) in isl_local_space_substitute_equalities()
1163 isl_seq_elim(ls->div->row[k] + 1, eq->eq[i], j, total, in isl_local_space_substitute_equalities()
1164 &ls->div->row[k][0]); in isl_local_space_substitute_equalities()
1181 * of the "n" div expressions starting at "first".
1208 ls->div = isl_mat_cow(ls->div); in isl_local_space_substitute_seq()
1209 if (!ls->div) in isl_local_space_substitute_seq()
1212 if (first + n > ls->div->n_row) in isl_local_space_substitute_seq()
1220 if (isl_int_is_zero(ls->div->row[i][1 + pos])) in isl_local_space_substitute_seq()
1222 isl_seq_substitute(ls->div->row[i], pos, subs, in isl_local_space_substitute_seq()
1223 ls->div->n_col, subs_len, v); in isl_local_space_substitute_seq()
1270 subs->v->size, 0, ls->div->n_row); in isl_local_space_substitute()
1298 ls->div = isl_mat_drop_rows(ls->div, first, n); in isl_local_space_drop_dims()
1306 ls->div = isl_mat_drop_cols(ls->div, first, n); in isl_local_space_drop_dims()
1307 if (!ls->div) in isl_local_space_drop_dims()
1330 ls->div = isl_mat_insert_zero_rows(ls->div, first, n); in isl_local_space_insert_dims()
1338 ls->div = isl_mat_insert_zero_cols(ls->div, first, n); in isl_local_space_insert_dims()
1339 if (!ls->div) in isl_local_space_insert_dims()
1346 * integer division "div" in "ls"?
1348 * That is, given div = floor((c + f)/m), is the constraint of the form
1357 isl_int *constraint, unsigned div, int *sign) in is_linear_div_constraint() argument
1362 unknown = isl_local_space_div_is_marked_unknown(ls, div); in is_linear_div_constraint()
1368 pos = isl_local_space_offset(ls, isl_dim_div) + div; in is_linear_div_constraint()
1370 if (isl_int_eq(constraint[pos], ls->div->row[div][0])) { in is_linear_div_constraint()
1373 ls->div->row[div] + 2, pos - 1)) in is_linear_div_constraint()
1375 } else if (isl_int_abs_eq(constraint[pos], ls->div->row[div][0])) { in is_linear_div_constraint()
1377 if (!isl_seq_eq(constraint + 1, ls->div->row[div] + 2, pos - 1)) in is_linear_div_constraint()
1383 ls->div->n_row - div - 1) != -1) in is_linear_div_constraint()
1388 /* Check if the constraints pointed to by "constraint" is a div
1389 * constraint corresponding to div "div" in "ls".
1391 * That is, if div = floor(f/m), then check if the constraint is
1401 isl_int *constraint, unsigned div) in isl_local_space_is_div_constraint() argument
1406 linear = is_linear_div_constraint(ls, constraint, div, &sign); in isl_local_space_is_div_constraint()
1412 isl_int_sub(ls->div->row[div][1], in isl_local_space_is_div_constraint()
1413 ls->div->row[div][1], ls->div->row[div][0]); in isl_local_space_is_div_constraint()
1414 isl_int_add_ui(ls->div->row[div][1], ls->div->row[div][1], 1); in isl_local_space_is_div_constraint()
1415 neg = isl_seq_is_neg(constraint, ls->div->row[div] + 1, 1); in isl_local_space_is_div_constraint()
1416 isl_int_sub_ui(ls->div->row[div][1], ls->div->row[div][1], 1); in isl_local_space_is_div_constraint()
1417 isl_int_add(ls->div->row[div][1], in isl_local_space_is_div_constraint()
1418 ls->div->row[div][1], ls->div->row[div][0]); in isl_local_space_is_div_constraint()
1422 if (!isl_int_eq(constraint[0], ls->div->row[div][1])) in isl_local_space_is_div_constraint()
1430 * of an equality that corresponds to integer division "div" in "ls"?
1445 isl_int *constraint, unsigned div) in isl_local_space_is_div_equality() argument
1450 linear = is_linear_div_constraint(ls, constraint, div, &sign); in isl_local_space_is_div_equality()
1481 for (i = ls->div->n_row - 1; i >= 0; --i) { in isl_local_space_get_active()
1485 active[j] |= !isl_int_is_zero(ls->div->row[i][2 + j]); in isl_local_space_get_active()
1493 * is of the form [dim -> local[..]], with ls->div->n_row variables in the
1503 ls->dim = isl_space_lift(ls->dim, ls->div->n_row); in isl_local_space_lift()
1504 ls->div = isl_mat_drop_rows(ls->div, 0, ls->div->n_row); in isl_local_space_lift()
1505 if (!ls->dim || !ls->div) in isl_local_space_lift()
1583 isl_mat_free(res->div); in isl_local_space_preimage_multi_aff()
1584 res->div = isl_mat_copy(ma->u.p[0]->ls->div); in isl_local_space_preimage_multi_aff()
1585 res->div = isl_mat_add_zero_cols(res->div, n_div_ls); in isl_local_space_preimage_multi_aff()
1586 res->div = isl_mat_add_rows(res->div, n_div_ls); in isl_local_space_preimage_multi_aff()
1587 if (!res->div) in isl_local_space_preimage_multi_aff()
1596 for (i = 0; i < ls->div->n_row; ++i) { in isl_local_space_preimage_multi_aff()
1597 if (isl_int_is_zero(ls->div->row[i][0])) { in isl_local_space_preimage_multi_aff()
1598 isl_int_set_si(res->div->row[n_div_ma + i][0], 0); in isl_local_space_preimage_multi_aff()
1601 if (isl_seq_preimage(res->div->row[n_div_ma + i], in isl_local_space_preimage_multi_aff()
1602 ls->div->row[i], in isl_local_space_preimage_multi_aff()