X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_multi_templ.c;h=720649d9f4a843250f2b1cb5c6db60d168427cd2;hb=baee941de1964a2cab64c34b627d5ab767060a79;hp=0156411720acf575c9eeae8d7d8476aca3f73778;hpb=6ef5393d0c0b4b08b7316769b18e2ae92cd3cbcc;p=platform%2Fupstream%2Fisl.git diff --git a/isl_multi_templ.c b/isl_multi_templ.c index 0156411..720649d 100644 --- a/isl_multi_templ.c +++ b/isl_multi_templ.c @@ -8,6 +8,10 @@ * Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France */ +#include +#include +#include + #define xCAT(A,B) A ## B #define CAT(A,B) xCAT(A,B) #undef EL @@ -223,16 +227,8 @@ __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),set),BASE)( goto error; multi_space = FN(MULTI(BASE),get_space)(multi); - el_space = FN(EL,get_space)(el); - - if (!isl_space_match(multi_space, isl_dim_param, - el_space, isl_dim_param)) - isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid, - "parameters don't match", goto error); - if (!isl_space_tuple_match(multi_space, isl_dim_in, - el_space, isl_dim_in)) - isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid, - "domains don't match", goto error); + if (FN(EL,check_match_domain_space)(el, multi_space) < 0) + goto error; if (pos < 0 || pos >= multi->n) isl_die(FN(MULTI(BASE),get_ctx)(multi), isl_error_invalid, @@ -401,6 +397,7 @@ error: return NULL; } +#ifndef NO_GIST static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_params_multi_set_and)( __isl_take MULTI(BASE) *multi, __isl_take isl_set *set, __isl_give MULTI(BASE) *(*fn)(__isl_take MULTI(BASE) *multi, @@ -464,6 +461,7 @@ __isl_give MULTI(BASE) *FN(MULTI(BASE),gist_params)( dom_context = isl_set_intersect_params(dom_context, context); return FN(MULTI(BASE),gist)(multi, dom_context); } +#endif __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),LIST(BASE))( __isl_take isl_space *space, __isl_take LIST(EL) *list) @@ -497,6 +495,7 @@ error: return NULL; } +#ifndef NO_IDENTITY /* Create a multi expression in the given space that maps each * input dimension to the corresponding output dimension. */ @@ -543,6 +542,7 @@ error: isl_space_free(space); return NULL; } +#endif /* Construct a multi expression in the given space with value zero in * each of the output dimensions. @@ -579,6 +579,7 @@ __isl_give MULTI(BASE) *FN(MULTI(BASE),zero)(__isl_take isl_space *space) return multi; } +#ifndef NO_FROM_BASE __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),BASE)(__isl_take EL *el) { MULTI(BASE) *multi; @@ -588,6 +589,7 @@ __isl_give MULTI(BASE) *FN(FN(MULTI(BASE),from),BASE)(__isl_take EL *el) return multi; } +#endif __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_dims)( __isl_take MULTI(BASE) *multi, @@ -834,3 +836,39 @@ error: FN(MULTI(BASE),free)(multi2); return NULL; } + +/* Multiply the elements of "multi" by "v" and return the result. + */ +__isl_give MULTI(BASE) *FN(MULTI(BASE),scale_val)(__isl_take MULTI(BASE) *multi, + __isl_take isl_val *v) +{ + int i; + + if (!multi || !v) + goto error; + + if (isl_val_is_one(v)) { + isl_val_free(v); + return multi; + } + + if (!isl_val_is_rat(v)) + isl_die(isl_val_get_ctx(v), isl_error_invalid, + "expecting rational factor", goto error); + + multi = FN(MULTI(BASE),cow)(multi); + if (!multi) + return NULL; + + for (i = 0; i < multi->n; ++i) { + multi->p[i] = FN(EL,scale_val)(multi->p[i], isl_val_copy(v)); + if (!multi->p[i]) + goto error; + } + + isl_val_free(v); + return multi; +error: + isl_val_free(v); + return FN(MULTI(BASE),free)(multi); +}