X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_multi_templ.c;h=d73eb50090337d5122e5d424804471249fb8315a;hb=refs%2Ftags%2Faccepted%2Ftizen%2F20130912.195944;hp=ddbfc01e717465f6e7b4396963b6720f7326c27d;hpb=92db9306b4c1a71e3054e7429f56000d4bf376dc;p=platform%2Fupstream%2Fisl.git diff --git a/isl_multi_templ.c b/isl_multi_templ.c index ddbfc01..d73eb50 100644 --- a/isl_multi_templ.c +++ b/isl_multi_templ.c @@ -397,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, @@ -428,6 +429,7 @@ __isl_give MULTI(BASE) *FN(MULTI(BASE),gist_aligned)( { int i; + multi = FN(MULTI(BASE),cow)(multi); if (!multi || !context) goto error; @@ -460,6 +462,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) @@ -493,6 +496,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. */ @@ -539,6 +543,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. @@ -575,6 +580,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; @@ -584,6 +590,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, @@ -830,3 +837,75 @@ 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); +} + +/* Multiply the elements of "multi" by the corresponding element of "mv" + * and return the result. + */ +__isl_give MULTI(BASE) *FN(MULTI(BASE),scale_multi_val)( + __isl_take MULTI(BASE) *multi, __isl_take isl_multi_val *mv) +{ + int i; + + if (!multi || !mv) + goto error; + + if (!isl_space_tuple_match(multi->space, isl_dim_out, + mv->space, isl_dim_set)) + isl_die(isl_multi_val_get_ctx(mv), isl_error_invalid, + "spaces don't match", goto error); + + multi = FN(MULTI(BASE),cow)(multi); + if (!multi) + return NULL; + + for (i = 0; i < multi->n; ++i) { + isl_val *v; + + v = isl_multi_val_get_val(mv, i); + multi->p[i] = FN(EL,scale_val)(multi->p[i], v); + if (!multi->p[i]) + goto error; + } + + isl_multi_val_free(mv); + return multi; +error: + isl_multi_val_free(mv); + return FN(MULTI(BASE),free)(multi); +}