1 /*
2  * Copyright 2017      Sven Verdoolaege
3  *
4  * Use of this software is governed by the MIT license
5  *
6  * Written by Sven Verdoolaege.
7  */
8 
9 /* Initialize the explicit domain of "mupa".
10  *
11  * The explicit domain is initialized to a universe parameter set.
12  * It may later be specialized with constraints on the parameter or
13  * specific domain instances.
14  */
15 static __isl_give isl_multi_union_pw_aff *
isl_multi_union_pw_aff_init_explicit_domain(__isl_take isl_multi_union_pw_aff * mupa)16 isl_multi_union_pw_aff_init_explicit_domain(
17 	__isl_take isl_multi_union_pw_aff *mupa)
18 {
19 	isl_space *space;
20 
21 	if (isl_multi_union_pw_aff_check_has_explicit_domain(mupa) < 0)
22 		return isl_multi_union_pw_aff_free(mupa);
23 	space = isl_space_params(isl_multi_union_pw_aff_get_space(mupa));
24 	mupa->u.dom = isl_union_set_from_set(isl_set_universe(space));
25 	if (!mupa->u.dom)
26 		return isl_multi_union_pw_aff_free(mupa);
27 	return mupa;
28 }
29 
30 /* Drop the "n" dimensions of type "type" starting at position "pos"
31  * of the explicit domain of "mupa".
32  */
33 static __isl_give isl_multi_union_pw_aff *
isl_multi_union_pw_aff_drop_explicit_domain_dims(__isl_take isl_multi_union_pw_aff * mupa,enum isl_dim_type type,unsigned pos,unsigned n)34 isl_multi_union_pw_aff_drop_explicit_domain_dims(
35 	__isl_take isl_multi_union_pw_aff *mupa,
36 	enum isl_dim_type type, unsigned pos, unsigned n)
37 {
38 	if (isl_multi_union_pw_aff_check_has_explicit_domain(mupa) < 0)
39 		return isl_multi_union_pw_aff_free(mupa);
40 	if (type != isl_dim_param)
41 		isl_die(isl_multi_union_pw_aff_get_ctx(mupa), isl_error_invalid,
42 			"can only drop parameters",
43 			return isl_multi_union_pw_aff_free(mupa));
44 	mupa = isl_multi_union_pw_aff_cow(mupa);
45 	if (!mupa)
46 		return NULL;
47 	mupa->u.dom = isl_union_set_project_out(mupa->u.dom, type, pos, n);
48 	if (!mupa->u.dom)
49 		return isl_multi_union_pw_aff_free(mupa);
50 	return mupa;
51 }
52