add isl_set_fix_dim_si
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 25 Aug 2008 22:03:25 +0000 (00:03 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 25 Aug 2008 22:03:25 +0000 (00:03 +0200)
include/isl_set.h
isl_map.c

index 0539b1c..f5c48e5 100644 (file)
@@ -124,6 +124,8 @@ struct isl_set *isl_set_subtract(struct isl_ctx *ctx, struct isl_set *set1,
                struct isl_set *set2);
 struct isl_set *isl_set_apply(struct isl_ctx *ctx, struct isl_set *set,
                struct isl_map *map);
+struct isl_set *isl_set_fix_dim_si(struct isl_ctx *ctx, struct isl_set *set,
+               unsigned dim, int value);
 
 void isl_set_dump(struct isl_ctx *ctx, struct isl_set *set, FILE *out,
                  int indent);
index aab015e..97e9939 100644 (file)
--- a/isl_map.c
+++ b/isl_map.c
@@ -2320,17 +2320,13 @@ error:
        return NULL;
 }
 
-struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx,
+static struct isl_basic_map *isl_basic_map_fix_var(struct isl_ctx *ctx,
                struct isl_basic_map *bmap,
-               unsigned input, int value)
+               unsigned var, int value)
 {
        int j;
 
        bmap = isl_basic_map_cow(ctx, bmap);
-       if (!bmap)
-               return NULL;
-       isl_assert(ctx, input < bmap->n_in, goto error);
-
        bmap = isl_basic_map_extend(ctx, bmap,
                        bmap->nparam, bmap->n_in, bmap->n_out, 0, 1, 0);
        j = isl_basic_map_alloc_equality(ctx, bmap);
@@ -2338,7 +2334,7 @@ struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx,
                goto error;
        isl_seq_clr(bmap->eq[j],
                    1 + bmap->nparam + bmap->n_in + bmap->n_out + bmap->extra);
-       isl_int_set_si(bmap->eq[j][1+bmap->nparam+input], -1);
+       isl_int_set_si(bmap->eq[j][1 + var], -1);
        isl_int_set_si(bmap->eq[j][0], value);
        bmap = isl_basic_map_simplify(ctx, bmap);
        return isl_basic_map_finalize(ctx, bmap);
@@ -2347,6 +2343,34 @@ error:
        return NULL;
 }
 
+struct isl_basic_map *isl_basic_map_fix_input_si(struct isl_ctx *ctx,
+               struct isl_basic_map *bmap,
+               unsigned input, int value)
+{
+       if (!bmap)
+               return NULL;
+       isl_assert(ctx, input < bmap->n_in, goto error);
+       return isl_basic_map_fix_var(ctx, bmap, bmap->nparam + input, value);
+error:
+       isl_basic_map_free(ctx, bmap);
+       return NULL;
+}
+
+struct isl_basic_set *isl_basic_set_fix_dim_si(struct isl_ctx *ctx,
+               struct isl_basic_set *bset,
+               unsigned dim, int value)
+{
+       if (!bset)
+               return NULL;
+       isl_assert(ctx, dim < bset->dim, goto error);
+       return (struct isl_basic_set *)
+               isl_basic_map_fix_var(ctx, (struct isl_basic_map *)bset,
+                                               bset->nparam + dim, value);
+error:
+       isl_basic_set_free(ctx, bset);
+       return NULL;
+}
+
 struct isl_map *isl_map_fix_input_si(struct isl_ctx *ctx, struct isl_map *map,
                unsigned input, int value)
 {
@@ -2369,6 +2393,28 @@ error:
        return NULL;
 }
 
+struct isl_set *isl_set_fix_dim_si(struct isl_ctx *ctx, struct isl_set *set,
+               unsigned dim, int value)
+{
+       int i;
+
+       set = isl_set_cow(ctx, set);
+       if (!set)
+               return NULL;
+
+       isl_assert(ctx, dim < set->dim, goto error);
+       for (i = 0; i < set->n; ++i) {
+               set->p[i] = isl_basic_set_fix_dim_si(ctx, set->p[i],
+                                                               dim, value);
+               if (!set->p[i])
+                       goto error;
+       }
+       return set;
+error:
+       isl_set_free(ctx, set);
+       return NULL;
+}
+
 struct isl_map *isl_map_reverse(struct isl_ctx *ctx, struct isl_map *map)
 {
        int i;