2 * Copyright 2012 Ecole Normale Superieure
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege,
7 * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
10 #include <isl_pw_macro.h>
13 #define SUFFIX multi_aff
17 #define ARG2 isl_multi_aff
20 #include "isl_align_params_templ.c"
23 #define SUFFIX pw_multi_aff
27 #define ARG2 isl_pw_multi_aff
30 #include "isl_align_params_templ.c"
32 /* Compute the pullback of "pw" by the function represented by "ma".
33 * In other words, plug in "ma" in "pw".
35 __isl_give PW
*FN(PW
,pullback_multi_aff
)(__isl_take PW
*pw
,
36 __isl_take isl_multi_aff
*ma
)
39 isl_space
*space
= NULL
;
41 FN(PW
,align_params_multi_aff
)(&pw
, &ma
);
42 ma
= isl_multi_aff_align_divs(ma
);
47 space
= isl_space_join(isl_multi_aff_get_space(ma
),
48 FN(PW
,get_space
)(pw
));
50 for (i
= 0; i
< pw
->n
; ++i
) {
51 pw
->p
[i
].set
= isl_set_preimage_multi_aff(pw
->p
[i
].set
,
52 isl_multi_aff_copy(ma
));
55 pw
->p
[i
].FIELD
= FN(EL
,pullback_multi_aff
)(pw
->p
[i
].FIELD
,
56 isl_multi_aff_copy(ma
));
61 pw
= FN(PW
,reset_space
)(pw
, space
);
62 isl_multi_aff_free(ma
);
65 isl_space_free(space
);
66 isl_multi_aff_free(ma
);
71 /* Compute the pullback of "pw" by the function represented by "pma".
72 * In other words, plug in "pma" in "pw".
74 static __isl_give PW
*FN(PW
,pullback_pw_multi_aff_aligned
)(__isl_take PW
*pw
,
75 __isl_take isl_pw_multi_aff
*pma
)
85 space
= isl_space_join(isl_pw_multi_aff_get_space(pma
),
86 FN(PW
,get_space
)(pw
));
87 isl_pw_multi_aff_free(pma
);
88 res
= FN(PW
,empty
)(space
);
93 res
= FN(PW
,pullback_multi_aff
)(FN(PW
,copy
)(pw
),
94 isl_multi_aff_copy(pma
->p
[0].maff
));
95 res
= FN(PW
,intersect_domain
)(res
, isl_set_copy(pma
->p
[0].set
));
97 for (i
= 1; i
< pma
->n
; ++i
) {
100 res_i
= FN(PW
,pullback_multi_aff
)(FN(PW
,copy
)(pw
),
101 isl_multi_aff_copy(pma
->p
[i
].maff
));
102 res_i
= FN(PW
,intersect_domain
)(res_i
,
103 isl_set_copy(pma
->p
[i
].set
));
104 res
= FN(PW
,add_disjoint
)(res
, res_i
);
107 isl_pw_multi_aff_free(pma
);
111 isl_pw_multi_aff_free(pma
);
116 __isl_give PW
*FN(PW
,pullback_pw_multi_aff
)(__isl_take PW
*pw
,
117 __isl_take isl_pw_multi_aff
*pma
)
119 FN(PW
,align_params_pw_multi_aff
)(&pw
, &pma
);
120 return FN(PW
,pullback_pw_multi_aff_aligned
)(pw
, pma
);