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 | /* These versions of the explicit domain functions are used |
10 | * when the multi expression cannot have an explicit domain. |
11 | */ |
12 | |
13 | #include <isl/space.h> |
14 | |
15 | #include <isl_multi_macro.h> |
16 | |
17 | /* Does "multi" have an explicit domain? |
18 | * |
19 | * No. |
20 | */ |
21 | static int FN(MULTI(BASE),has_explicit_domain)(__isl_keep MULTI(BASE) *multi) |
22 | { |
23 | return 0; |
24 | } |
25 | |
26 | /* Initialize the explicit domain of "multi". |
27 | * "multi" cannot have an explicit domain, so this function is never called. |
28 | */ |
29 | static __isl_give MULTI(BASE) *FN(MULTI(BASE),init_explicit_domain)( |
30 | __isl_take MULTI(BASE) *multi) |
31 | { |
32 | return multi; |
33 | } |
34 | |
35 | /* Intersect the domain of "dst" with the explicit domain of "src". |
36 | * "src" cannot have an explicit domain, so this function is never called. |
37 | */ |
38 | static __isl_give MULTI(BASE) *FN(MULTI(BASE),intersect_explicit_domain)( |
39 | __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src) |
40 | { |
41 | return dst; |
42 | } |
43 | |
44 | /* Set the explicit domain of "dst" to that of "src". |
45 | * "src" and "dst" cannot have an explicit domain, |
46 | * so this function is never called. |
47 | */ |
48 | static __isl_give MULTI(BASE) *FN(MULTI(BASE),copy_explicit_domain)( |
49 | __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src) |
50 | { |
51 | return dst; |
52 | } |
53 | |
54 | /* Only used by multi-expressions that include "isl_multi_product_templ.c". |
55 | */ |
56 | static __isl_give MULTI(BASE) * |
57 | FN(MULTI(BASE),intersect_explicit_domain_product)( |
58 | __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1, |
59 | __isl_keep MULTI(BASE) *src2) __attribute__ ((unused)); |
60 | |
61 | /* Intersect the domain of "dst" with the domain product |
62 | * of the explicit domains of "src1" and "src2". |
63 | * This function is only called if at least one of "src1" or "src2" |
64 | * has an explicit domain. |
65 | * "src1", "src2" and "dst" cannot have an explicit domain, |
66 | * so this function is never called. |
67 | */ |
68 | static __isl_give MULTI(BASE) * |
69 | FN(MULTI(BASE),intersect_explicit_domain_product)( |
70 | __isl_take MULTI(BASE) *dst, __isl_keep MULTI(BASE) *src1, |
71 | __isl_keep MULTI(BASE) *src2) |
72 | { |
73 | return dst; |
74 | } |
75 | |
76 | /* Align the parameters of the explicit domain of "multi" to those of "space". |
77 | * "multi" cannot have an explicit domain, so this function is never called. |
78 | */ |
79 | static __isl_give MULTI(BASE) *FN(MULTI(BASE),align_explicit_domain_params)( |
80 | __isl_take MULTI(BASE) *multi, __isl_take isl_space *space) |
81 | { |
82 | isl_space_free(space); |
83 | return multi; |
84 | } |
85 | |
86 | /* Replace the space of the explicit domain of "multi" by "space", |
87 | * without modifying its dimension. |
88 | * "multi" cannot have an explicit domain, so this function is never called. |
89 | */ |
90 | static __isl_give MULTI(BASE) *FN(MULTI(BASE),reset_explicit_domain_space)( |
91 | __isl_take MULTI(BASE) *multi, __isl_take isl_space *space) |
92 | { |
93 | isl_space_free(space); |
94 | return multi; |
95 | } |
96 | |
97 | /* Check whether the explicit domain of "multi" has non-zero coefficients |
98 | * for any dimension in the given range or if any of these dimensions appear |
99 | * with non-zero coefficients in any of the integer divisions involved. |
100 | * "multi" cannot have an explicit domain, so this function is never called. |
101 | */ |
102 | isl_bool FN(MULTI(BASE),involves_explicit_domain_dims)( |
103 | __isl_keep MULTI(BASE) *multi, |
104 | enum isl_dim_type type, unsigned pos, unsigned n) |
105 | { |
106 | return isl_bool_false; |
107 | } |
108 | |
109 | /* Insert "n" dimensions of type "type" at position "pos" |
110 | * of the explicit domain of "multi". |
111 | * "multi" cannot have an explicit domain, so this function is never called. |
112 | */ |
113 | __isl_give MULTI(BASE) *FN(MULTI(BASE),insert_explicit_domain_dims)( |
114 | __isl_take MULTI(BASE) *multi, |
115 | enum isl_dim_type type, unsigned pos, unsigned n) |
116 | { |
117 | return multi; |
118 | } |
119 | |
120 | /* Drop the "n" dimensions of type "type" starting at position "pos" |
121 | * of the explicit domain of "multi". |
122 | * "multi" cannot have an explicit domain, so this function is never called. |
123 | */ |
124 | __isl_give MULTI(BASE) *FN(MULTI(BASE),drop_explicit_domain_dims)( |
125 | __isl_take MULTI(BASE) *multi, |
126 | enum isl_dim_type type, unsigned pos, unsigned n) |
127 | { |
128 | return multi; |
129 | } |
130 | |
131 | /* Move the "n" dimensions of "src_type" starting at "src_pos" of |
132 | * of the explicit domain of "multi" to dimensions of "dst_type" at "dst_pos". |
133 | * "multi" cannot have an explicit domain, so this function is never called. |
134 | */ |
135 | __isl_give MULTI(BASE) *FN(MULTI(BASE),move_explicit_domain_dims)( |
136 | __isl_take MULTI(BASE) *multi, |
137 | enum isl_dim_type dst_type, unsigned dst_pos, |
138 | enum isl_dim_type src_type, unsigned src_pos, unsigned n) |
139 | { |
140 | return multi; |
141 | } |
142 | |
143 | /* Free the explicit domain of "multi". |
144 | * "multi" cannot have an explicit domain, so this function is never called. |
145 | */ |
146 | static void FN(MULTI(BASE),free_explicit_domain)(__isl_keep MULTI(BASE) *multi) |
147 | { |
148 | } |
149 | |
150 | /* Do "multi1" and "multi2" have the same explicit domain? |
151 | * "multi1" and "multi2" cannot have an explicit domain, |
152 | * so this function is never called. |
153 | */ |
154 | static isl_bool FN(MULTI(BASE),equal_explicit_domain)( |
155 | __isl_keep MULTI(BASE) *multi1, __isl_keep MULTI(BASE) *multi2) |
156 | { |
157 | return isl_bool_true; |
158 | } |
159 | |
160 | static isl_stat FN(MULTI(BASE),check_explicit_domain)( |
161 | __isl_keep MULTI(BASE) *multi) __attribute__ ((unused)); |
162 | |
163 | /* Debugging function to check that the explicit domain of "multi" |
164 | * has the correct space. |
165 | * "multi" cannot have an explicit domain, |
166 | * so this function should never be called. |
167 | */ |
168 | static isl_stat FN(MULTI(BASE),check_explicit_domain)( |
169 | __isl_keep MULTI(BASE) *multi) |
170 | { |
171 | return isl_stat_ok; |
172 | } |
173 | |