isl_seq_clr(c + rem, n);
}
-struct isl_basic_set *isl_basic_set_drop_vars(
+struct isl_basic_set *isl_basic_set_drop_dims(
struct isl_basic_set *bset, unsigned first, unsigned n)
{
int i;
return NULL;
}
-struct isl_set *isl_set_drop_vars(
+static struct isl_set *isl_set_drop_dims(
struct isl_set *set, unsigned first, unsigned n)
{
int i;
goto error;
for (i = 0; i < set->n; ++i) {
- set->p[i] = isl_basic_set_drop_vars(set->p[i], first, n);
+ set->p[i] = isl_basic_set_drop_dims(set->p[i], first, n);
if (!set->p[i])
goto error;
}
(struct isl_basic_map *)bset, pos, n);
}
+/* Project out n dimensions starting at first using Fourier-Motzkin */
+struct isl_set *isl_set_remove_dims(struct isl_set *set,
+ unsigned first, unsigned n)
+{
+ int i;
+
+ if (n == 0)
+ return set;
+
+ set = isl_set_cow(set);
+ if (!set)
+ return NULL;
+ isl_assert(set->ctx, first+n <= set->dim, goto error);
+
+ for (i = 0; i < set->n; ++i) {
+ set->p[i] = isl_basic_set_eliminate_vars(set->p[i],
+ set->nparam + first, n);
+ if (!set->p[i])
+ goto error;
+ }
+ set = isl_set_drop_dims(set, first, n);
+ return set;
+error:
+ isl_set_free(set);
+ return NULL;
+}
+
/* Elimininate divs based on inequalities
*/
static struct isl_basic_map *eliminate_divs_ineq(
return (struct isl_basic_map *)bset;
}
bset = isl_basic_set_cow(bset);
- total = bset->dim + bset->extra;
if (!bset)
goto error;
+ total = bset->dim + bset->extra;
bmap = (struct isl_basic_map *)bset;
bmap->nparam = like->nparam;
bmap->n_in = like->n_in;
return NULL;
}
+struct isl_basic_set *isl_basic_set_from_underlying_set(
+ struct isl_basic_set *bset, struct isl_basic_set *like)
+{
+ return (struct isl_basic_set *)
+ isl_basic_map_overlying_set(bset, (struct isl_basic_map *)like);
+}
+
+struct isl_set *isl_set_from_underlying_set(
+ struct isl_set *set, struct isl_basic_set *like)
+{
+ int i;
+
+ if (!set || !like)
+ goto error;
+ isl_assert(set->ctx, set->dim == like->nparam + like->dim + like->n_div,
+ goto error);
+ if (like->nparam == 0 && like->n_div == 0) {
+ isl_basic_set_free(like);
+ return set;
+ }
+ set = isl_set_cow(set);
+ if (!set)
+ goto error;
+ for (i = 0; i < set->n; ++i) {
+ set->p[i] = isl_basic_set_from_underlying_set(set->p[i],
+ isl_basic_set_copy(like));
+ if (!set->p[i])
+ goto error;
+ }
+ set->nparam = like->nparam;
+ set->dim = like->dim;
+ isl_basic_set_free(like);
+ return set;
+error:
+ isl_basic_set_free(like);
+ isl_set_free(set);
+ return NULL;
+}
+
struct isl_set *isl_map_underlying_set(struct isl_map *map)
{
int i;
return NULL;
}
+struct isl_set *isl_set_to_underlying_set(struct isl_set *set)
+{
+ return (struct isl_set *)isl_map_underlying_set((struct isl_map *)set);
+}
+
struct isl_basic_set *isl_basic_map_domain(struct isl_basic_map *bmap)
{
struct isl_basic_set *domain;