add isl_basic_map_has_defining_equality
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 9 Aug 2010 15:07:10 +0000 (17:07 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Mon, 9 Aug 2010 15:52:43 +0000 (17:52 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
include/isl_constraint.h
isl_constraint.c

index b732243..de9ee4b 100644 (file)
@@ -58,6 +58,9 @@ __isl_give isl_basic_map *isl_basic_map_add_constraint(
 __isl_give isl_basic_set *isl_basic_set_add_constraint(
        __isl_take isl_basic_set *bset, __isl_take isl_constraint *constraint);
 
+int isl_basic_map_has_defining_equality(
+       __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos,
+       __isl_give isl_constraint **c);
 int isl_basic_set_has_defining_equality(
        struct isl_basic_set *bset, enum isl_dim_type type, int pos,
        struct isl_constraint **constraint);
index 89679a0..547e935 100644 (file)
@@ -32,6 +32,13 @@ static unsigned offset(struct isl_constraint *c, enum isl_dim_type type)
        }
 }
 
+static unsigned basic_map_offset(__isl_keep isl_basic_map *bmap,
+                                                       enum isl_dim_type type)
+{
+       return type == isl_dim_div ? 1 + isl_dim_total(bmap->dim)
+                                  : 1 + isl_dim_offset(bmap->dim, type);
+}
+
 static unsigned basic_set_offset(struct isl_basic_set *bset,
                                                        enum isl_dim_type type)
 {
@@ -472,30 +479,38 @@ error:
        return NULL;
 }
 
-int isl_basic_set_has_defining_equality(
-       struct isl_basic_set *bset, enum isl_dim_type type, int pos,
-       struct isl_constraint **c)
+int isl_basic_map_has_defining_equality(
+       __isl_keep isl_basic_map *bmap, enum isl_dim_type type, int pos,
+       __isl_give isl_constraint **c)
 {
        int i;
        unsigned offset;
        unsigned total;
 
-       if (!bset)
+       if (!bmap)
                return -1;
-       offset = basic_set_offset(bset, type);
-       total = isl_basic_set_total_dim(bset);
-       isl_assert(bset->ctx, pos < isl_basic_set_dim(bset, type), return -1);
-       for (i = 0; i < bset->n_eq; ++i)
-               if (!isl_int_is_zero(bset->eq[i][offset + pos]) &&
-                   isl_seq_first_non_zero(bset->eq[i]+offset+pos+1,
+       offset = basic_map_offset(bmap, type);
+       total = isl_basic_map_total_dim(bmap);
+       isl_assert(bmap->ctx, pos < isl_basic_map_dim(bmap, type), return -1);
+       for (i = 0; i < bmap->n_eq; ++i)
+               if (!isl_int_is_zero(bmap->eq[i][offset + pos]) &&
+                   isl_seq_first_non_zero(bmap->eq[i]+offset+pos+1,
                                           1+total-offset-pos-1) == -1) {
-                       *c= isl_basic_set_constraint(isl_basic_set_copy(bset),
-                                                               &bset->eq[i]);
+                       *c = isl_basic_map_constraint(isl_basic_map_copy(bmap),
+                                                               &bmap->eq[i]);
                        return 1;
                }
        return 0;
 }
 
+int isl_basic_set_has_defining_equality(
+       __isl_keep isl_basic_set *bset, enum isl_dim_type type, int pos,
+       __isl_give isl_constraint **c)
+{
+       return isl_basic_map_has_defining_equality((isl_basic_map *)bset,
+                                                   type, pos, c);
+}
+
 int isl_basic_set_has_defining_inequalities(
        struct isl_basic_set *bset, enum isl_dim_type type, int pos,
        struct isl_constraint **lower,