if (isl_int_is_zero(ls->div->row[pos][0]))
isl_die(isl_local_space_get_ctx(ls), isl_error_invalid,
"expression of div unknown", return NULL);
+ if (!isl_local_space_is_set(ls))
+ isl_die(isl_local_space_get_ctx(ls), isl_error_invalid,
+ "cannot represent divs of map spaces", return NULL);
aff = isl_aff_alloc(isl_local_space_copy(ls));
if (!aff)
/* Plug in the affine expressions "subs" of length "subs_len" (including
* the denominator and the constant term) into the variable at position "pos"
- * of all the div expressions starting at "first".
+ * of the "n" div expressions starting at "first".
*
* Let i be the dimension to replace and let "subs" be of the form
*
__isl_give isl_local_space *isl_local_space_substitute_seq(
__isl_take isl_local_space *ls,
enum isl_dim_type type, unsigned pos, isl_int *subs, int subs_len,
- int first)
+ int first, int n)
{
int i;
isl_int v;
+ if (n == 0)
+ return ls;
ls = isl_local_space_cow(ls);
if (!ls)
return NULL;
if (!ls->div)
return isl_local_space_free(ls);
+ if (first + n > ls->div->n_row)
+ isl_die(isl_local_space_get_ctx(ls), isl_error_invalid,
+ "index out of bounds", return isl_local_space_free(ls));
+
pos += isl_local_space_offset(ls, type);
isl_int_init(v);
return isl_local_space_free(ls));
return isl_local_space_substitute_seq(ls, type, pos, subs->v->el,
- subs->v->size, 0);
+ subs->v->size, 0, ls->div->n_row);
}
int isl_local_space_is_named_or_nested(__isl_keep isl_local_space *ls,
continue;
}
isl_seq_preimage(res->div->row[n_div_ma + i], ls->div->row[i],
- ma, n_div_ma, n_div_ls, f, c1, c2, g, 1);
+ ma, 0, 0, n_div_ma, n_div_ls, f, c1, c2, g, 1);
normalize_div(res, n_div_ma + i);
}