1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
* 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));
}