@@ -614,6 +614,7 @@ EXTRA_DIST = \
isl_pw_opt_templ.c \
isl_pw_pullback_templ.c \
isl_pw_range_tuple_id_templ.c \
+ isl_pw_scale_templ.c \
isl_pw_sub_templ.c \
isl_pw_un_op_templ.c \
isl_pw_union_opt.c \
@@ -2801,6 +2801,7 @@ static __isl_give isl_aff *isl_aff_zero_in_space(__isl_take isl_space *space)
#include <isl_pw_move_dims_templ.c>
#include <isl_pw_neg_templ.c>
#include <isl_pw_pullback_templ.c>
+#include <isl_pw_scale_templ.c>
#include <isl_pw_sub_templ.c>
#include <isl_pw_union_opt.c>
@@ -4606,6 +4607,7 @@ __isl_give isl_set *isl_multi_aff_lex_gt_set(__isl_take isl_multi_aff *ma1,
#include <isl_pw_neg_templ.c>
#include <isl_pw_pullback_templ.c>
#include <isl_pw_range_tuple_id_templ.c>
+#include <isl_pw_scale_templ.c>
#include <isl_pw_union_opt.c>
#undef BASE
@@ -957,6 +957,7 @@ static __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_zero_in_space(
#include <isl_pw_morph_templ.c>
#include <isl_pw_move_dims_templ.c>
#include <isl_pw_opt_templ.c>
+#include <isl_pw_scale_templ.c>
#undef BASE
#define BASE pw_qpolynomial_fold
@@ -3116,6 +3116,7 @@ static __isl_give isl_qpolynomial *isl_qpolynomial_zero_in_space(
#include <isl_pw_move_dims_templ.c>
#include <isl_pw_neg_templ.c>
#include <isl_pw_opt_templ.c>
+#include <isl_pw_scale_templ.c>
#include <isl_pw_sub_templ.c>
#undef BASE
--- /dev/null
+/*
+ * Copyright 2010 INRIA Saclay
+ *
+ * Use of this software is governed by the MIT license
+ *
+ * Written by Sven Verdoolaege, INRIA Saclay - Ile-de-France,
+ * Parc Club Orsay Universite, ZAC des vignes, 4 rue Jacques Monod,
+ * 91893 Orsay, France
+ */
+
+#include <isl_pw_macro.h>
+
+__isl_give PW *FN(PW,scale)(__isl_take PW *pw, isl_int v)
+{
+ int i;
+ isl_size n;
+
+ if (isl_int_is_one(v))
+ return pw;
+ if (pw && DEFAULT_IS_ZERO && isl_int_is_zero(v)) {
+ PW *zero;
+ isl_space *space = FN(PW,get_space)(pw);
+ zero = FN(PW,ZERO)(space OPT_TYPE_ARG(pw->));
+ FN(PW,free)(pw);
+ return zero;
+ }
+ if (isl_int_is_neg(v))
+ pw = FN(PW,negate_type)(pw);
+
+ n = FN(PW,n_piece)(pw);
+ if (n < 0)
+ return FN(PW,free)(pw);
+ for (i = 0; i < n; ++i) {
+ EL *el;
+
+ el = FN(PW,take_base_at)(pw, i);
+ el = FN(EL,scale)(el, v);
+ pw = FN(PW,restore_base_at)(pw, i, el);
+ }
+
+ return pw;
+}
@@ -1901,37 +1901,6 @@ static __isl_give PW *FN(PW,negate_type)(__isl_take PW *pw)
}
#endif
-__isl_give PW *FN(PW,scale)(__isl_take PW *pw, isl_int v)
-{
- int i;
- isl_size n;
-
- if (isl_int_is_one(v))
- return pw;
- if (pw && DEFAULT_IS_ZERO && isl_int_is_zero(v)) {
- PW *zero;
- isl_space *space = FN(PW,get_space)(pw);
- zero = FN(PW,ZERO)(space OPT_TYPE_ARG(pw->));
- FN(PW,free)(pw);
- return zero;
- }
- if (isl_int_is_neg(v))
- pw = FN(PW,negate_type)(pw);
-
- n = FN(PW,n_piece)(pw);
- if (n < 0)
- return FN(PW,free)(pw);
- for (i = 0; i < n; ++i) {
- EL *el;
-
- el = FN(PW,take_base_at)(pw, i);
- el = FN(EL,scale)(el, v);
- pw = FN(PW,restore_base_at)(pw, i, el);
- }
-
- return pw;
-}
-
/* Multiply the pieces of "pw" by "v" and return the result.
*/
__isl_give PW *FN(PW,scale_val)(__isl_take PW *pw, __isl_take isl_val *v)