X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_multi_templ.c;h=720649d9f4a843250f2b1cb5c6db60d168427cd2;hb=baee941de1964a2cab64c34b627d5ab767060a79;hp=a275f1bbabc0c5ceb2efcc8e698e66eb2a4b9b71;hpb=4d9ca4edfc641f6535952d6167f3d406c777a9e1;p=platform%2Fupstream%2Fisl.git diff --git a/isl_multi_templ.c b/isl_multi_templ.c index a275f1b..720649d 100644 --- a/isl_multi_templ.c +++ b/isl_multi_templ.c @@ -227,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, @@ -405,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, @@ -468,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) @@ -501,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. */ @@ -547,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. @@ -583,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; @@ -592,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, @@ -838,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); +}