1 /*
2  * Copyright 2013      Ecole Normale Superieure
3  *
4  * Use of this software is governed by the MIT license
5  *
6  * Written by Sven Verdoolaege,
7  * Ecole Normale Superieure, 45 rue d'Ulm, 75230 Paris, France
8  */
9 
10 #include <isl/space.h>
11 #include <isl/local_space.h>
12 #include <isl_reordering.h>
13 
14 #include <isl_multi_macro.h>
15 
16 /* The functions in this file are meant for base object types
17  * that do not have any associated space.  They are only meant to be used
18  * in the generic isl_multi_* functions which have to deal with base objects
19  * that do have an associated space.
20  */
21 
22 
23 /* Drop the "n" first dimensions of type "type" at position "first".
24  *
25  * For a base expression without an associated space, this function
26  * does not do anything.
27  */
FN(EL,drop_dims)28 static __isl_give EL *FN(EL,drop_dims)(__isl_take EL *el,
29 	enum isl_dim_type type, unsigned first, unsigned n)
30 {
31 	return el;
32 }
33 
34 /* Return the space of "el".
35  *
36  * For a base expression without an associated space,
37  * the conditions surrounding the call to this function make sure
38  * that this function will never actually get called.  We return a valid
39  * space anyway, just in case.
40  */
FN(EL,get_space)41 static __isl_give isl_space *FN(EL,get_space)(__isl_keep EL *el)
42 {
43 	if (!el)
44 		return NULL;
45 
46 	return isl_space_params_alloc(FN(EL,get_ctx)(el), 0);
47 }
48 
49 /* Reset the domain space of "el" to "space".
50  *
51  * For a base expression without an associated space, this function
52  * does not do anything, apart from error handling and cleaning up memory.
53  */
FN(EL,reset_domain_space)54 static __isl_give EL *FN(EL,reset_domain_space)(__isl_take EL *el,
55 	__isl_take isl_space *space)
56 {
57 	if (!space)
58 		return FN(EL,free)(el);
59 	isl_space_free(space);
60 	return el;
61 }
62 
63 /* Align the parameters of "el" to those of "space".
64  *
65  * For a base expression without an associated space, this function
66  * does not do anything, apart from error handling and cleaning up memory.
67  * Note that the conditions surrounding the call to this function make sure
68  * that this function will never actually get called.
69  */
FN(EL,align_params)70 static __isl_give EL *FN(EL,align_params)(__isl_take EL *el,
71 	__isl_take isl_space *space)
72 {
73 	if (!space)
74 		return FN(EL,free)(el);
75 	isl_space_free(space);
76 	return el;
77 }
78 
79 /* Reorder the dimensions of the domain of "el" according
80  * to the given reordering.
81  *
82  * For a base expression without an associated space, this function
83  * does not do anything, apart from error handling and cleaning up memory.
84  */
FN(EL,realign_domain)85 static __isl_give EL *FN(EL,realign_domain)(__isl_take EL *el,
86 	__isl_take isl_reordering *r)
87 {
88 	if (!r)
89 		return FN(EL,free)(el);
90 	isl_reordering_free(r);
91 	return el;
92 }
93 
94 /* Do the parameters of "el" match those of "space"?
95  *
96  * For a base expression without an associated space, this function
97  * simply returns true, except if "el" or "space" are NULL.
98  */
FN(EL,matching_params)99 static isl_bool FN(EL,matching_params)(__isl_keep EL *el,
100 	__isl_keep isl_space *space)
101 {
102 	if (!el || !space)
103 		return isl_bool_error;
104 	return isl_bool_true;
105 }
106 
107 /* Check that the domain space of "el" matches "space".
108  *
109  * For a base expression without an associated space, this function
110  * simply returns isl_stat_ok, except if "el" or "space" are NULL.
111  */
FN(EL,check_match_domain_space)112 static isl_stat FN(EL,check_match_domain_space)(__isl_keep EL *el,
113 	__isl_keep isl_space *space)
114 {
115 	if (!el || !space)
116 		return isl_stat_error;
117 	return isl_stat_ok;
118 }
119