2 * Copyright 2017 Sven Verdoolaege
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege.
9 /* These versions of the explicit domain functions are used
10 * when the multi expression cannot have an explicit domain.
13 #include <isl/space.h>
15 #include <isl_multi_macro.h>
17 /* Does "multi" have an explicit domain?
21 static int FN(MULTI(BASE
),has_explicit_domain
)(__isl_keep
MULTI(BASE
) *multi
)
26 /* Initialize the explicit domain of "multi".
27 * "multi" cannot have an explicit domain, so this function is never called.
29 static __isl_give
MULTI(BASE
) *FN(MULTI(BASE
),init_explicit_domain
)(
30 __isl_take
MULTI(BASE
) *multi
)
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.
38 static __isl_give
MULTI(BASE
) *FN(MULTI(BASE
),intersect_explicit_domain
)(
39 __isl_take
MULTI(BASE
) *dst
, __isl_keep
MULTI(BASE
) *src
)
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.
48 static __isl_give
MULTI(BASE
) *FN(MULTI(BASE
),copy_explicit_domain
)(
49 __isl_take
MULTI(BASE
) *dst
, __isl_keep
MULTI(BASE
) *src
)
54 /* Only used by multi-expressions that include "isl_multi_product_templ.c".
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
));
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.
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
)
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.
79 static __isl_give
MULTI(BASE
) *FN(MULTI(BASE
),align_explicit_domain_params
)(
80 __isl_take
MULTI(BASE
) *multi
, __isl_take isl_space
*space
)
82 isl_space_free(space
);
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.
90 static __isl_give
MULTI(BASE
) *FN(MULTI(BASE
),reset_explicit_domain_space
)(
91 __isl_take
MULTI(BASE
) *multi
, __isl_take isl_space
*space
)
93 isl_space_free(space
);
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.
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
)
106 return isl_bool_false
;
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.
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
)
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.
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
)
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.
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
)
143 /* Free the explicit domain of "multi".
144 * "multi" cannot have an explicit domain, so this function is never called.
146 static void FN(MULTI(BASE
),free_explicit_domain
)(__isl_keep
MULTI(BASE
) *multi
)
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.
154 static isl_bool
FN(MULTI(BASE
),equal_explicit_domain
)(
155 __isl_keep
MULTI(BASE
) *multi1
, __isl_keep
MULTI(BASE
) *multi2
)
157 return isl_bool_true
;
160 static isl_stat
FN(MULTI(BASE
),check_explicit_domain
)(
161 __isl_keep
MULTI(BASE
) *multi
) __attribute__ ((unused
));
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.
168 static isl_stat
FN(MULTI(BASE
),check_explicit_domain
)(
169 __isl_keep
MULTI(BASE
) *multi
)