Lines Matching refs:UNION
23 * Each UNION has its own groups, so there can only ever be a single
26 S(UNION,group) {
31 /* A union of expressions defined over different disjoint domains.
37 struct UNION {
47 S(UNION,foreach_group_data)
49 isl_stat (*fn)(__isl_keep S(UNION,group) *group, void *user);
55 static isl_stat FN(UNION,call_on_group)(void **entry, void *user)
57 S(UNION,group) *group = *entry;
58 S(UNION,foreach_group_data) *data;
60 data = (S(UNION,foreach_group_data) *) user;
66 static isl_stat FN(UNION,foreach_group)(__isl_keep UNION *u,
67 isl_stat (*fn)(__isl_keep S(UNION,group) *group, void *user),
70 S(UNION,foreach_group_data) data = { fn, user };
76 &FN(UNION,call_on_group), &data);
80 * of expressions in a UNION. Add the number of expressions in "group"
83 static isl_stat FN(UNION,count_part)(__isl_keep S(UNION,group) *group,
97 isl_size FN(FN(UNION,n),BASE)(__isl_keep UNION *u)
102 if (FN(UNION,foreach_group)(u, &FN(UNION,count_part), &n) < 0)
110 static isl_stat FN(UNION,free_group_entry)(void **entry, void *user)
120 static __isl_null S(UNION,group) *FN(UNION,group_free)(
121 __isl_take S(UNION,group) *group)
130 &FN(UNION,free_group_entry), NULL);
140 static __isl_give S(UNION,group) *FN(UNION,group_alloc)(
144 S(UNION,group) *group;
149 group = isl_calloc_type(ctx, S(UNION,group));
154 return FN(UNION,group_free)(group);
164 static isl_bool FN(UNION,has_space_tuples)(const void *entry, const void *val)
177 static __isl_give S(UNION,group) *FN(UNION,group_cow)(
178 __isl_take S(UNION,group) *group)
183 S(UNION,foreach_data)
189 static isl_stat FN(UNION,call_on_copy)(void **entry, void *user)
192 S(UNION,foreach_data) *data = (S(UNION,foreach_data) *) user;
202 static isl_stat FN(UNION,group_call_on_copy)(__isl_keep S(UNION,group) *group,
212 &FN(UNION,call_on_copy), user);
215 isl_stat FN(FN(UNION,foreach),BASE)(__isl_keep UNION *u,
218 S(UNION,foreach_data) data = { fn, user };
223 return FN(UNION,foreach_group)(u, &FN(UNION,group_call_on_copy), &data);
229 static isl_bool FN(UNION,group_has_same_domain_space_tuples)(const void *entry,
232 S(UNION,group) *group = (S(UNION,group) *) entry;
248 static struct isl_hash_table_entry *FN(UNION,find_part_entry)(
249 __isl_keep UNION *u, __isl_keep isl_space *space, int reserve)
254 S(UNION,group) *group;
259 ctx = FN(UNION,get_ctx)(u);
262 &FN(UNION,group_has_same_domain_space_tuples), space, reserve);
267 group = FN(UNION,group_alloc)(domain, 1);
272 group = FN(UNION,group_cow)(group);
278 &FN(UNION,has_space_tuples), space, reserve);
287 static __isl_give UNION *FN(UNION,remove_part_entry)(__isl_take UNION *u,
295 S(UNION,group) *group;
298 return FN(UNION,free)(u);
301 ctx = FN(UNION,get_ctx)(u);
305 &FN(UNION,group_has_same_domain_space_tuples), space, 0);
307 return FN(UNION,free)(u);
310 return FN(UNION,free)(u));
319 FN(UNION,group_free)(group);
326 static isl_bool FN(UNION,disjoint_domain)(__isl_keep PART *part1,
346 static isl_stat FN(UNION,check_disjoint_domain_entry)(void **entry, void *user)
359 disjoint = FN(UNION,disjoint_domain)(part, other);
376 static isl_stat FN(UNION,check_disjoint_domain_other)(__isl_keep UNION *u,
383 S(UNION,group) *group;
387 ctx = FN(UNION,get_ctx)(u);
391 &FN(UNION,group_has_same_domain_space_tuples), space, 0);
398 &FN(UNION,check_disjoint_domain_entry), part);
402 * This check is performed before "part2" is added to a UNION to ensure
403 * that the UNION expression remains a function.
405 static isl_stat FN(UNION,check_disjoint_domain)(__isl_keep PART *part1,
410 disjoint = FN(UNION,disjoint_domain)(part1, part2);
423 S(UNION,foreach_inplace_data)
432 static isl_stat FN(UNION,group_call_inplace)(__isl_keep S(UNION,group) *group,
436 S(UNION,foreach_inplace_data) *data;
441 data = (S(UNION,foreach_inplace_data) *) user;
449 static isl_stat FN(UNION,foreach_inplace)(__isl_keep UNION *u,
452 S(UNION,foreach_inplace_data) data = { fn, user };
454 return FN(UNION,foreach_group)(u, &FN(UNION,group_call_inplace), &data);
457 static isl_stat FN(UNION,free_u_entry)(void **entry, void *user)
459 S(UNION,group) *group = *entry;
460 FN(UNION,group_free)(group);
466 isl_bool FN(UNION,plain_is_empty)(__isl_take UNION *u)
476 static isl_stat FN(UNION,group_single_space)(__isl_keep S(UNION,group) *group,
487 /* Can this union expression be converted to a single base expression?
492 isl_bool FN(FN(UNION,isa),BASE)(__isl_take UNION *u)
500 if (FN(UNION,foreach_group)(u,
501 &FN(UNION,group_single_space), &single) < 0)
507 * on a union expression with a single base expression.
512 static isl_stat FN(UNION,extract_part)(void **entry, void *user)
526 /* Convert the union expression to its single base expression.
528 __isl_give PART *FN(FN(UNION,as),BASE)(__isl_take UNION *u)
533 has_single_space = FN(FN(UNION,isa),BASE)(u);
537 isl_die(FN(UNION,get_ctx)(u), isl_error_invalid,
540 if (FN(UNION,foreach_inplace)(u, &FN(UNION,extract_part), &part) < 0)
542 FN(UNION,free)(u);
545 FN(UNION,free)(u);