diff options
author | Sven Verdoolaege <skimo@kotnet.org> | 2013-06-18 11:28:59 +0200 |
---|---|---|
committer | Sven Verdoolaege <skimo@kotnet.org> | 2013-06-18 11:28:59 +0200 |
commit | daf854625fd18b93a3eabff19d64aee6ecd877e6 (patch) | |
tree | ceccf090deede8ef73cc9d31aefd4a42d40ddc75 | |
parent | 7ee40d457af53eacf74bc96b0e9b10cbeb271ba4 (diff) | |
download | isl-daf854625fd18b93a3eabff19d64aee6ecd877e6.tar.gz isl-daf854625fd18b93a3eabff19d64aee6ecd877e6.tar.bz2 isl-daf854625fd18b93a3eabff19d64aee6ecd877e6.zip |
add isl_multi_*_scale_multi_val
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
-rw-r--r-- | doc/user.pod | 12 | ||||
-rw-r--r-- | include/isl/multi.h | 3 | ||||
-rw-r--r-- | isl_multi_templ.c | 36 |
3 files changed, 51 insertions, 0 deletions
diff --git a/doc/user.pod b/doc/user.pod index 47af6644..eb284529 100644 --- a/doc/user.pod +++ b/doc/user.pod @@ -3543,6 +3543,9 @@ Operations include __isl_give isl_multi_val *isl_multi_val_scale_val( __isl_take isl_multi_val *mv, __isl_take isl_val *v); + __isl_give isl_multi_val *isl_multi_val_scale_multi_val( + __isl_take isl_multi_val *mv1, + __isl_take isl_multi_val *mv2); =head2 Vectors @@ -4383,6 +4386,13 @@ C<isl_multi_aff_sub> subtracts the second argument from the first. __isl_give isl_multi_pw_aff *isl_multi_pw_aff_scale_val( __isl_take isl_multi_pw_aff *mpa, __isl_take isl_val *v); + __isl_give isl_multi_aff *isl_multi_aff_scale_multi_val( + __isl_take isl_multi_aff *ma, + __isl_take isl_multi_val *mv); + __isl_give isl_multi_pw_aff * + isl_multi_pw_aff_scale_multi_val( + __isl_take isl_multi_pw_aff *mpa, + __isl_take isl_multi_val *mv); __isl_give isl_multi_aff *isl_multi_aff_scale_vec( __isl_take isl_multi_aff *ma, __isl_take isl_vec *v); @@ -4393,6 +4403,8 @@ C<isl_multi_aff_sub> subtracts the second argument from the first. __isl_take isl_union_pw_multi_aff *upma, __isl_take isl_vec *v); +C<isl_multi_aff_scale_multi_val> scales the elements of C<ma> +by the corresponding elements of C<mv>. C<isl_multi_aff_scale_vec> scales the first elements of C<ma> by the corresponding elements of C<v>. diff --git a/include/isl/multi.h b/include/isl/multi.h index a8f9b433..43f64c1b 100644 --- a/include/isl/multi.h +++ b/include/isl/multi.h @@ -63,6 +63,9 @@ __isl_give isl_multi_##BASE *isl_multi_##BASE##_range_product( \ __isl_take isl_multi_##BASE *multi2); \ __isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_val( \ __isl_take isl_multi_##BASE *multi, __isl_take isl_val *v); \ +__isl_give isl_multi_##BASE *isl_multi_##BASE##_scale_multi_val( \ + __isl_take isl_multi_##BASE *multi, \ + __isl_take isl_multi_val *mv); \ __isl_give isl_multi_##BASE *isl_multi_##BASE##_align_params( \ __isl_take isl_multi_##BASE *multi, \ __isl_take isl_space *model); diff --git a/isl_multi_templ.c b/isl_multi_templ.c index d3fec834..d73eb500 100644 --- a/isl_multi_templ.c +++ b/isl_multi_templ.c @@ -873,3 +873,39 @@ 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); +} |