Tensor Comprehensions
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
islpp-inl.h
Go to the documentation of this file.
1 
16 #include "tc/external/isl.h"
17 
18 namespace isl {
19 
21 // Operations on isl::aff to perform arithmetic and create/combine with sets
23 inline isl::aff operator*(int i, isl::aff A) {
24  isl::val V(isl::val(A.get_ctx(), i));
25  return A * V;
26 }
27 
28 inline isl::aff operator*(isl::aff A, int i) {
29  return i * A;
30 }
31 
32 inline isl::aff operator*(isl::val V, isl::aff A) {
33  isl::aff AV(A.get_local_space().domain(), V);
34  return A.mul(AV);
35 }
36 
37 inline isl::aff operator*(isl::aff A, isl::val V) {
38  return V * A;
39 }
40 
41 inline isl::aff operator/(isl::aff A, int i) {
42  isl::ctx ctx = A.get_ctx();
43  isl::aff T(isl::local_space(A.get_space().domain()), isl::val(ctx, i));
44  return A.div(T);
45 }
46 
47 inline isl::aff operator+(int i, isl::aff A) {
48  isl::ctx ctx = A.get_ctx();
49  return A + isl::val(ctx, i);
50 }
51 
52 inline isl::aff operator+(isl::aff A, isl::val v) {
53  isl::aff T(isl::local_space(A.get_space().domain()), v);
54  return A.add(T);
55 }
56 
57 inline isl::aff operator+(isl::val v, isl::aff A) {
58  return A + v;
59 }
60 
61 inline isl::aff operator+(isl::aff A, isl::aff B) {
62  return A.add(B);
63 }
64 
65 inline isl::aff operator+(isl::aff A, int i) {
66  return i + A;
67 }
68 
69 inline isl::aff operator-(isl::aff A, int i) {
70  return A + (-i);
71 }
72 
73 inline isl::aff operator-(int i, isl::aff A) {
74  return (A + (-i)).neg();
75 }
76 
77 inline isl::set operator>=(isl::aff_set A, isl::val v) {
78  auto T = isl::aff(isl::local_space(A.aff.get_space().domain()), v);
79  return A.aff.ge_set(T);
80 }
81 
82 inline isl::set operator>=(isl::aff_set A, int i) {
83  auto ctx = A.aff.get_ctx();
84  return A >= isl::val(ctx, i);
85 }
86 
87 inline isl::set operator>=(int i, isl::aff_set A) {
88  return A.aff.neg() >= -i;
89 }
90 
91 inline isl::set operator>=(isl::aff_set A, isl::aff B) {
92  return A.aff.ge_set(B);
93 }
94 
95 inline isl::set operator>=(isl::aff A, isl::aff_set B) {
96  return A.ge_set(B.aff);
97 }
98 
99 inline isl::set operator>(isl::aff_set A, int i) {
100  return A >= (i + 1);
101 }
102 
103 inline isl::set operator>(int i, isl::aff_set A) {
104  return (i - 1) >= A;
105 }
106 
107 inline isl::set operator>(isl::aff_set A, isl::aff B) {
108  return A >= (B + 1);
109 }
110 
111 inline isl::set operator>(isl::aff A, isl::aff_set B) {
112  return (A - 1) >= B;
113 }
114 
115 inline isl::set operator<=(isl::aff_set A, int i) {
116  return A.aff.neg() >= -i;
117 }
118 
119 inline isl::set operator<=(isl::aff_set A, isl::val v) {
120  return A.aff.neg() >= v.neg();
121 }
122 
123 inline isl::set operator<=(int i, isl::aff_set A) {
124  return A >= i;
125 }
126 
127 inline isl::set operator<=(isl::aff_set A, isl::aff B) {
128  return A.aff.le_set(B);
129 }
130 
131 inline isl::set operator<=(isl::aff A, isl::aff_set B) {
132  return A.le_set(B.aff);
133 }
134 
135 inline isl::set operator<(isl::aff_set A, int i) {
136  return A <= i - 1;
137 }
138 
139 inline isl::set operator<(int i, isl::aff_set A) {
140  return i + 1 <= A;
141 }
142 
143 inline isl::set operator<(isl::aff_set A, isl::val v) {
144  return A <= v - 1;
145 }
146 
147 inline isl::set operator<(isl::aff_set A, isl::aff B) {
148  return A <= B - 1;
149 }
150 
151 inline isl::set operator<(isl::aff A, isl::aff_set B) {
152  return A + 1 <= B;
153 }
154 
155 inline isl::set operator==(isl::aff_set A, int i) {
156  return (A <= i) & (A >= i);
157 }
158 
159 inline isl::set operator==(int i, isl::aff_set A) {
160  return A == i;
161 }
162 
163 inline isl::set operator==(isl::aff_set A, isl::aff B) {
164  return (A <= B) & (A >= B);
165 }
166 
167 inline isl::set operator==(isl::aff A, isl::aff_set B) {
168  return (A <= B) & (A >= B);
169 }
170 
171 inline isl::map operator>=(isl::aff_map A, isl::aff B) {
172  return A > B - 1;
173 }
174 
175 inline isl::map operator>(isl::aff_map A, isl::aff B) {
176  auto pwA = isl::pw_aff(A.aff);
177  auto pwB = isl::pw_aff(B);
178  return pwA.gt_map(pwB);
179 }
180 
181 inline isl::map operator<(isl::aff_map A, isl::aff B) {
182  auto pwA = isl::pw_aff(A.aff);
183  auto pwB = isl::pw_aff(B);
184  return pwA.lt_map(pwB);
185 }
186 
187 inline isl::map operator<=(isl::aff_map A, isl::aff B) {
188  return A < B + 1;
189 }
190 
192 // Operations on isl::set and isl::union_set
194 inline isl::set operator&(isl::set S1, isl::set S2) {
195  return S1.intersect(S2);
196 }
197 
198 inline isl::union_set operator&(isl::union_set S1, isl::set S2) {
199  return S1.intersect(isl::union_set(S2));
200 }
201 
202 inline isl::union_set operator&(isl::set S1, isl::union_set S2) {
203  return S2 & S1;
204 }
205 
206 inline isl::union_set operator&(isl::union_set S1, isl::union_set S2) {
207  return S1.intersect(S2);
208 }
209 
211 // Operations on isl::set and isl::point
213 inline isl::set operator&(isl::set S1, isl::point P2) {
214  return S1.intersect(isl::set(P2));
215 }
216 
217 inline isl::set operator&(isl::point P1, isl::set S2) {
218  return S2 & P1;
219 }
220 
221 } // namespace isl
isl::aff aff
Definition: islpp.h:170
isl::set operator==(isl::aff_set A, int i)
Definition: islpp-inl.h:155
isl::set operator<=(isl::aff_set A, int i)
Definition: islpp-inl.h:115
isl::aff operator+(int i, isl::aff A)
Definition: islpp-inl.h:47
isl::set operator<(isl::aff_set A, int i)
Definition: islpp-inl.h:135
isl::aff operator-(isl::aff A, int i)
Definition: islpp-inl.h:69
isl::set operator&(isl::set S1, isl::set S2)
Definition: islpp-inl.h:194
isl::aff aff
Definition: islpp.h:137
isl::set operator>=(isl::aff_set A, isl::val v)
Definition: islpp-inl.h:77
isl::aff operator/(isl::aff A, int i)
Definition: islpp-inl.h:41
isl::aff operator*(int i, isl::aff A)
Definition: islpp-inl.h:23
isl::set operator>(isl::aff_set A, int i)
Definition: islpp-inl.h:99
Definition: islpp.h:169
Definition: islpp.h:136