/* * Copyright 2011 Sven Verdoolaege * Copyright 2012-2013 Ecole Normale Superieure * * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege, * Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France */ #include <isl_multi_macro.h> /* Intersect the parameter domain "dom1" with "dom2". * That is, intersect the parameters of "dom2" with "dom1". * * Even though "dom1" is known to only involve parameter constraints, * it may be of type isl_union_set, so explicitly convert it * to an isl_set first. */ static __isl_give DOM *FN(MULTI(BASE),params_domain_intersect)(DOM *dom1, __isl_take DOM *dom2) { isl_set *params; params = FN(DOM,params)(dom1); dom2 = FN(DOM,intersect_params)(dom2, params); return dom2; } /* Intersect the domain of "multi" with "domain". * * If "multi" has an explicit domain, then only this domain * needs to be intersected. */ __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_domain)( __isl_take MULTI(BASE) *multi, __isl_take DOM *domain) { if (FN(MULTI(BASE),check_compatible_domain)(multi, domain) < 0) domain = FN(DOM,free)(domain); return FN(FN(MULTI(BASE),apply),DOMBASE)(multi, domain, &FN(EL,intersect_domain), &FN(DOM,intersect), &FN(MULTI(BASE),params_domain_intersect)); } /* Intersect the parameter domain of "multi" with "domain". * * If "multi" has an explicit domain, then only this domain * needs to be intersected. */ __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_params)( __isl_take MULTI(BASE) *multi, __isl_take isl_set *domain) { return FN(MULTI(BASE),apply_set)(multi, domain, &FN(EL,intersect_params), &FN(DOM,intersect_params), &FN(DOM,intersect_params)); }