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 * |
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(multi: mupa) < 0) |
22 | return isl_multi_union_pw_aff_free(multi: mupa); |
23 | space = isl_space_params(space: isl_multi_union_pw_aff_get_space(multi: mupa)); |
24 | mupa->u.dom = isl_union_set_from_set(set: isl_set_universe(space)); |
25 | if (!mupa->u.dom) |
26 | return isl_multi_union_pw_aff_free(multi: 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 * |
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(multi: mupa) < 0) |
39 | return isl_multi_union_pw_aff_free(multi: 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(multi: mupa); |
45 | if (!mupa) |
46 | return NULL; |
47 | mupa->u.dom = isl_union_set_project_out(uset: mupa->u.dom, type, first: pos, n); |
48 | if (!mupa->u.dom) |
49 | return isl_multi_union_pw_aff_free(multi: mupa); |
50 | return mupa; |
51 | } |
52 |