xref: /netbsd-src/external/mit/isl/dist/isl_multi_gist.c (revision 5971e316fdea024efff6be8f03536623db06833e)
1*5971e316Smrg /*
2*5971e316Smrg  * Copyright 2011      Sven Verdoolaege
3*5971e316Smrg  * Copyright 2012-2013 Ecole Normale Superieure
4*5971e316Smrg  *
5*5971e316Smrg  * Use of this software is governed by the MIT license
6*5971e316Smrg  *
7*5971e316Smrg  * Written by Sven Verdoolaege,
8*5971e316Smrg  * Ecole Normale Superieure, 45 rue d’Ulm, 75230 Paris, France
9*5971e316Smrg  */
10*5971e316Smrg 
11*5971e316Smrg #include <isl_multi_macro.h>
12*5971e316Smrg 
13*5971e316Smrg /* Compute the gist of the parameter domain "dom1" with respect to "dom2".
14*5971e316Smrg  *
15*5971e316Smrg  * Since "dom2" may not be a parameter domain, explicitly convert it
16*5971e316Smrg  * to a parameter domain first.
17*5971e316Smrg  */
FN(MULTI (BASE),domain_gist_params)18*5971e316Smrg static __isl_give DOM *FN(MULTI(BASE),domain_gist_params)(DOM *dom1,
19*5971e316Smrg 	__isl_take DOM *dom2)
20*5971e316Smrg {
21*5971e316Smrg 	isl_set *params;
22*5971e316Smrg 
23*5971e316Smrg 	params = FN(DOM,params)(dom2);
24*5971e316Smrg 	dom1 = FN(DOM,gist_params)(dom1, params);
25*5971e316Smrg 
26*5971e316Smrg 	return dom1;
27*5971e316Smrg }
28*5971e316Smrg 
29*5971e316Smrg /* Compute the gist of "multi" with respect to the domain constraints
30*5971e316Smrg  * of "context".
31*5971e316Smrg  */
MULTI(BASE)32*5971e316Smrg __isl_give MULTI(BASE) *FN(MULTI(BASE),gist)(__isl_take MULTI(BASE) *multi,
33*5971e316Smrg 	__isl_take DOM *context)
34*5971e316Smrg {
35*5971e316Smrg 	if (FN(MULTI(BASE),check_compatible_domain)(multi, context) < 0)
36*5971e316Smrg 		context = FN(DOM,free)(context);
37*5971e316Smrg 	return FN(FN(MULTI(BASE),apply),DOMBASE)(multi, context, &FN(EL,gist),
38*5971e316Smrg 					&FN(DOM,gist),
39*5971e316Smrg 					&FN(MULTI(BASE),domain_gist_params));
40*5971e316Smrg }
41*5971e316Smrg 
42*5971e316Smrg /* Compute the gist of "multi" with respect to the parameter constraints
43*5971e316Smrg  * of "context".
44*5971e316Smrg  */
MULTI(BASE)45*5971e316Smrg __isl_give MULTI(BASE) *FN(MULTI(BASE),gist_params)(
46*5971e316Smrg 	__isl_take MULTI(BASE) *multi, __isl_take isl_set *context)
47*5971e316Smrg {
48*5971e316Smrg 	return FN(MULTI(BASE),apply_set)(multi, context, &FN(EL,gist_params),
49*5971e316Smrg 				&FN(DOM,gist_params), &FN(DOM,gist_params));
50*5971e316Smrg }
51