93 if (!source_restr || !sink_restr)
102 restr->
source = source_restr;
103 restr->
sink = sink_restr;
130 restr->
source = source_restr;
256 for (i = 0; i < acc->n_must + acc->n_may; ++i)
273 acc->restrict_user =
user;
285 int must,
void *source_user)
292 isl_assert(ctx, acc->n_must + acc->n_may < acc->max_source,
goto error);
296 acc->source[acc->n_must + acc->n_may] =
297 acc->source[acc->n_must];
298 acc->source[acc->n_must].map =
source;
299 acc->source[acc->n_must].
data = source_user;
300 acc->source[acc->n_must].must = 1;
303 acc->source[acc->n_must + acc->n_may].map =
source;
304 acc->source[acc->n_must + acc->n_may].
data = source_user;
305 acc->source[acc->n_must + acc->n_may].must = 0;
344 if (sort_info->
error)
367 return h1 > h2 ? 1 : h1 < h2 ? -1 : 0;
369 sort_info->
error = 1;
385 if (acc->n_must <= 1)
406 if (equal_params < 0)
444 n = 2 * acc->n_must + acc->n_may;
450 for (i = 0; i < acc->n_must; ++i) {
457 dep->dep[2 * i].
data = acc->source[i].data;
458 dep->dep[2 * i + 1].
data = acc->source[i].data;
464 for (i = acc->n_must; i < acc->n_must + acc->n_may; ++i) {
470 dep->dep[acc->n_must + i].
data = acc->source[i].data;
471 dep->dep[acc->n_must + i].
must = 0;
472 if (!
dep->dep[acc->n_must + i].
map)
498 for (i = 0; i < deps->n_source; ++i) {
502 deps->dep[i].data,
user) < 0)
531 for (i = 0; i < deps->n_source; ++i)
590 if (!acc->restrict_fn)
598 restr = acc->restrict_fn(source_map, sink_domain,
599 acc->source[source].data, acc->restrict_user);
638 int j,
int level,
struct isl_set **empty)
666 int j,
int before_level,
667 int k,
int after_level,
709 if (shared_level < target_level)
711 if ((target_level % 2) && shared_level > target_level)
732 struct isl_map **temp_rel,
int j,
int sink_level)
736 int depth = 2 * n_in + 1;
743 for (k = j - 1; k >= 0; --k) {
745 plevel = acc->level_before(acc->source[k].data, acc->sink.data);
751 plevel2 = acc->level_before(acc->source[j].data,
752 acc->source[k].data);
756 for (level = sink_level; level <= depth; ++level) {
793 write_map =
isl_map_copy(acc->source[acc->n_must + j].map);
810 int j,
int before_level,
int k,
int after_level)
823 write_map =
isl_map_copy(acc->source[acc->n_must + j].map);
828 acc->source[acc->n_must + j].map),
849 int j,
int sink_level)
854 int depth = 2 * n_in + 1;
858 for (k = 0; k < acc->n_must; ++k) {
865 plevel = acc->level_before(acc->source[k].data,
866 acc->source[acc->n_must + j].data);
870 for (level = sink_level; level <= depth; ++level) {
991 if (!acc->coscheduled)
993 for (i = acc->n_must - 1; i >= 0; --i) {
999 for (j = i - 1; j >= 0; --j) {
1004 coscheduled = acc->coscheduled(acc->source[i].data,
1005 acc->source[j].data);
1012 depth = acc->level_before(acc->source[i].data,
1013 acc->source[j].data) / 2;
1020 for (j = 0; j < acc->n_may; ++j) {
1025 pos = acc->n_must + j;
1026 coscheduled = acc->coscheduled(acc->source[i].data,
1027 acc->source[
pos].data);
1034 depth = acc->level_before(acc->source[i].data,
1035 acc->source[
pos].data) / 2;
1038 pos = 2 * acc->n_must + j;
1071 for (i = 0; i < acc->n_may; ++i) {
1078 plevel = acc->level_before(acc->source[i].data, acc->sink.data);
1082 is_before = plevel & 1;
1099 res->must_no_source = mustdo;
1173 depth = 2 * n_in + 1;
1176 if (!mustdo || !maydo)
1183 if (!must_rel || !may_rel)
1186 for (level = depth; level >= 1; --level) {
1187 for (j = acc->n_must-1; j >=0; --j) {
1194 for (j = acc->n_must - 1; j >= 0; --j) {
1199 plevel = acc->level_before(acc->source[j].data,
1224 for (j = j - 1; j >= 0; --j) {
1227 plevel = acc->level_before(acc->source[j].data,
1244 for (j = 0; j < acc->n_may; ++j) {
1249 plevel = acc->level_before(acc->source[acc->n_must + j].data,
1257 res->dep[2 * acc->n_must + j].map =
1261 res->dep[2 * acc->n_must + j].map =
1266 T =
res->dep[2 * acc->n_must + j].map;
1269 res->dep[2 * acc->n_must + j].map = T;
1272 for (j = acc->n_must - 1; j >= 0; --j) {
1273 res->dep[2 * j].map =
1276 res->dep[2 * j + 1].map =
1289 res->must_no_source = mustdo;
1290 res->may_no_source = maydo;
1294 for (j = 0; j < acc->n_must; ++j)
1297 for (j = 0; j < acc->n_must; ++j)
1336 if (acc->n_must == 0)
1345 if (!
res->must_no_source || !
res->may_no_source)
1384 for (j = 0; j <
res->n_source; ++j) {
1386 if (!
res->dep[j].map)
1451 for (i = 0; i <
n; ++i) {
1571 if (!info->access[i])
1574 if (!info->schedule && !info->schedule_map)
1579 if (!info->access[i])
1581 if (!info->schedule && !info->schedule_map)
1615 if (!info || !access)
1619 info->access[
type] = access;
1731 if (!access || !schedule_map)
1736 access->schedule_map = schedule_map;
1758 if (access->schedule)
1769#define BASE union_map
1835 if (access->schedule) {
1841 p = print_yaml_field_union_map(
p,
1871#define KEY enum isl_ai_key
1873#define KEY_ERROR isl_ai_key_error
1875#define KEY_END isl_ai_key_end
1877#define KEY_STR key_str
1879#define KEY_EXTRACT extract_key
1881#define KEY_GET get_key
1885#define BASE union_map
1904 int schedule_set = 0;
1930 access = read_union_map(s);
1937 schedule_map = read_union_map(s);
1964 if (!schedule_set) {
2006 if (access->schedule_map)
2013 if (!access->schedule_map) {
2016 access->schedule_map =
2018 if (!access->schedule_map)
2023 if (!access->access[i])
2067 access->schedule_map = sm;
2070 if (!access->access[i])
2072 if (!access->schedule_map)
2125 fprintf(stderr,
"must dependences: ");
2127 fprintf(stderr,
"may dependences: ");
2129 fprintf(stderr,
"must no source: ");
2131 fprintf(stderr,
"may no source: ");
2251 flow->may_no_source = empty;
2253 if (!
flow->must_dep || !
flow->may_dep ||
2254 !
flow->must_no_source || !
flow->may_no_source)
2323 flow->must_no_source =
2325 flow->may_no_source =
2328 if (!
flow->must_dep || !
flow->may_dep ||
2329 !
flow->must_no_source || !
flow->may_no_source)
2428 if (n1 < 0 || n2 < 0)
2434 for (i = 0; i < n1; ++i) {
2446 r = 2 * i + (
cmp < 0);
2469 if (n1 < 0 || n2 < 0)
2475 for (i = 0; i < n1; ++i) {
2551 for (i = 0; i <
flow->n_source; ++i) {
2554 if (
flow->dep[i].must)
2564 for (i = 0; i < data->
count; ++i)
2576 for (i = 0; i < data->
count; ++i)
2635 flow->may_dep, may);
2639 if (!
flow->must_dep || !
flow->may_dep)
2771 for (i = 1; i < data->
n_sink; ++i)
2774 for (i = 0; i < data->
n_source; ++i)
2778 for (i = 0; i < data->
n_sink; ++i)
2782 for (i = 0; i < data->
n_source; ++i)
2801 for (i = 0; i < data->
n_sink; ++i) {
2806 for (i = 0; i < data->
n_source; ++i) {
2991 if (pos1 < 0 || pos2 < 0) {
3000 return 2 * depth +
before;
3027 for (i = 0; i < data->
n_source; ++i) {
3032 source = &data->
source[i];
3101 for (i = 0; i <
flow->n_source; ++i) {
3107 if (
flow->dep[i].must)
3158 if (
n && !data.
sink)
3173 for (i = 0; i < data.
n_sink; ++i)
3251 p = print_yaml_field_union_map(
p,
"must_dependence", umap);
3254 p = print_yaml_field_union_map(
p,
"may_dependence", umap);
3256 p = print_yaml_field_union_map(
p,
"must_no_source",
3257 flow->must_no_source);
3259 p = print_yaml_field_union_map(
p,
"may_no_source", umap);
3330 if ((must_dep && !*must_dep) || (may_dep && !*may_dep) ||
3331 (must_no_source && !*must_no_source) ||
3332 (may_no_source && !*may_no_source))
polly print import Polly Print Scop import result
#define isl_calloc_type(ctx, type)
#define isl_assert(ctx, test, code)
isl_bool isl_bool_ok(int b)
#define isl_alloc_array(ctx, type, n)
#define isl_calloc_array(ctx, type, n)
#define isl_calloc(ctx, type, size)
#define isl_alloc_type(ctx, type)
isl_bool isl_bool_not(isl_bool b)
__isl_give isl_restriction *(* isl_access_restrict)(__isl_keep isl_map *source_map, __isl_keep isl_set *sink, void *source_user, void *user)
int(* isl_access_level_before)(void *first, void *second)
isl_bool __isl_keep ISL_KEY * key
isl_stat isl_stat(* fn)(__isl_take ISL_KEY *key, __isl_take ISL_VAL *val, void *user)
isl_stat isl_stat(*) void user)
int GMPQAPI() cmp(mp_rat op1, mp_rat op2)
@ isl_ai_key_schedule_map
isl_stat isl_flow_foreach(__isl_keep isl_flow *deps, isl_stat(*fn)(__isl_take isl_map *dep, int must, void *dep_user, void *user), void *user)
static __isl_give isl_union_flow * isl_union_flow_alloc(__isl_take isl_space *space)
__isl_null isl_union_flow * isl_union_flow_free(__isl_take isl_union_flow *flow)
__isl_give isl_flow * isl_access_info_compute_flow(__isl_take isl_access_info *acc)
static int before(void *first, void *second)
static __isl_give isl_map * after_at_level(__isl_take isl_space *space, int level)
__isl_give isl_map * isl_flow_get_no_source(__isl_keep isl_flow *deps, int must)
__isl_give isl_union_access_info * isl_union_access_info_set_schedule_map(__isl_take isl_union_access_info *access, __isl_take isl_union_map *schedule_map)
static isl_bool coscheduled(void *first, void *second)
__isl_null isl_union_access_info * isl_union_access_info_free(__isl_take isl_union_access_info *access)
__isl_give isl_union_access_info * isl_union_access_info_set_must_source(__isl_take isl_union_access_info *access, __isl_take isl_union_map *must_source)
static isl_bool count_sink_source(__isl_keep isl_schedule_node *node, void *user)
isl_ctx * isl_union_access_info_get_ctx(__isl_keep isl_union_access_info *access)
static __isl_give isl_union_access_info * isl_union_access_info_add_kill_to_must_source(__isl_take isl_union_access_info *info)
__isl_give isl_restriction * isl_restriction_output(__isl_take isl_set *source_restr)
__isl_give isl_union_map * isl_union_flow_get_must_no_source(__isl_keep isl_union_flow *flow)
__isl_give isl_union_map * isl_union_flow_get_may_dependence(__isl_keep isl_union_flow *flow)
static __isl_give isl_map * all_sources(__isl_keep isl_access_info *acc, __isl_take isl_set *set_C, int j, int level)
static __isl_give isl_space * space_align_and_join(__isl_take isl_space *left, __isl_take isl_space *right)
__isl_give char * isl_union_access_info_to_str(__isl_keep isl_union_access_info *access)
__isl_null isl_restriction * isl_restriction_free(__isl_take isl_restriction *restr)
__isl_give isl_restriction * isl_restriction_input(__isl_take isl_set *source_restr, __isl_take isl_set *sink_restr)
static __isl_give isl_flow * compute_mem_based_dependences(__isl_keep isl_access_info *acc)
static isl_bool isl_union_access_has_kill(__isl_keep isl_union_access_info *info)
__isl_give isl_printer * isl_printer_print_union_flow(__isl_take isl_printer *p, __isl_keep isl_union_flow *flow)
static isl_stat intermediate_sources(__isl_keep isl_access_info *acc, struct isl_map **temp_rel, int j, int sink_level)
__isl_give isl_restriction * isl_restriction_empty(__isl_take isl_map *source_map)
static struct isl_map * last_source(struct isl_access_info *acc, struct isl_set *set_C, int j, int level, struct isl_set **empty)
__isl_give isl_union_flow * isl_union_flow_copy(__isl_keep isl_union_flow *flow)
static int can_precede_at_level(int shared_level, int target_level)
static isl_stat count_matching_array(__isl_take isl_map *map, void *user)
static __isl_give isl_union_flow * isl_union_flow_drop_schedule(__isl_take isl_union_flow *flow)
static __isl_give isl_map * all_intermediate_sources(__isl_keep isl_access_info *acc, __isl_take isl_map *map, struct isl_map **must_rel, struct isl_map **may_rel, int j, int sink_level)
isl_ctx * isl_restriction_get_ctx(__isl_keep isl_restriction *restr)
@ isl_restriction_type_output
@ isl_restriction_type_input
@ isl_restriction_type_none
@ isl_restriction_type_empty
__isl_give isl_union_access_info * isl_union_access_info_copy(__isl_keep isl_union_access_info *access)
__isl_give isl_union_map * isl_union_flow_get_must_dependence(__isl_keep isl_union_flow *flow)
static __isl_give isl_flow * handle_coscheduled(__isl_keep isl_access_info *acc, __isl_keep isl_map **must_rel, __isl_keep isl_map **may_rel, __isl_take isl_flow *flow)
static void isl_compute_flow_schedule_data_align_params(struct isl_compute_flow_schedule_data *data)
static __isl_give isl_map * restricted_partial_lexmax(__isl_keep isl_access_info *acc, __isl_take isl_map *dep, int source, __isl_take isl_set *sink, __isl_give isl_set **empty)
static __isl_give isl_access_info * isl_access_info_sort_sources(__isl_take isl_access_info *acc)
__isl_give isl_printer * isl_printer_print_union_access_info(__isl_take isl_printer *p, __isl_keep isl_union_access_info *access)
static __isl_give isl_union_map * isl_union_access_info_get(__isl_keep isl_union_access_info *info, enum isl_access_type type)
__isl_give isl_union_map * isl_union_flow_get_full_must_dependence(__isl_keep isl_union_flow *flow)
__isl_give char * isl_union_flow_to_str(__isl_keep isl_union_flow *flow)
static __isl_give isl_restriction * isl_restriction_alloc(__isl_take isl_map *source_map, enum isl_restriction_type type)
static __isl_give isl_map * coscheduled_source(__isl_keep isl_access_info *acc, __isl_keep isl_map *old_map, int pos, int depth)
static isl_bool collect_sink_source(__isl_keep isl_schedule_node *node, void *user)
__isl_give isl_union_access_info * isl_union_access_info_set_kill(__isl_take isl_union_access_info *info, __isl_take isl_union_map *kill)
isl_bool(* isl_access_coscheduled)(void *first, void *second)
__isl_give isl_union_access_info * isl_union_access_info_set_may_source(__isl_take isl_union_access_info *access, __isl_take isl_union_map *may_source)
static isl_stat collect_matching_array(__isl_take isl_map *map, void *user)
static __isl_give isl_union_flow * compute_flow_union_map(__isl_take isl_union_access_info *access)
__isl_null isl_access_info * isl_access_info_free(__isl_take isl_access_info *acc)
static isl_bool coscheduled_node(void *first, void *second)
static void sched_info_free(__isl_take struct isl_sched_info *info)
static __isl_give isl_union_map * isl_union_flow_get_non_must_no_source(__isl_keep isl_union_flow *flow)
static __isl_give isl_union_access_info * isl_union_access_info_init(__isl_take isl_union_access_info *info)
int isl_union_map_compute_flow(__isl_take isl_union_map *sink, __isl_take isl_union_map *must_source, __isl_take isl_union_map *may_source, __isl_take isl_union_map *schedule, __isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep, __isl_give isl_union_map **must_no_source, __isl_give isl_union_map **may_no_source)
static int before_node(void *first, void *second)
static __isl_give isl_union_access_info * isl_union_access_info_alloc(isl_ctx *ctx)
static __isl_give isl_flow * access_info_compute_flow_core(__isl_take isl_access_info *acc)
__isl_give isl_access_info * isl_access_info_set_restrict(__isl_take isl_access_info *acc, isl_access_restrict fn, void *user)
static void isl_compute_flow_schedule_data_clear(struct isl_compute_flow_schedule_data *data)
static __isl_give isl_access_info * add_matching_sources(__isl_take isl_access_info *access, struct isl_scheduled_access *sink, struct isl_compute_flow_schedule_data *data)
__isl_give isl_union_access_info * isl_stream_read_union_access_info(isl_stream *s)
static __isl_give isl_union_access_info * isl_union_access_info_normalize(__isl_take isl_union_access_info *access)
__isl_give isl_access_info * isl_access_info_add_source(__isl_take isl_access_info *acc, __isl_take isl_map *source, int must, void *source_user)
__isl_give isl_union_map * isl_union_access_info_get_may_source(__isl_keep isl_union_access_info *info)
__isl_give isl_restriction * isl_restriction_none(__isl_take isl_map *source_map)
static __isl_give isl_union_access_info * isl_union_access_info_set(__isl_take isl_union_access_info *info, enum isl_access_type type, __isl_take isl_union_map *access)
__isl_give isl_union_access_info * isl_union_access_info_from_sink(__isl_take isl_union_map *sink)
__isl_give isl_access_info * isl_access_info_alloc(__isl_take isl_map *sink, void *sink_user, isl_access_level_before fn, int max_source)
static __isl_give isl_map * all_later_sources(__isl_keep isl_access_info *acc, __isl_take isl_map *old_map, int j, int before_level, int k, int after_level)
static __isl_give isl_union_access_info * isl_union_access_info_align_params(__isl_take isl_union_access_info *access)
static struct isl_map * last_later_source(struct isl_access_info *acc, struct isl_map *old_map, int j, int before_level, int k, int after_level, struct isl_set **empty)
static __isl_give isl_flow * compute_val_based_dependences(__isl_keep isl_access_info *acc)
__isl_give isl_union_flow * isl_union_access_info_compute_flow(__isl_take isl_union_access_info *access)
static __isl_give isl_union_access_info * isl_union_access_info_introduce_schedule(__isl_take isl_union_access_info *access)
static __isl_give isl_union_map * isl_union_flow_get_non_must_dependence(__isl_keep isl_union_flow *flow)
static isl_stat extract_sink_source(__isl_take isl_map *map, void *user)
void isl_union_flow_dump(__isl_keep isl_union_flow *flow)
__isl_give isl_union_map * isl_union_access_info_get_kill(__isl_keep isl_union_access_info *info)
static isl_stat compute_flow(__isl_take isl_map *map, void *user)
__isl_give isl_union_map * isl_union_flow_get_full_may_dependence(__isl_keep isl_union_flow *flow)
static __isl_give isl_printer * print_access_field(__isl_take isl_printer *p, __isl_keep isl_union_access_info *info, enum isl_access_type type)
static __isl_give isl_flow * isl_flow_alloc(__isl_keep isl_access_info *acc)
static int access_sort_cmp(const void *p1, const void *p2, void *user)
static __isl_give isl_union_flow * isl_union_flow_drop_kill_source(__isl_take isl_union_flow *flow, __isl_take isl_union_map *must, __isl_take isl_union_map *may)
static __isl_give struct isl_sched_info * sched_info_alloc(__isl_keep isl_map *map)
isl_ctx * isl_union_flow_get_ctx(__isl_keep isl_union_flow *flow)
isl_ctx * isl_access_info_get_ctx(__isl_keep isl_access_info *acc)
isl_ctx * isl_flow_get_ctx(__isl_keep isl_flow *deps)
static __isl_give isl_union_flow * compute_flow_schedule(__isl_take isl_union_access_info *access)
__isl_null isl_flow * isl_flow_free(__isl_take isl_flow *deps)
__isl_give isl_union_access_info * isl_union_access_info_read_from_file(isl_ctx *ctx, FILE *input)
__isl_give isl_union_map * isl_union_access_info_get_must_source(__isl_keep isl_union_access_info *info)
__isl_give isl_union_map * isl_union_flow_get_may_no_source(__isl_keep isl_union_flow *flow)
static __isl_give isl_union_flow * compute_single_flow(__isl_take isl_union_flow *uf, struct isl_scheduled_access *sink, struct isl_compute_flow_schedule_data *data)
__isl_give isl_union_access_info * isl_union_access_info_set_schedule(__isl_take isl_union_access_info *access, __isl_take isl_schedule *schedule)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
enum isl_schedule_node_type isl_schedule_node_get_type(__isl_keep isl_schedule_node *node)
int isl_sort(void *const pbase, size_t total_elems, size_t size, int(*cmp)(const void *, const void *, void *arg), void *arg)
__isl_export __isl_give isl_map * isl_map_domain_product(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export __isl_give isl_map * isl_map_intersect_range(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_map_domain(__isl_take isl_map *bmap)
__isl_export __isl_give isl_map * isl_map_union(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_give isl_basic_map * isl_basic_map_equal(__isl_take isl_space *space, unsigned n_equal)
__isl_export __isl_give isl_map * isl_map_apply_domain(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export __isl_give isl_map * isl_map_subtract(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_give isl_map * isl_map_union_disjoint(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export __isl_give isl_map * isl_map_intersect(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export __isl_give isl_map * isl_map_apply_range(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_give isl_map * isl_map_copy(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_domain_factor_domain(__isl_take isl_map *map)
__isl_export __isl_give isl_space * isl_map_get_space(__isl_keep isl_map *map)
__isl_give isl_map * isl_map_from_domain_and_range(__isl_take isl_set *domain, __isl_take isl_set *range)
__isl_give isl_val * isl_map_plain_get_val_if_fixed(__isl_keep isl_map *map, enum isl_dim_type type, unsigned pos)
__isl_export __isl_give isl_map * isl_map_uncurry(__isl_take isl_map *map)
isl_ctx * isl_map_get_ctx(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_intersect_domain(__isl_take isl_map *map, __isl_take isl_set *set)
__isl_give isl_basic_map * isl_basic_map_more_at(__isl_take isl_space *space, unsigned pos)
__isl_give isl_map * isl_map_lex_le_first(__isl_take isl_space *space, unsigned n)
isl_bool isl_map_plain_is_empty(__isl_keep isl_map *map)
__isl_give isl_map * isl_map_range_map(__isl_take isl_map *map)
__isl_export __isl_give isl_map * isl_map_intersect_domain_factor_range(__isl_take isl_map *map, __isl_take isl_map *factor)
uint32_t isl_map_get_hash(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_empty(__isl_take isl_space *space)
__isl_export __isl_give isl_map * isl_set_unwrap(__isl_take isl_set *set)
__isl_export __isl_give isl_map * isl_map_factor_range(__isl_take isl_map *map)
__isl_give isl_map * isl_map_lex_lt_first(__isl_take isl_space *space, unsigned n)
__isl_give isl_map * isl_map_align_params(__isl_take isl_map *map, __isl_take isl_space *model)
isl_size isl_map_dim(__isl_keep isl_map *map, enum isl_dim_type type)
__isl_export __isl_give isl_map * isl_map_domain_factor_range(__isl_take isl_map *map)
__isl_export __isl_give isl_map * isl_map_reverse(__isl_take isl_map *map)
__isl_export __isl_give isl_map * isl_map_range_product(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_give isl_map * isl_map_partial_lexmax(__isl_take isl_map *map, __isl_take isl_set *dom, __isl_give isl_set **empty)
__isl_give isl_map * isl_map_domain_map(__isl_take isl_map *map)
__isl_export __isl_give isl_map * isl_map_range_factor_domain(__isl_take isl_map *map)
__isl_give isl_map * isl_map_range_curry(__isl_take isl_map *map)
__isl_null isl_map * isl_map_free(__isl_take isl_map *map)
__isl_constructor __isl_give isl_map * isl_map_from_basic_map(__isl_take isl_basic_map *bmap)
__isl_export __isl_give isl_set * isl_map_range(__isl_take isl_map *map)
__isl_give isl_printer * isl_printer_yaml_start_mapping(__isl_take isl_printer *p)
__isl_give isl_printer * isl_printer_yaml_next(__isl_take isl_printer *p)
#define ISL_YAML_STYLE_FLOW
__isl_null isl_printer * isl_printer_free(__isl_take isl_printer *printer)
__isl_give char * isl_printer_get_str(__isl_keep isl_printer *printer)
__isl_give isl_printer * isl_printer_yaml_end_mapping(__isl_take isl_printer *p)
__isl_give isl_printer * isl_printer_print_str(__isl_take isl_printer *p, const char *s)
__isl_give isl_printer * isl_printer_set_yaml_style(__isl_take isl_printer *p, int yaml_style)
__isl_give isl_printer * isl_printer_to_str(isl_ctx *ctx)
__isl_null isl_schedule * isl_schedule_free(__isl_take isl_schedule *sched)
__isl_give isl_schedule * isl_schedule_empty(__isl_take isl_space *space)
__isl_give isl_schedule * isl_schedule_copy(__isl_keep isl_schedule *sched)
isl_stat isl_schedule_foreach_schedule_node_top_down(__isl_keep isl_schedule *sched, isl_bool(*fn)(__isl_keep isl_schedule_node *node, void *user), void *user)
__isl_give isl_printer * isl_printer_print_schedule(__isl_take isl_printer *p, __isl_keep isl_schedule *schedule)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_get_shared_ancestor(__isl_keep isl_schedule_node *node1, __isl_keep isl_schedule_node *node2)
__isl_give isl_union_map * isl_schedule_node_get_prefix_schedule_relation(__isl_keep isl_schedule_node *node)
isl_size isl_schedule_node_get_schedule_depth(__isl_keep isl_schedule_node *node)
__isl_give isl_union_set * isl_schedule_node_get_universe_domain(__isl_keep isl_schedule_node *node)
__isl_null isl_schedule_node * isl_schedule_node_free(__isl_take isl_schedule_node *node)
__isl_export isl_size isl_schedule_node_get_ancestor_child_position(__isl_keep isl_schedule_node *node, __isl_keep isl_schedule_node *ancestor)
__isl_give isl_schedule_node * isl_schedule_node_copy(__isl_keep isl_schedule_node *node)
@ isl_schedule_node_sequence
__isl_export __isl_give isl_set * isl_set_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_set * isl_set_subtract(__isl_take isl_set *set1, __isl_take isl_set *set2)
isl_ctx * isl_set_get_ctx(__isl_keep isl_set *set)
__isl_export __isl_give isl_space * isl_set_get_space(__isl_keep isl_set *set)
isl_bool isl_set_plain_is_empty(__isl_keep isl_set *set)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_set_apply(__isl_take isl_set *set, __isl_take isl_map *map)
__isl_give isl_set * isl_set_copy(__isl_keep isl_set *set)
__isl_export __isl_give isl_set * isl_set_intersect(__isl_take isl_set *set1, __isl_take isl_set *set2)
__isl_export __isl_give isl_set * isl_set_empty(__isl_take isl_space *space)
__isl_give isl_set * isl_set_union_disjoint(__isl_take isl_set *set1, __isl_take isl_set *set2)
isl_bool isl_space_has_equal_params(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_reverse(__isl_take isl_space *space)
isl_ctx * isl_space_get_ctx(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__isl_give isl_space * isl_space_align_params(__isl_take isl_space *space1, __isl_take isl_space *space2)
__isl_give isl_space * isl_space_join(__isl_take isl_space *left, __isl_take isl_space *right)
__isl_export __isl_give isl_space * isl_space_range(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_unwrap(__isl_take isl_space *space)
__isl_export isl_bool isl_space_is_equal(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type)
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
void isl_stream_error(__isl_keep isl_stream *s, struct isl_token *tok, char *msg)
__isl_give isl_schedule * isl_stream_read_schedule(isl_stream *s)
isl_bool isl_stream_yaml_next(__isl_keep isl_stream *s)
isl_ctx * isl_stream_get_ctx(__isl_keep isl_stream *s)
isl_stat isl_stream_yaml_read_start_mapping(__isl_keep isl_stream *s)
__isl_give isl_stream * isl_stream_new_file(isl_ctx *ctx, FILE *file)
isl_stat isl_stream_yaml_read_end_mapping(__isl_keep isl_stream *s)
void isl_stream_free(__isl_take isl_stream *s)
isl_access_info * access_info
struct isl_labeled_map sink
struct isl_labeled_map source[1]
isl_access_level_before level_before
isl_access_coscheduled coscheduled
isl_access_restrict restrict_fn
struct isl_sched_info ** source_info
isl_access_info * accesses
isl_union_map * may_source
isl_union_map * must_source
struct isl_sched_info * sink_info
isl_union_access_info * access
struct isl_scheduled_access * sink
struct isl_scheduled_access * source
struct isl_labeled_map * dep
enum isl_restriction_type type
isl_union_map * schedule_map
isl_union_map * access[isl_access_end]
isl_union_map * must_no_source
isl_union_map * may_no_source
__isl_null isl_union_map * isl_union_map_free(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_space * isl_union_map_get_space(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_reverse(__isl_take isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_align_params(__isl_take isl_union_map *umap, __isl_take isl_space *model)
__isl_export __isl_give isl_union_map * isl_union_map_intersect_range_factor_range(__isl_take isl_union_map *umap, __isl_take isl_union_map *factor)
__isl_export isl_stat isl_union_map_foreach_map(__isl_keep isl_union_map *umap, isl_stat(*fn)(__isl_take isl_map *map, void *user), void *user)
void isl_union_map_dump(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_range_factor_domain(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_range_map(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_apply_range(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_give isl_union_map * isl_union_map_copy(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_subtract(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_export isl_bool isl_union_map_is_empty(__isl_keep isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_empty(__isl_take isl_space *space)
__isl_constructor __isl_give isl_union_map * isl_union_map_from_map(__isl_take isl_map *map)
__isl_export __isl_give isl_union_map * isl_union_map_factor_range(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_map_union(__isl_take isl_union_map *umap1, __isl_take isl_union_map *umap2)
__isl_give isl_union_map * isl_union_map_intersect_domain(__isl_take isl_union_map *umap, __isl_take isl_union_set *uset)
__isl_export __isl_give isl_union_map * isl_union_map_domain_factor_range(__isl_take isl_union_map *umap)
isl_ctx * isl_union_map_get_ctx(__isl_keep isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_range_curry(__isl_take isl_union_map *umap)
isl_size isl_union_map_n_map(__isl_keep isl_union_map *umap)
struct isl_union_set isl_union_set
__isl_give isl_union_set * isl_union_set_copy(__isl_keep isl_union_set *uset)
__isl_null isl_union_set * isl_union_set_free(__isl_take isl_union_set *uset)
__isl_export isl_bool isl_val_is_nan(__isl_keep isl_val *v)
__isl_null isl_val * isl_val_free(__isl_take isl_val *v)
isl_size isl_vec_size(__isl_keep isl_vec *vec)
__isl_null isl_vec * isl_vec_free(__isl_take isl_vec *vec)
int isl_vec_cmp_element(__isl_keep isl_vec *vec1, __isl_keep isl_vec *vec2, int pos)
__isl_give isl_vec * isl_vec_set_element_val(__isl_take isl_vec *vec, int pos, __isl_take isl_val *v)
__isl_give isl_vec * isl_vec_alloc(isl_ctx *ctx, unsigned size)