Lines Matching refs:div
44 div_hash = isl_mat_get_hash(ls->div);
51 __isl_take isl_space *space, __isl_take isl_mat *div)
56 if (!space || !div)
66 ls->div = div;
70 isl_mat_free(div);
80 isl_mat *div;
91 div = isl_mat_alloc(ctx, n_div, 1 + 1 + total + n_div);
92 return isl_local_space_alloc_div(space, div);
116 isl_mat_copy(ls->div));
141 isl_mat_free(ls->div);
203 return isl_mat_is_equal(ls1->div, ls2->div);
227 return isl_local_cmp(ls1->div, ls2->div);
236 return ls->div->n_row;
241 return dim + ls->div->n_row;
341 isl_seq_cpy(aff->v->el, ls->div->row[pos], aff->v->size);
393 if (pos < 0 || pos >= ls->div->n_row)
402 "expression of div unknown", return NULL);
486 return ls ? ls->div : NULL;
514 local = ls->div;
515 ls->div = NULL;
531 if (ls->div == local) {
539 isl_local_free(ls->div);
540 ls->div = local;
649 __isl_take isl_local_space *ls, __isl_take isl_vec *div)
652 if (!ls || !div)
655 if (ls->div->n_col != div->size)
659 ls->div = isl_mat_add_zero_cols(ls->div, 1);
660 ls->div = isl_mat_add_rows(ls->div, 1);
661 if (!ls->div)
664 isl_seq_cpy(ls->div->row[ls->div->n_row - 1], div->el, div->size);
665 isl_int_set_si(ls->div->row[ls->div->n_row - 1][div
667 isl_vec_free(div);
671 isl_vec_free(div);
676 __isl_take isl_local_space *ls, __isl_take isl_mat *div)
680 if (!ls || !div)
683 isl_mat_free(ls->div);
684 ls->div = div;
687 isl_mat_free(div);
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)
745 return cmp_row(div->row[i], div->row[j], i, j, div->n_row, div->n_col);
753 return cmp_row(bmap->div[i], bmap->div[j], i, j, bmap->n_div, total);
809 isl_mat *div = NULL;
816 div = isl_mat_alloc(div1->ctx, 1 + div1->n_row + div2->n_row,
818 if (!div)
824 expand_row(div, k, div1, i, exp1);
825 expand_row(div, k + 1, div2, j, exp2);
827 cmp = isl_mat_cmp_div(div, k, k + 1);
835 isl_seq_cpy(div->row[k], div->row[k + 1], div->n_col);
839 expand_row(div, k, div1, i, exp1);
843 expand_row(div, k, div2, j, exp2);
847 div->n_row = k;
848 div->n_col = d + k;
850 return div;
863 if (a < 0 || a >= ls->div->n_row || b < 0 || b >= ls->div->n_row)
866 offset = ls->div->n_col - ls->div->n_row;
867 ls->div = isl_mat_swap_cols(ls->div, offset + a, offset + b);
868 ls->div = isl_mat_swap_rows(ls->div, a, b);
869 if (!ls->div)
883 isl_mat *div = NULL;
894 if (ls2->div->n_row == 0) {
899 if (ls1->div->n_row == 0) {
904 exp1 = isl_alloc_array(ctx, int, ls1->div->n_row);
905 exp2 = isl_alloc_array(ctx, int, ls2->div->n_row);
909 div = isl_merge_divs(ls1->div, ls2->div, exp1, exp2);
910 if (!div)
913 equal = isl_mat_is_equal(ls1->div, div);
924 isl_mat_free(ls1->div);
925 ls1->div = div;
931 isl_mat_free(div);
937 /* Is the local variable "div" of "ls" marked as not having
945 int div)
949 return isl_local_div_is_marked_unknown(ls->div, div);
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)
958 return isl_local_div_is_known(ls->div, div);
967 return isl_local_divs_known(ls->div);
1104 __isl_take isl_local_space *ls, int div)
1106 isl_ctx *ctx = ls->div->ctx;
1107 unsigned total = ls->div->n_col - 2;
1109 isl_seq_gcd(ls->div->row[div] + 2, total, &ctx->normalize_gcd);
1111 ctx->normalize_gcd, ls->div->row[div][0]);
1115 isl_seq_scale_down(ls->div->row[div] + 2, ls->div->row[div] + 2,
1117 isl_int_divexact(ls->div->row[div][0], ls->div->row[div][0],
1119 isl_int_fdiv_q(ls->div->row[div][1], ls->div->row[div][1],
1154 for (k = 0; k < ls->div->n_row; ++k) {
1155 if (isl_int_is_zero(ls->div->row[k][1 + j]))
1160 ls->div = isl_mat_cow(ls->div);
1161 if (!ls->div)
1163 isl_seq_elim(ls->div->row[k] + 1, eq->eq[i], j, total,
1164 &ls->div->row[k][0]);
1181 * of the "n" div expressions starting at "first".
1208 ls->div = isl_mat_cow(ls->div);
1209 if (!ls->div)
1212 if (first + n > ls->div->n_row)
1220 if (isl_int_is_zero(ls->div->row[i][1 + pos]))
1222 isl_seq_substitute(ls->div->row[i], pos, subs,
1223 ls->div->n_col, subs_len, v);
1270 subs->v->size, 0, ls->div->n_row);
1298 ls->div = isl_mat_drop_rows(ls->div, first, n);
1306 ls->div = isl_mat_drop_cols(ls->div, first, n);
1307 if (!ls->div)
1330 ls->div = isl_mat_insert_zero_rows(ls->div, first, n);
1338 ls->div = isl_mat_insert_zero_cols(ls->div, first, n);
1339 if (!ls->div)
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)
1362 unknown = isl_local_space_div_is_marked_unknown(ls, div);
1368 pos = isl_local_space_offset(ls, isl_dim_div) + div;
1370 if (isl_int_eq(constraint[pos], ls->div->row[div][0])) {
1373 ls->div->row[div] + 2, pos - 1))
1375 } else if (isl_int_abs_eq(constraint[pos], ls->div->row[div][0])) {
1377 if (!isl_seq_eq(constraint + 1, ls->div->row[div] + 2, pos - 1))
1383 ls->div->n_row - div - 1) != -1)
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)
1406 linear = is_linear_div_constraint(ls, constraint, div, &sign);
1412 isl_int_sub(ls->div->row[div][1],
1413 ls->div->row[div][1], ls->div->row[div][0]);
1414 isl_int_add_ui(ls->div->row[div][1], ls->div->row[div][1], 1);
1415 neg = isl_seq_is_neg(constraint, ls->div->row[div] + 1, 1);
1416 isl_int_sub_ui(ls->div->row[div][1], ls->div->row[div][1], 1);
1417 isl_int_add(ls->div->row[div][1],
1418 ls->div->row[div][1], ls->div->row[div][0]);
1422 if (!isl_int_eq(constraint[0], ls->div->row[div][1]))
1430 * of an equality that corresponds to integer division "div" in "ls"?
1445 isl_int *constraint, unsigned div)
1450 linear = is_linear_div_constraint(ls, constraint, div, &sign);
1481 for (i = ls->div->n_row - 1; i >= 0; --i) {
1485 active[j] |= !isl_int_is_zero(ls->div->row[i][2 + j]);
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);
1504 ls->div = isl_mat_drop_rows(ls->div, 0, ls->div->n_row);
1505 if (!ls->dim || !ls->div)
1583 isl_mat_free(res->div);
1584 res->div = isl_mat_copy(ma->u.p[0]->ls->div);
1585 res->div = isl_mat_add_zero_cols(res->div, n_div_ls);
1586 res->div = isl_mat_add_rows(res->div, n_div_ls);
1587 if (!res->div)
1596 for (i = 0; i < ls->div->n_row; ++i) {
1597 if (isl_int_is_zero(ls->div->row[i][0])) {
1598 isl_int_set_si(res->div->row[n_div_ma + i][0], 0);
1601 if (isl_seq_preimage(res->div->row[n_div_ma + i],
1602 ls->div->row[i],