X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_equalities.c;h=da36c3d1e0246c99d9532b1d29dd513e2e010fe9;hb=refs%2Ftags%2Faccepted%2Ftizen%2F20130912.195944;hp=9589032c25a85c1110a8f98f74bef78671e33c85;hpb=4d9ca4edfc641f6535952d6167f3d406c777a9e1;p=platform%2Fupstream%2Fisl.git diff --git a/isl_equalities.c b/isl_equalities.c index 9589032..da36c3d 100644 --- a/isl_equalities.c +++ b/isl_equalities.c @@ -14,6 +14,7 @@ #include #include "isl_map_private.h" #include "isl_equalities.h" +#include /* Given a set of modulo constraints * @@ -746,3 +747,35 @@ error: isl_int_clear(r); return -1; } + +/* Check if dimension "dim" belongs to a residue class + * i_dim \equiv r mod m + * with m != 1 and if so return m in *modulo and r in *residue. + * As a special case, when i_dim has a fixed value v, then + * *modulo is set to 0 and *residue to v. + * + * If i_dim does not belong to such a residue class, then *modulo + * is set to 1 and *residue is set to 0. + */ +int isl_set_dim_residue_class_val(__isl_keep isl_set *set, + int pos, __isl_give isl_val **modulo, __isl_give isl_val **residue) +{ + *modulo = NULL; + *residue = NULL; + if (!set) + return -1; + *modulo = isl_val_alloc(isl_set_get_ctx(set)); + *residue = isl_val_alloc(isl_set_get_ctx(set)); + if (!*modulo || !*residue) + goto error; + if (isl_set_dim_residue_class(set, pos, + &(*modulo)->n, &(*residue)->n) < 0) + goto error; + isl_int_set_si((*modulo)->d, 1); + isl_int_set_si((*residue)->d, 1); + return 0; +error: + isl_val_free(*modulo); + isl_val_free(*residue); + return -1; +}