• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
FN(MULTI (BASE),has_explicit_domain)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
FN(MULTI (BASE),involves_explicit_domain_dims)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
MULTI(BASE)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  */
FN(MULTI (BASE),free_explicit_domain)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  */
FN(MULTI (BASE),equal_explicit_domain)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  */
FN(MULTI (BASE),check_explicit_domain)168 static isl_stat FN(MULTI(BASE),check_explicit_domain)(
169 	__isl_keep MULTI(BASE) *multi)
170 {
171 	return isl_stat_ok;
172 }
173