1/* 2 * Copyright 2011 Sven Verdoolaege 3 * Copyright 2012-2013 Ecole Normale Superieure 4 * 5 * Use of this software is governed by the MIT license 6 * 7 * Written by Sven Verdoolaege, 8 * Ecole Normale Superieure, 45 rue d���Ulm, 75230 Paris, France 9 */ 10 11#include <isl_multi_macro.h> 12 13/* Intersect the parameter domain "dom1" with "dom2". 14 * That is, intersect the parameters of "dom2" with "dom1". 15 * 16 * Even though "dom1" is known to only involve parameter constraints, 17 * it may be of type isl_union_set, so explicitly convert it 18 * to an isl_set first. 19 */ 20static __isl_give DOM *FN(MULTI(BASE),params_domain_intersect)(DOM *dom1, 21 __isl_take DOM *dom2) 22{ 23 isl_set *params; 24 25 params = FN(DOM,params)(dom1); 26 dom2 = FN(DOM,intersect_params)(dom2, params); 27 28 return dom2; 29} 30 31/* Intersect the domain of "multi" with "domain". 32 * 33 * If "multi" has an explicit domain, then only this domain 34 * needs to be intersected. 35 */ 36__isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_domain)( 37 __isl_take MULTI(BASE) *multi, __isl_take DOM *domain) 38{ 39 if (FN(MULTI(BASE),check_compatible_domain)(multi, domain) < 0) 40 domain = FN(DOM,free)(domain); 41 return FN(FN(MULTI(BASE),apply),DOMBASE)(multi, domain, 42 &FN(EL,intersect_domain), 43 &FN(DOM,intersect), 44 &FN(MULTI(BASE),params_domain_intersect)); 45} 46 47/* Intersect the parameter domain of "multi" with "domain". 48 * 49 * If "multi" has an explicit domain, then only this domain 50 * needs to be intersected. 51 */ 52__isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_params)( 53 __isl_take MULTI(BASE) *multi, __isl_take isl_set *domain) 54{ 55 return FN(MULTI(BASE),apply_set)(multi, domain, 56 &FN(EL,intersect_params), 57 &FN(DOM,intersect_params), 58 &FN(DOM,intersect_params)); 59} 60