From: Sven Verdoolaege Date: Thu, 14 Jul 2011 09:48:06 +0000 (+0200) Subject: add isl_pw_aff_is_cst X-Git-Tag: isl-0.08~209 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f8101c8aad486c2ec4deba325de968cb274c1139;p=platform%2Fupstream%2Fisl.git add isl_pw_aff_is_cst Signed-off-by: Sven Verdoolaege --- diff --git a/doc/user.pod b/doc/user.pod index 0e45e14..00197ba 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -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, diff --git a/include/isl/aff.h b/include/isl/aff.h index b6ffe35..fbe8486 100644 --- a/include/isl/aff.h +++ b/include/isl/aff.h @@ -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); diff --git a/isl_aff.c b/isl_aff.c index 5faf870..8672237 100644 --- 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; +}