add isl_pw_aff_is_cst
authorSven Verdoolaege <skimo@kotnet.org>
Thu, 14 Jul 2011 09:48:06 +0000 (11:48 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Wed, 20 Jul 2011 15:37:26 +0000 (17:37 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index 0e45e14..00197ba 100644 (file)
@@ -2315,6 +2315,9 @@ The expression can be inspected using
        __isl_give isl_div *isl_aff_get_div(
                __isl_keep isl_aff *aff, int pos);
 
+       int isl_aff_is_cst(__isl_keep isl_aff *aff);
+       int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff);
+
        int isl_aff_involves_dims(__isl_keep isl_aff *aff,
                enum isl_dim_type type, unsigned first, unsigned n);
        int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff,
index b6ffe35..fbe8486 100644 (file)
@@ -45,6 +45,8 @@ __isl_give isl_aff *isl_aff_add_coefficient(__isl_take isl_aff *aff,
 __isl_give isl_aff *isl_aff_add_coefficient_si(__isl_take isl_aff *aff,
        enum isl_dim_type type, int pos, int v);
 
+int isl_aff_is_cst(__isl_keep isl_aff *aff);
+
 __isl_give isl_aff *isl_aff_set_dim_name(__isl_take isl_aff *aff,
        enum isl_dim_type type, unsigned pos, const char *s);
 
@@ -102,6 +104,8 @@ unsigned isl_pw_aff_dim(__isl_keep isl_pw_aff *pwaff, enum isl_dim_type type);
 int isl_pw_aff_involves_dims(__isl_keep isl_pw_aff *pwaff,
        enum isl_dim_type type, unsigned first, unsigned n);
 
+int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff);
+
 __isl_give isl_pw_aff *isl_pw_aff_align_params(__isl_take isl_pw_aff *pwaff,
        __isl_take isl_dim *model);
 
index 5faf870..8672237 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -1379,3 +1379,29 @@ __isl_give isl_pw_aff *isl_pw_aff_cond(__isl_take isl_set *cond,
 
        return isl_pw_aff_add_disjoint(pwaff_true, pwaff_false);
 }
+
+int isl_aff_is_cst(__isl_keep isl_aff *aff)
+{
+       if (!aff)
+               return -1;
+
+       return isl_seq_first_non_zero(aff->v->el + 2, aff->v->size - 2) == -1;
+}
+
+/* Check whether pwaff is a piecewise constant.
+ */
+int isl_pw_aff_is_cst(__isl_keep isl_pw_aff *pwaff)
+{
+       int i;
+
+       if (!pwaff)
+               return -1;
+
+       for (i = 0; i < pwaff->n; ++i) {
+               int is_cst = isl_aff_is_cst(pwaff->p[i].aff);
+               if (is_cst < 0 || !is_cst)
+                       return is_cst;
+       }
+
+       return 1;
+}