187 for (i = 0; i < graph->
n; ++i) {
221 return graph->
node + graph->
n;
231 return node && node >= &graph->
node[0] && node < &graph->
node[graph->
n];
408 if (entry->
data != edge)
462 int n_node,
int n_edge)
475 graph->
intra_hmap = isl_map_to_basic_set_alloc(ctx, 2 * n_edge);
477 graph->
inter_hmap = isl_map_to_basic_set_alloc(ctx, 2 * n_edge);
483 for(i = 0; i < graph->
n; ++i)
505 if (graph->
root == graph)
507 isl_multi_val_free(node->
sizes);
521 for (i = 0; i < graph->
n; ++i)
526 for (i = 0; i < graph->
n_edge; ++i) {
597 for (i = 0; i <
n; ++i) {
856 mpa = isl_multi_pw_aff_range_splice(mpa,
pos,
905 mv = isl_multi_val_free(mv);
906 for (j = 0; j <
n; ++j) {
912 mv = isl_multi_val_set_val(mv, j, v);
913 if (is_zero >= 0 && is_zero) {
914 isl_multi_val_free(mv);
992 node = &graph->
node[graph->
n];
1049 if (nvar < 0 || has_equality < 0)
1051 if (!has_equality) {
1053 return add_node(graph,
set, nvar, 0, NULL, NULL, NULL);
1453 while (g->
order[i] != -1) {
1639 m = isl_map_to_basic_set_try_get(*
hmap,
map);
1640 if (
m.valid < 0 ||
m.valid) {
1678 if (
m.valid < 0 ||
m.valid) {
1833 if (!src || !dst ||
total < 0)
1870 if (n_eq < 0 || n_ineq < 0)
1955 edge->
start = graph->
lp->n_ineq;
1959 edge->
end = graph->
lp->n_ineq;
2140 int use_coincidence)
2144 for (i = 0; i < graph->
n_edge; ++i) {
2151 if (edge->
src != edge->
dst)
2157 for (i = 0; i < graph->
n_edge; ++i) {
2164 if (edge->
src == edge->
dst)
2186 int use_coincidence)
2190 for (i = 0; i < graph->
n_edge; ++i) {
2197 if (edge->
src == edge->
dst &&
2200 if (edge->
src != edge->
dst &&
2205 if (edge->
src == edge->
dst &&
2208 if (edge->
src != edge->
dst &&
2331 int use_coincidence)
2333 if (edge->
src != edge->
dst)
2349 int f,
int *n_eq,
int *n_ineq)
2357 if (eq < 0 || ineq < 0)
2375 int *n_eq,
int *n_ineq,
int use_coincidence)
2387 if (edge->
src != edge->
dst) {
2425 int *n_eq,
int *n_ineq,
int use_coincidence)
2429 *n_eq = *n_ineq = 0;
2430 for (i = 0; i < graph->
n_edge; ++i) {
2435 use_coincidence) < 0)
2454 *n_ineq += graph->
n;
2480 for (i = 0; i < graph->
n; ++i) {
2511 for (i = 0; i < graph->
n; ++i)
2558 for (j = 0; j < node->
nparam; ++j) {
2577 for (i = 0; i < node->
nvar; ++i) {
2627 for (i = 0; i < graph->
n; ++i) {
2641 int sum_pos,
int first,
int n)
2655 for (i = 0; i <
n; ++i)
2679 for (i = 0; i < graph->
n; ++i) {
2707 for (i = 0; i < graph->
n; ++i) {
2711 for (j = 0; j < 2 * node->
nvar; ++j)
2749 int use_coincidence)
2765 for (i = 0; i < graph->
n; ++i) {
2782 n_eq += 2 + parametric;
2818 con -= graph->
lp->n_eq;
2820 if (con >= graph->
lp->n_ineq)
2823 for (i = 0; i < graph->
n_edge; ++i) {
2832 if (graph->
edge[i].
end <= con)
2870 if (
n < 0 || n_var < 0)
2877 for (i = 0; i <
n; ++i) {
2878 for (j = 0; j < n_var; ++j) {
2879 int nj = n_var - 1 - j;
2901 for (i = 0; i < graph->
n; ++i) {
2915 for (i = 0; i < graph->
n; ++i)
2944 for (i = 0; i < node->
nvar; ++i)
2946 sol->el[
pos + 2 * i + 1], sol->el[
pos + 2 * i]);
2971 "no solution found",
goto error);
2974 "too many schedule rows",
goto error);
2976 for (i = 0; i < graph->
n; ++i) {
2983 if (row < 0 || !csol)
2993 row, 0, sol->el[1 +
pos]);
2995 for (j = 0; j < node->
nparam; ++j)
2997 row, 1 + j, sol->el[1 +
pos + j]);
2998 for (j = 0; j < node->
nvar; ++j)
3000 row, 1 + node->
nparam + j, csol->
el[j]);
3032 for (j = 0; j < node->
nparam; ++j) {
3037 for (j = 0; j < node->
nvar; ++j) {
3039 1 + node->
nparam + j, &v) < 0)
3080 ma = isl_multi_aff_zero(
space);
3082 for (i = first; i < first +
n; ++i) {
3084 ma = isl_multi_aff_set_aff(
ma, i - first,
aff);
3091 isl_multi_aff_copy(node->
compress));
3140 isl_map *src_sched, *dst_sched;
3229 return empty < 0 ? -1 : !empty;
3244 return empty < 0 ? -1 : !empty;
3262 if (empty < 0 || empty)
3296 for (i = 0; i < graph->
n_edge; ++i) {
3307 if (adjacent >= 0 && !adjacent)
3347 for (i = 0; i < graph->
n_edge; ++i) {
3373 for (i = 0; i < graph->
n_edge; ++i) {
3406 for (i = 0; i < graph->
n; ++i)
3407 if (pred(&graph->
node[i], data))
3412 "empty component",
return NULL);
3417 for (i = i + 1; i < graph->
n; ++i) {
3418 if (!pred(&graph->
node[i], data))
3446 filters = isl_union_set_list_alloc(ctx, graph->
scc);
3447 for (i = 0; i < graph->
scc; ++i) {
3451 filters = isl_union_set_list_add(filters, dom);
3466 filters = isl_union_set_list_alloc(ctx, 2);
3469 filters = isl_union_set_list_add(filters, dom);
3472 filters = isl_union_set_list_add(filters, dom);
3482 int (*node_pred)(
struct isl_sched_node *node,
int data),
int data)
3487 for (i = 0; i < src->
n; ++i) {
3490 if (!node_pred(&src->
node[i], data))
3530 int (*edge_pred)(
struct isl_sched_edge *edge,
int data),
int data)
3535 for (i = 0; i < src->
n_edge; ++i) {
3542 if (!edge_pred(edge, data))
3550 if (!dst_src || !dst_dst)
3557 "backward (conditional) validity edge",
3599 for (i = 0; i < graph->
n; ++i) {
3623 int i,
n = 0, n_edge = 0;
3626 for (i = 0; i < graph->
n; ++i)
3627 if (node_pred(&graph->
node[i], data))
3629 for (i = 0; i < graph->
n_edge; ++i)
3630 if (edge_pred(&graph->
edge[i], data))
3720 for (i = 0; i < graph->
n; ++i) {
3805 "graph should have at least one node",
3817 for (i = 1; i < graph->
n; ++i) {
3828 for (i = 0; i <
n; ++i)
3979 isl_basic_set_list_free(
carry->intra);
3980 isl_basic_set_list_free(
carry->inter);
4024 "space points to invalid node",
return NULL);
4025 if (graph != graph->
root)
4029 "unable to find node",
return NULL);
4117 if (isl_basic_set_list_foreach(intra, &
lp_add_intra, &data) < 0)
4119 if (isl_basic_set_list_foreach(inter, &
lp_add_inter, &data) < 0)
4209 for (i = 0; i < graph->
n; ++i) {
4231 for (i = 0; i < n_edge; ++i)
4239 for (i = 0; i < n_edge; ++i) {
4302 for (i = 0; i < graph->
n; ++i) {
4321 for (i = 0; i < graph->
n; ++i) {
4386 for (i = 0; i < graph->
n; ++i) {
4393 if (trivial < 0 || trivial)
4416 if (node->
nvar <= 1)
4423 for (i = 0; i < node->
nvar; ++i) {
4428 v = isl_multi_val_get_val(node->
sizes, i);
4442 for (j = 0; j < node->
nvar; ++j) {
4504 "error in schedule construction",
4576 int treat_coalescing;
4606 cut = want_integral && !integral;
4609 if (!treat_coalescing)
4611 for (i = 0; i < graph->
n; ++i) {
4617 if (pos < node->
nvar)
4625 }
while (try_again);
4648 if (edge->
src != edge->
dst)
4667 if (edge->
src == edge->
dst)
4813 if (dim < 0 || n_eq < 0)
4926 for (i = 0; i < graph->
n_edge; ++i) {
4933 umap =
add(umap, edge);
5065 if (
setup_carry_lp(ctx, graph, n_edge, intra, inter, carry_inter) < 0)
5108 n_intra = isl_basic_set_list_n_basic_set(
carry.intra);
5109 n_inter = isl_basic_set_list_n_basic_set(
carry.inter);
5110 if (n_intra < 0 || n_inter < 0)
5113 if (fallback && n_intra > 0 &&
5117 if (!sol || sol->
size != 0 || n_inter == 0) {
5124 n_edge = n_intra + n_inter;
5184 if (sol->
size == 0) {
5195 }
else if (trivial && graph->
scc > 1) {
5217 return carry(node, graph, 1, coincidence);
5228 return carry(node, graph, 0, 0);
5278 "graph should have at least one node",
5294 if (graph->
scc < graph->
n) {
5312 for (i = 0; i < graph->
n_edge; ++i) {
5362 for (i = 0; i < graph->
n_edge; ++i)
5372 int any_condition = 0;
5373 int any_conditional_validity = 0;
5375 for (i = 0; i < graph->
n_edge; ++i) {
5379 any_conditional_validity = 1;
5382 return any_condition && any_conditional_validity;
5391 for (i = 0; i < graph->
n_edge; ++i)
5457 for (i = 0; i < graph->
n_edge; ++i) {
5458 int adjacent, local;
5468 if (adjacent >= 0 && !adjacent)
5470 conditional_source);
5511 for (i = 0; i < graph->
n_edge; ++i) {
5652 int has_coincidence;
5653 int use_coincidence;
5654 int force_coincidence = 0;
5655 int check_conditional;
5665 force_coincidence = 1;
5667 use_coincidence = has_coincidence;
5676 if (
setup_lp(ctx, graph, use_coincidence) < 0)
5681 if (sol->
size == 0) {
5685 if (use_coincidence && (!force_coincidence || !empty)) {
5686 use_coincidence = 0;
5691 coincident = !has_coincidence || use_coincidence;
5695 if (!check_conditional)
5704 use_coincidence = has_coincidence;
5801 if (graph->
weak && graph->
scc == graph->
n) {
5815 for (component = 0; component < graph->
scc; ++component) {
__isl_constructor __isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_multi_aff(__isl_take isl_multi_aff *ma)
__isl_overload __isl_give isl_pw_multi_aff * isl_pw_multi_aff_pullback_pw_multi_aff(__isl_take isl_pw_multi_aff *pma1, __isl_take isl_pw_multi_aff *pma2)
__isl_null isl_aff * isl_aff_free(__isl_take isl_aff *aff)
__isl_give isl_aff * isl_aff_var_on_domain(__isl_take isl_local_space *ls, enum isl_dim_type type, unsigned pos)
__isl_constructor __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_from_multi_pw_aff(__isl_take isl_multi_pw_aff *mpa)
__isl_overload __isl_give isl_multi_aff * isl_multi_aff_pullback_multi_aff(__isl_take isl_multi_aff *ma1, __isl_take isl_multi_aff *ma2)
__isl_give isl_map * isl_multi_pw_aff_eq_map(__isl_take isl_multi_pw_aff *mpa1, __isl_take isl_multi_pw_aff *mpa2)
__isl_constructor __isl_give isl_multi_pw_aff * isl_multi_pw_aff_from_multi_aff(__isl_take isl_multi_aff *ma)
__isl_give isl_space * isl_pw_multi_aff_get_domain_space(__isl_keep isl_pw_multi_aff *pma)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_multi_pw_aff(__isl_take isl_multi_pw_aff *mpa)
__isl_give isl_aff * isl_aff_zero_on_domain(__isl_take isl_local_space *ls)
__isl_export __isl_give isl_pw_multi_aff * isl_pw_multi_aff_gist(__isl_take isl_pw_multi_aff *pma, __isl_take isl_set *set)
__isl_constructor __isl_give isl_multi_pw_aff * isl_multi_pw_aff_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_from_map(__isl_take isl_map *map)
__isl_give isl_multi_aff * isl_multi_aff_project_out_map(__isl_take isl_space *space, enum isl_dim_type type, unsigned first, unsigned n)
__isl_null isl_pw_multi_aff * isl_pw_multi_aff_free(__isl_take isl_pw_multi_aff *pma)
__isl_overload __isl_give isl_pw_multi_aff * isl_pw_multi_aff_pullback_multi_aff(__isl_take isl_pw_multi_aff *pma, __isl_take isl_multi_aff *ma)
__isl_export __isl_give isl_set * isl_pw_multi_aff_domain(__isl_take isl_pw_multi_aff *pma)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_copy(__isl_keep isl_pw_multi_aff *pma)
__isl_export __isl_give isl_multi_union_pw_aff * isl_multi_union_pw_aff_union_add(__isl_take isl_multi_union_pw_aff *mupa1, __isl_take isl_multi_union_pw_aff *mupa2)
__isl_give isl_map * isl_map_from_pw_multi_aff(__isl_take isl_pw_multi_aff *pma)
struct isl_multi_aff isl_multi_aff
struct isl_multi_pw_aff isl_multi_pw_aff
struct isl_multi_union_pw_aff isl_multi_union_pw_aff
isl_bool isl_basic_set_has_defining_equality(struct isl_basic_set *bset, enum isl_dim_type type, int pos, struct isl_constraint **constraint)
#define ISL_FL_ISSET(l, f)
#define isl_die(ctx, errno, msg, code)
isl_bool isl_bool_ok(int b)
#define isl_alloc_array(ctx, type, n)
#define isl_calloc_array(ctx, type, n)
isl_bool isl_bool_not(isl_bool b)
struct isl_hash_table_entry * isl_hash_table_entry_none
#define isl_hash_builtin(h, l)
void isl_hash_table_remove(struct isl_ctx *ctx, struct isl_hash_table *table, struct isl_hash_table_entry *entry)
void isl_hash_table_free(struct isl_ctx *ctx, struct isl_hash_table *table)
struct isl_hash_table_entry * isl_hash_table_find(struct isl_ctx *ctx, struct isl_hash_table *table, uint32_t key_hash, isl_bool(*eq)(const void *entry, const void *val), const void *val, int reserve)
struct isl_hash_table * isl_hash_table_alloc(struct isl_ctx *ctx, int min_size)
__isl_export __isl_give ISL_HMAP __isl_take ISL_KEY __isl_take ISL_VAL * val
isl_bool __isl_keep ISL_KEY * key
__isl_give isl_printer __isl_keep ISL_HMAP * hmap
isl_stat isl_stat(*) void user)
isl_bool isl_bool(* test)(__isl_keep ISL_KEY *key, __isl_keep ISL_VAL *val, void *user)
__isl_null isl_id * isl_id_free(__isl_take isl_id *id)
void * isl_id_get_user(__isl_keep isl_id *id)
__isl_give isl_id * isl_id_alloc(isl_ctx *ctx, __isl_keep const char *name, void *user)
__isl_export __isl_give isl_val * isl_set_max_val(__isl_keep isl_set *set, __isl_keep isl_aff *obj)
void GMPZAPI() gcd(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() sub(mp_int rop, mp_int op1, mp_int op2)
void GMPZAPI() add(mp_int rop, mp_int op1, mp_int op2)
__isl_give isl_aff * isl_aff_set_constant(__isl_take isl_aff *aff, isl_int v)
__isl_give isl_aff * isl_aff_set_coefficient(__isl_take isl_aff *aff, enum isl_dim_type type, int pos, isl_int v)
__isl_give isl_multi_aff * isl_multi_aff_from_aff_mat(__isl_take isl_space *space, __isl_take isl_mat *mat)
__isl_give isl_pw_multi_aff * isl_pw_multi_aff_reset_space(__isl_take isl_pw_multi_aff *pwmaff, __isl_take isl_space *space)
static void drop(struct isl_coalesce_info *info)
void isl_dim_map_range(__isl_keep isl_dim_map *dim_map, unsigned dst_pos, int dst_stride, unsigned src_pos, int src_stride, unsigned n, int sign)
__isl_give isl_basic_set * isl_basic_set_add_constraints_dim_map(__isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, __isl_take isl_dim_map *dim_map)
__isl_give isl_dim_map * isl_dim_map_alloc(isl_ctx *ctx, unsigned len)
static struct isl_hash_table_entry none
#define isl_int_is_zero(i)
#define isl_int_is_one(i)
#define isl_int_is_neg(i)
#define isl_int_gcd(r, i, j)
#define isl_int_neg(r, i)
#define isl_int_cdiv_q_ui(r, i, j)
#define isl_int_abs_gt(i, j)
#define isl_int_set(r, i)
#define isl_int_divexact(r, i, j)
#define isl_int_mul_si(r, i, j)
#define isl_int_mul(r, i, j)
#define isl_int_set_si(r, i)
#define isl_int_fdiv_q(r, i, j)
#define isl_int_sub(r, i, j)
#define isl_int_cmp_si(i, si)
__isl_give isl_basic_set * isl_basic_set_alloc_space(__isl_take isl_space *space, unsigned extra, unsigned n_eq, unsigned n_ineq)
isl_size isl_basic_set_n_equality(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_extend_constraints(__isl_take isl_basic_set *base, unsigned n_eq, unsigned n_ineq)
int isl_basic_set_alloc_equality(__isl_keep isl_basic_set *bset)
static unsigned pos(__isl_keep isl_space *space, enum isl_dim_type type)
isl_size isl_basic_set_n_inequality(__isl_keep isl_basic_set *bset)
isl_stat isl_basic_set_check_no_locals(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_set_rational(__isl_take isl_basic_set *bset)
__isl_give isl_mat * isl_basic_set_extract_equalities(__isl_keep isl_basic_set *bset)
int isl_basic_set_alloc_inequality(__isl_keep isl_basic_set *bset)
__isl_give isl_set * isl_set_plain_gist_basic_set(__isl_take isl_set *set, __isl_take isl_basic_set *context)
#define isl_basic_set_list
#define isl_maybe_isl_basic_set
__isl_give isl_mat * isl_mat_set_element(__isl_take isl_mat *mat, int row, int col, isl_int v)
int isl_mat_get_element(__isl_keep isl_mat *mat, int row, int col, isl_int *v)
__isl_give isl_mat * isl_mat_zero(isl_ctx *ctx, unsigned n_row, unsigned n_col)
__isl_give isl_mat * isl_mat_lexnonneg_rows(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_reverse_gauss(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_sub_alloc(__isl_keep isl_mat *mat, unsigned first_row, unsigned n_row, unsigned first_col, unsigned n_col)
__isl_give isl_mat * isl_mat_scale_down_row(__isl_take isl_mat *mat, int row, isl_int m)
__isl_give isl_morph * isl_morph_inverse(__isl_take isl_morph *morph)
isl_size isl_morph_ran_dim(__isl_keep isl_morph *morph, enum isl_dim_type type)
__isl_give isl_multi_aff * isl_morph_get_var_multi_aff(__isl_keep isl_morph *morph)
__isl_null isl_morph * isl_morph_free(__isl_take isl_morph *morph)
__isl_give isl_morph * isl_basic_set_variable_compression_with_id(__isl_keep isl_basic_set *bset, __isl_keep isl_id *id)
__isl_give isl_schedule_constraints * isl_schedule_constraints_align_params(__isl_take isl_schedule_constraints *sc)
int isl_schedule_constraints_n_basic_map(__isl_keep isl_schedule_constraints *sc)
__isl_give isl_union_map * isl_schedule_constraints_get(__isl_keep isl_schedule_constraints *sc, enum isl_edge_type type)
isl_size isl_schedule_constraints_n_map(__isl_keep isl_schedule_constraints *sc)
@ isl_edge_conditional_validity
static int has_violated_conditional_constraint(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat bset_update_count(__isl_take isl_basic_set *bset, void *user)
static isl_stat compress_node(struct isl_sched_node *node, __isl_take isl_set *hull, __isl_take isl_multi_aff *compress, __isl_take isl_pw_multi_aff *decompress)
static isl_stat copy_nodes(struct isl_sched_graph *dst, struct isl_sched_graph *src, int(*node_pred)(struct isl_sched_node *node, int data), int data)
isl_bool isl_sched_graph_has_validity_edge(struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst)
static void clear_local(struct isl_sched_edge *edge)
static __isl_give isl_schedule_node * compute_schedule(isl_schedule_node *node, struct isl_sched_graph *graph)
static struct isl_sched_node * graph_find_compressed_node(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_space *space)
static int count_constraints(struct isl_sched_graph *graph, int *n_eq, int *n_ineq, int use_coincidence)
int isl_sched_edge_has_type(struct isl_sched_edge *edge, enum isl_edge_type type)
static int needs_row(struct isl_sched_graph *graph, struct isl_sched_node *node)
static isl_stat lp_add_inter(__isl_take isl_basic_set *coef, void *user)
static isl_stat update_count(__isl_take isl_basic_set *bset, int f, int *n_eq, int *n_ineq)
static int update_edges(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat init_n_maxvar(__isl_take isl_set *set, void *user)
static __isl_give isl_map * node_extract_schedule(struct isl_sched_node *node)
static int is_condition_false(struct isl_sched_edge *edge)
static int need_feautrier_step(isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_id * construct_compressed_id(__isl_keep isl_set *set, struct isl_sched_node *node)
static isl_stat count_bound_constant_constraints(isl_ctx *ctx, struct isl_sched_graph *graph, int *n_eq, int *n_ineq)
static __isl_give isl_basic_set * inter_coefficients(struct isl_sched_graph *graph, struct isl_sched_edge *edge, __isl_take isl_map *map)
static int node_var_coef_offset(struct isl_sched_node *node)
static __isl_give isl_union_map * collect_validity(struct isl_sched_graph *graph, __isl_give isl_union_map *(*add)(__isl_take isl_union_map *umap, struct isl_sched_edge *edge), int coincidence)
static isl_stat reset_band(struct isl_sched_graph *graph)
static __isl_give isl_schedule_node * compute_schedule_wcc_feautrier(isl_schedule_node *node, struct isl_sched_graph *graph)
static int node_scc_at_most(struct isl_sched_node *node, int scc)
static struct isl_hash_table_entry * graph_find_edge_entry(struct isl_sched_graph *graph, enum isl_edge_type type, struct isl_sched_node *src, struct isl_sched_node *dst)
static int is_violated(struct isl_sched_graph *graph, int edge_index)
static isl_stat add_node(struct isl_sched_graph *graph, __isl_take isl_set *set, int nvar, int compressed, __isl_take isl_set *hull, __isl_take isl_multi_aff *compress, __isl_take isl_pw_multi_aff *decompress)
static __isl_give isl_basic_set * get_size_bounds(struct isl_sched_node *node)
static isl_stat add_inter_proximity_constraints(struct isl_sched_graph *graph, struct isl_sched_edge *edge, int s, int local)
static __isl_give isl_union_set * union_drop_coalescing_constraints(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_take isl_union_set *delta)
__isl_give isl_multi_aff * isl_sched_node_extract_partial_schedule_multi_aff(struct isl_sched_node *node, int first, int n)
static __isl_give isl_vec * non_empty_solution(__isl_keep isl_tab_lexmin *tl)
static isl_bool edge_has_src_and_dst(const void *entry, const void *val)
static isl_stat lp_add_intra(__isl_take isl_basic_set *coef, void *user)
int isl_sched_edge_is_proximity(struct isl_sched_edge *edge)
static isl_stat count_map_constraints(struct isl_sched_graph *graph, struct isl_sched_edge *edge, __isl_take isl_map *map, int *n_eq, int *n_ineq, int use_coincidence)
static __isl_give isl_schedule_node * carry_feautrier(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static int has_adjacent_true_conditions(struct isl_sched_graph *graph, __isl_keep isl_union_set *conditional_source, __isl_keep isl_union_set *conditional_sink)
__isl_give isl_schedule_node * isl_schedule_node_compute_finish_band(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int initialized)
static __isl_give isl_mat * construct_trivial(__isl_keep isl_mat *indep)
static isl_bool node_has_tuples(const void *entry, const void *val)
isl_stat isl_sched_node_update_vmap(struct isl_sched_node *node)
static isl_stat node_add_coefficient_constraints(isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *node, int max)
static __isl_give isl_map * map_intersect_domains(__isl_take isl_map *tagged, __isl_keep isl_map *map)
static __isl_give isl_map * insert_dummy_tags(__isl_take isl_map *map)
static int range_intersects(__isl_keep isl_union_map *umap, __isl_keep isl_union_set *uset)
static __isl_give isl_vec * extract_var_coef(struct isl_sched_node *node, __isl_keep isl_vec *sol)
static int add_all_proximity_constraints(struct isl_sched_graph *graph, int use_coincidence)
int isl_sched_graph_is_node(struct isl_sched_graph *graph, struct isl_sched_node *node)
static void set_local(struct isl_sched_edge *edge)
static isl_stat set_max_coefficient(isl_ctx *ctx, struct isl_sched_node *node)
static __isl_give isl_vec * compute_carrying_sol_coef(isl_ctx *ctx, struct isl_sched_graph *graph, int n_edge, __isl_keep isl_basic_set_list *intra, __isl_keep isl_basic_set_list *inter, int want_integral, int carry_inter)
static __isl_give isl_vec * solve_lp(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat add_inter_validity_constraints(struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static void clear_local_edges(struct isl_sched_graph *graph)
static int has_any_coincidence(struct isl_sched_graph *graph)
__isl_give isl_schedule * isl_schedule_constraints_compute_schedule(__isl_take isl_schedule_constraints *sc)
static isl_stat add_intra_validity_constraints(struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static void clear_node(struct isl_sched_graph *graph, struct isl_sched_node *node)
static __isl_give isl_mat * normalize_independent(__isl_take isl_mat *indep)
static int node_cst_coef_offset(struct isl_sched_node *node)
isl_stat isl_sched_graph_init(struct isl_sched_graph *graph, __isl_keep isl_schedule_constraints *sc)
static __isl_give isl_union_map * intersect_domains(__isl_take isl_union_map *umap, __isl_keep isl_map *map)
static __isl_give isl_basic_set * intra_coefficients(struct isl_sched_graph *graph, struct isl_sched_node *node, __isl_take isl_map *map, int need_param)
static isl_stat graph_edge_table_add(isl_ctx *ctx, struct isl_sched_graph *graph, enum isl_edge_type type, struct isl_sched_edge *edge)
static int is_local(struct isl_sched_edge *edge)
static __isl_give isl_schedule_node * compute_schedule_wcc_whole(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_union_map * exploit_inter_lineality(__isl_take isl_union_map *inter, struct isl_exploit_lineality_data *data)
static isl_stat add_bound_constant_constraints(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_bool has_any_defining_equality(__isl_keep isl_basic_set *bset)
int isl_sched_edge_is_conditional_validity(struct isl_sched_edge *edge)
static __isl_give isl_vec * compute_carrying_sol(isl_ctx *ctx, struct isl_sched_graph *graph, int fallback, int coincidence)
static int is_validity(struct isl_sched_edge *edge)
isl_stat isl_schedule_node_compute_wcc_band(isl_ctx *ctx, struct isl_sched_graph *graph)
static int need_condition_check(struct isl_sched_graph *graph)
static isl_size coef_var_offset(__isl_keep isl_basic_set *coef)
static struct isl_sched_node * find_range_node(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_map *map)
static int edge_multiplicity(struct isl_sched_edge *edge, int use_coincidence)
static isl_stat graph_alloc(isl_ctx *ctx, struct isl_sched_graph *graph, int n_node, int n_edge)
static __isl_give isl_basic_set_list * collect_inter_validity(struct isl_sched_graph *graph, int coincidence, struct isl_exploit_lineality_data *data)
static isl_stat compute_max_coefficient(isl_ctx *ctx, struct isl_sched_node *node)
static __isl_give isl_schedule_node * compute_next_band(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int permutable)
static __isl_give isl_map * extract_hull(struct isl_sched_node *src, struct isl_sched_node *dst)
static __isl_give isl_set * drop_coalescing_constraints(__isl_take isl_set *delta, struct isl_sched_node *node)
static void next_band(struct isl_sched_graph *graph)
static int is_any_validity(struct isl_sched_edge *edge)
__isl_give isl_schedule * isl_union_set_compute_schedule(__isl_take isl_union_set *domain, __isl_take isl_union_map *validity, __isl_take isl_union_map *proximity)
static isl_stat add_lineality(__isl_take isl_set *set, void *user)
static __isl_give isl_schedule_node * compute_schedule_wcc(isl_schedule_node *node, struct isl_sched_graph *graph)
static isl_stat add_param_sum_constraint(struct isl_sched_graph *graph, int sum_pos)
static isl_stat extract_edge(__isl_take isl_map *map, void *user)
static int node_scc_at_least(struct isl_sched_node *node, int scc)
static isl_stat count_all_constraints(__isl_keep isl_basic_set_list *intra, __isl_keep isl_basic_set_list *inter, int *n_eq, int *n_ineq)
static isl_stat copy_edges(isl_ctx *ctx, struct isl_sched_graph *dst, struct isl_sched_graph *src, int(*edge_pred)(struct isl_sched_edge *edge, int data), int data)
static int domain_intersects(__isl_keep isl_union_map *umap, __isl_keep isl_union_set *uset)
static __isl_give isl_val * compute_size(__isl_take isl_set *set, int dim)
static int node_par_coef_offset(struct isl_sched_node *node)
static int is_trivial(struct isl_sched_node *node, __isl_keep isl_vec *sol)
static isl_stat compute_max_row(struct isl_sched_graph *graph, __isl_keep isl_schedule_constraints *sc)
static isl_bool graph_has_any_edge(struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst)
static isl_stat add_intra_proximity_constraints(struct isl_sched_graph *graph, struct isl_sched_edge *edge, int s, int local)
static int graph_init_edge_tables(isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_schedule_node * sort_statements(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int initialized)
static isl_bool node_follows_weak(int i, int j, void *user)
static isl_stat compute_sizes(struct isl_sched_node *node, __isl_keep isl_set *uncompressed)
static isl_bool node_follows_strong(int i, int j, void *user)
static int unconditionalize_adjacent_validity(struct isl_sched_graph *graph, __isl_take isl_union_set *condition_source, __isl_take isl_union_set *condition_sink)
static isl_stat project_out_fixed(struct isl_sched_node *node, __isl_keep isl_set *uncompressed, __isl_take isl_set *set, int pos)
static __isl_give isl_tab_lexmin * zero_out_node_coef(__isl_take isl_tab_lexmin *tl, struct isl_sched_node *node, int pos)
static isl_stat graph_edge_tables_add(isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static __isl_give isl_union_set_list * extract_split(isl_ctx *ctx, struct isl_sched_graph *graph)
int isl_sched_edge_scc_exactly(struct isl_sched_edge *edge, int scc)
static isl_stat add_intra_constraints(struct isl_sched_graph *graph, struct isl_sched_node *node, __isl_take isl_basic_set *coef, int pos)
static __isl_give isl_union_map * add_intra(__isl_take isl_union_map *umap, struct isl_sched_edge *edge)
static int check_conflict(int con, void *user)
static void isl_carry_clear(struct isl_carry *carry)
static __isl_give isl_union_set * isl_sched_graph_domain(isl_ctx *ctx, struct isl_sched_graph *graph, int(*pred)(struct isl_sched_node *node, int data), int data)
static isl_stat graph_remove_edge(struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static int edge_dst_scc_at_most(struct isl_sched_edge *edge, int scc)
static isl_stat setup_carry_lp(isl_ctx *ctx, struct isl_sched_graph *graph, int n_edge, __isl_keep isl_basic_set_list *intra, __isl_keep isl_basic_set_list *inter, int carry_inter)
struct isl_sched_node * isl_sched_graph_find_node(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_space *space)
static __isl_give isl_basic_set_list * collect_intra_validity(isl_ctx *ctx, struct isl_sched_graph *graph, int coincidence, struct isl_exploit_lineality_data *data)
static isl_stat add_bound_coefficient_constraints(isl_ctx *ctx, struct isl_sched_graph *graph)
static int cmp_scc(const void *a, const void *b, void *data)
static __isl_give isl_vec * non_neg_lexmin(struct isl_sched_graph *graph, __isl_take isl_basic_set *lp, int n_edge, int want_integral)
static void set_validity(struct isl_sched_edge *edge)
static int update_schedule(struct isl_sched_graph *graph, __isl_take isl_vec *sol, int coincident)
static __isl_give isl_dim_map * inter_dim_map(isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst, int offset, int s)
static __isl_give isl_schedule_node * carry_fallback(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int coincidence)
static isl_stat setup_lp(isl_ctx *ctx, struct isl_sched_graph *graph, int use_coincidence)
static isl_stat compute_sizes_and_max(isl_ctx *ctx, struct isl_sched_node *node, __isl_take isl_set *set)
static isl_stat add_var_sum_constraint(struct isl_sched_graph *graph, int sum_pos)
__isl_give isl_union_set_list * isl_sched_graph_extract_sccs(isl_ctx *ctx, struct isl_sched_graph *graph)
static struct isl_sched_node * find_domain_node(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_map *map)
static int add_all_validity_constraints(struct isl_sched_graph *graph, int use_coincidence)
static __isl_give isl_schedule_node * compute_component_schedule(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int wcc)
static isl_stat add_all_constraints(isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_basic_set_list *intra, __isl_keep isl_basic_set_list *inter, int carry_inter)
int isl_sched_edge_is_condition(struct isl_sched_edge *edge)
isl_stat isl_sched_graph_detect_ccs(isl_ctx *ctx, struct isl_sched_graph *graph, isl_bool(*follows)(int i, int j, void *user))
static __isl_give isl_aff * extract_schedule_row(__isl_take isl_local_space *ls, struct isl_sched_node *node, int row)
static __isl_give isl_mat * extract_linear_schedule(struct isl_sched_node *node)
isl_stat isl_sched_graph_extract_sub_graph(isl_ctx *ctx, struct isl_sched_graph *graph, int(*node_pred)(struct isl_sched_node *node, int data), int(*edge_pred)(struct isl_sched_edge *edge, int data), int data, struct isl_sched_graph *sub)
static isl_stat add_non_trivial_lineality(__isl_take isl_basic_set *lineality, struct isl_exploit_lineality_data *data)
isl_stat isl_sched_graph_compute_maxvar(struct isl_sched_graph *graph)
static isl_stat add_sum_constraint(struct isl_sched_graph *graph, int sum_pos, int first, int n)
static isl_stat update_edge(isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_edge *edge)
int isl_sched_node_scc_exactly(struct isl_sched_node *node, int scc)
static __isl_give isl_union_map * add_inter(__isl_take isl_union_map *umap, struct isl_sched_edge *edge)
static int is_any_trivial(struct isl_sched_graph *graph, __isl_keep isl_vec *sol)
static int find_node_coalescing(struct isl_sched_node *node, __isl_keep isl_vec *sol)
static int is_multi_edge_type(struct isl_sched_edge *edge)
static __isl_give isl_map * isolate(__isl_take isl_set *set, int pos)
static int has_validity_edges(struct isl_sched_graph *graph)
static __isl_give isl_union_set * exploit_intra_lineality(__isl_take isl_union_set *intra, struct isl_exploit_lineality_data *data)
static isl_stat detect_wccs(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat skip_edge(__isl_take isl_map *map, __isl_take isl_map *tagged)
__isl_give isl_union_set * isl_sched_graph_extract_scc(isl_ctx *ctx, struct isl_sched_graph *graph, int scc)
static isl_stat detect_sccs(isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_schedule_node * carry(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int fallback, int coincidence)
static __isl_give isl_schedule_node * insert_current_band(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int permutable)
static __isl_give isl_schedule_node * carry_coincidence(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static void clear_type(struct isl_sched_edge *edge, enum isl_edge_type type)
static int force_zero(struct isl_sched_edge *edge, int use_coincidence)
static __isl_give isl_map * final_row(struct isl_sched_node *node)
static __isl_give isl_map * specializer(struct isl_sched_node *src, struct isl_sched_node *dst)
static int sort_sccs(struct isl_sched_graph *graph)
static __isl_give isl_schedule_node * compute_sub_schedule(__isl_take isl_schedule_node *node, isl_ctx *ctx, struct isl_sched_graph *graph, int(*node_pred)(struct isl_sched_node *node, int data), int(*edge_pred)(struct isl_sched_edge *edge, int data), int data, int wcc)
void isl_sched_graph_free(isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat collect_bounds(__isl_take isl_set *set, void *user)
static struct isl_sched_edge * graph_find_matching_edge(struct isl_sched_graph *graph, struct isl_sched_edge *model)
static __isl_give isl_schedule_node * carry_dependences(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static int count_bound_coefficient_constraints(isl_ctx *ctx, struct isl_sched_graph *graph, int *n_eq, int *n_ineq)
static __isl_give isl_schedule_node * split_scaled(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static int edge_src_scc_at_least(struct isl_sched_edge *edge, int scc)
static __isl_give isl_basic_set * add_constraints_dim_map(__isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, __isl_take isl_dim_map *dim_map)
static __isl_give isl_schedule_node * compute_split_schedule(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_map * compress(__isl_take isl_map *map, struct isl_sched_node *src, struct isl_sched_node *dst)
static isl_bool graph_has_edge(struct isl_sched_graph *graph, enum isl_edge_type type, struct isl_sched_node *src, struct isl_sched_node *dst)
static __isl_give isl_multi_aff * node_extract_schedule_multi_aff(struct isl_sched_node *node)
static int is_coincidence(struct isl_sched_edge *edge)
static __isl_give isl_dim_map * intra_dim_map(isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *node, int offset, int s)
static int merge_edge(struct isl_sched_edge *edge1, struct isl_sched_edge *edge2)
static isl_stat add_inter_constraints(struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst, __isl_take isl_basic_set *coef, int pos)
static isl_stat extract_node(__isl_take isl_set *set, void *user)
static int graph_init_table(isl_ctx *ctx, struct isl_sched_graph *graph)
static struct isl_sched_edge * graph_find_edge(struct isl_sched_graph *graph, enum isl_edge_type type, struct isl_sched_node *src, struct isl_sched_node *dst, struct isl_sched_edge *none)
static int node_var_coef_pos(struct isl_sched_node *node, int i)
static int parametric_intra_edge_multiplicity(struct isl_sched_edge *edge, int use_coincidence)
static int carries_dependences(__isl_keep isl_vec *sol, int n_edge)
__isl_give isl_schedule_node * isl_schedule_node_compute_wcc_clustering(__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
int isl_seq_first_non_zero(isl_int *p, unsigned len)
void isl_seq_gcd(isl_int *p, unsigned len, isl_int *gcd)
void isl_seq_clr(isl_int *p, unsigned len)
void isl_seq_cpy(isl_int *dst, isl_int *src, unsigned len)
void isl_seq_neg(isl_int *dst, isl_int *src, unsigned len)
int isl_sort(void *const pbase, size_t total_elems, size_t size, int(*cmp)(const void *, const void *, void *arg), void *arg)
uint32_t isl_space_get_tuple_hash(__isl_keep isl_space *space)
__isl_give isl_vec * isl_tab_basic_set_non_trivial_lexmin(__isl_take isl_basic_set *bset, int n_op, int n_region, struct isl_trivial_region *region, int(*conflict)(int con, void *user), void *user)
__isl_null isl_tab_lexmin * isl_tab_lexmin_free(__isl_take isl_tab_lexmin *tl)
int isl_tab_lexmin_dim(__isl_keep isl_tab_lexmin *tl)
__isl_give isl_tab_lexmin * isl_tab_lexmin_cut_to_integer(__isl_take isl_tab_lexmin *tl)
__isl_give isl_vec * isl_tab_lexmin_get_solution(__isl_keep isl_tab_lexmin *tl)
__isl_give isl_tab_lexmin * isl_tab_lexmin_add_eq(__isl_take isl_tab_lexmin *tl, isl_int *eq)
__isl_give isl_tab_lexmin * isl_tab_lexmin_from_basic_set(__isl_take isl_basic_set *bset)
static __isl_give isl_set * split(__isl_take isl_set *empty, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
struct isl_tarjan_graph * isl_tarjan_graph_free(struct isl_tarjan_graph *g)
struct isl_tarjan_graph * isl_tarjan_graph_init(isl_ctx *ctx, int len, isl_bool(*follows)(int i, int j, void *user), void *user)
static bool is_equal(const T &a, const T &b)
static __isl_give isl_union_map * total(__isl_take isl_union_map *umap, __isl_give isl_map *(*fn)(__isl_take isl_map *))
__isl_give isl_union_set * isl_union_set_plain_gist(__isl_take isl_union_set *uset, __isl_take isl_union_set *context)
__isl_give isl_union_set * isl_union_set_combined_lineality_space(__isl_take isl_union_set *uset)
#define isl_union_set_list
__isl_give isl_local_space * isl_local_space_from_space(__isl_take isl_space *space)
__isl_null isl_local_space * isl_local_space_free(__isl_take isl_local_space *ls)
__isl_give isl_local_space * isl_local_space_copy(__isl_keep isl_local_space *ls)
__isl_export __isl_give isl_set * isl_map_domain(__isl_take isl_map *bmap)
__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_intersect(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_export isl_bool isl_map_is_empty(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_map_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_map * isl_map_zip(__isl_take isl_map *map)
__isl_export __isl_give isl_map * isl_map_apply_range(__isl_take isl_map *map1, __isl_take isl_map *map2)
__isl_overload __isl_give isl_map * isl_map_preimage_domain_pw_multi_aff(__isl_take isl_map *map, __isl_take isl_pw_multi_aff *pma)
__isl_give isl_map * isl_map_copy(__isl_keep 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_map * isl_map_order_gt(__isl_take isl_map *map, enum isl_dim_type type1, int pos1, enum isl_dim_type type2, int pos2)
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_bool isl_map_can_zip(__isl_keep isl_map *map)
__isl_export __isl_give isl_set * isl_map_deltas(__isl_take isl_map *map)
isl_bool isl_map_plain_is_empty(__isl_keep isl_map *map)
__isl_export __isl_give isl_map * isl_set_unwrap(__isl_take isl_set *set)
__isl_export __isl_give isl_set * isl_map_wrap(__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_remove_divs(__isl_take isl_map *map)
__isl_overload __isl_give isl_map * isl_map_preimage_range_pw_multi_aff(__isl_take isl_map *map, __isl_take isl_pw_multi_aff *pma)
__isl_give isl_map * isl_map_identity(__isl_take isl_space *space)
__isl_null isl_map * isl_map_free(__isl_take isl_map *map)
__isl_give isl_map * isl_map_project_out(__isl_take isl_map *map, enum isl_dim_type type, unsigned first, unsigned n)
isl_bool isl_map_plain_is_equal(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_export __isl_give isl_set * isl_map_range(__isl_take isl_map *map)
__isl_export isl_bool isl_map_is_subset(__isl_keep isl_map *map1, __isl_keep isl_map *map2)
__isl_give isl_map * isl_map_from_multi_aff(__isl_take isl_multi_aff *maff)
struct isl_basic_set isl_basic_set
__isl_give isl_mat * isl_mat_transpose(__isl_take isl_mat *mat)
__isl_give isl_mat * isl_mat_copy(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_insert_zero_rows(__isl_take isl_mat *mat, unsigned row, unsigned n)
isl_size isl_mat_cols(__isl_keep isl_mat *mat)
isl_size isl_mat_rows(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_left_hermite(__isl_take isl_mat *M, int neg, __isl_give isl_mat **U, __isl_give isl_mat **Q)
__isl_give isl_mat * isl_mat_drop_rows(__isl_take isl_mat *mat, unsigned row, unsigned n)
__isl_give isl_vec * isl_mat_vec_product(__isl_take isl_mat *mat, __isl_take isl_vec *vec)
__isl_give isl_mat * isl_mat_add_rows(__isl_take isl_mat *mat, unsigned n)
__isl_null isl_mat * isl_mat_free(__isl_take isl_mat *mat)
int isl_mat_initial_non_zero_cols(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_alloc(isl_ctx *ctx, unsigned n_row, unsigned n_col)
isl_ctx * isl_mat_get_ctx(__isl_keep isl_mat *mat)
__isl_give isl_mat * isl_mat_set_element_si(__isl_take isl_mat *mat, int row, int col, int v)
#define ISL_SCHEDULE_ALGORITHM_FEAUTRIER
__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_print_str(__isl_take isl_printer *p, const char *s)
__isl_give isl_printer * isl_printer_to_str(isl_ctx *ctx)
static bool any(const std::vector< bool > &vector)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_proximity(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *proximity)
int isl_options_get_schedule_outer_coincidence(isl_ctx *ctx)
__isl_null isl_schedule_constraints * isl_schedule_constraints_free(__isl_take isl_schedule_constraints *sc)
__isl_export __isl_give isl_schedule * isl_schedule_from_domain(__isl_take isl_union_set *domain)
__isl_export __isl_give isl_union_set * isl_schedule_constraints_get_domain(__isl_keep isl_schedule_constraints *sc)
int isl_options_get_schedule_max_coefficient(isl_ctx *ctx)
int isl_options_get_schedule_max_constant_term(isl_ctx *ctx)
int isl_options_get_schedule_serialize_sccs(isl_ctx *ctx)
int isl_options_get_schedule_treat_coalescing(isl_ctx *ctx)
__isl_export __isl_give isl_set * isl_schedule_constraints_get_context(__isl_keep isl_schedule_constraints *sc)
isl_ctx * isl_schedule_constraints_get_ctx(__isl_keep isl_schedule_constraints *sc)
int isl_options_get_schedule_whole_component(isl_ctx *ctx)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_on_domain(__isl_take isl_union_set *domain)
int isl_options_get_schedule_carry_self_first(isl_ctx *ctx)
__isl_export __isl_give isl_schedule_constraints * isl_schedule_constraints_set_validity(__isl_take isl_schedule_constraints *sc, __isl_take isl_union_map *validity)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_band_member_set_coincident(__isl_take isl_schedule_node *node, int pos, int coincident)
__isl_give isl_schedule_node * isl_schedule_node_grandchild(__isl_take isl_schedule_node *node, int pos1, int pos2)
__isl_export __isl_give isl_schedule * isl_schedule_node_get_schedule(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_band_set_permutable(__isl_take isl_schedule_node *node, int permutable)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_insert_partial_schedule(__isl_take isl_schedule_node *node, __isl_take isl_multi_union_pw_aff *schedule)
__isl_give isl_schedule_node * isl_schedule_node_sequence_splice_children(__isl_take isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_from_domain(__isl_take isl_union_set *domain)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_parent(__isl_take isl_schedule_node *node)
__isl_give isl_schedule_node * isl_schedule_node_grandparent(__isl_take isl_schedule_node *node)
__isl_null isl_schedule_node * isl_schedule_node_free(__isl_take isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_insert_sequence(__isl_take isl_schedule_node *node, __isl_take isl_union_set_list *filters)
isl_ctx * isl_schedule_node_get_ctx(__isl_keep isl_schedule_node *node)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_child(__isl_take isl_schedule_node *node, int pos)
__isl_export __isl_give isl_schedule_node * isl_schedule_node_insert_set(__isl_take isl_schedule_node *node, __isl_take isl_union_set_list *filters)
__isl_export __isl_give isl_set * isl_set_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_basic_set * isl_set_unshifted_simple_hull(__isl_take isl_set *set)
isl_size isl_basic_set_dim(__isl_keep isl_basic_set *bset, enum isl_dim_type type)
__isl_give isl_set * isl_set_remove_divs(__isl_take isl_set *set)
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_give isl_basic_set_list * isl_basic_set_list_coefficients(__isl_take isl_basic_set_list *list)
__isl_give isl_space * isl_basic_set_get_space(__isl_keep isl_basic_set *bset)
__isl_overload __isl_give isl_set * isl_set_preimage_multi_aff(__isl_take isl_set *set, __isl_take isl_multi_aff *ma)
const char * isl_set_get_tuple_name(__isl_keep isl_set *set)
__isl_null isl_basic_set * isl_basic_set_free(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_set_simple_hull(__isl_take isl_set *set)
__isl_null isl_set * isl_set_free(__isl_take isl_set *set)
__isl_overload __isl_give isl_set * isl_set_preimage_pw_multi_aff(__isl_take isl_set *set, __isl_take isl_pw_multi_aff *pma)
__isl_give isl_set * isl_set_copy(__isl_keep isl_set *set)
__isl_give isl_set * isl_set_project_out(__isl_take isl_set *set, enum isl_dim_type type, unsigned first, unsigned n)
__isl_give isl_basic_set * isl_basic_set_lower_bound_val(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
__isl_give isl_basic_set * isl_basic_set_remove_divs(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_upper_bound_val(__isl_take isl_basic_set *bset, enum isl_dim_type type, unsigned pos, __isl_take isl_val *value)
__isl_give isl_basic_set * isl_set_coefficients(__isl_take isl_set *set)
isl_size isl_set_dim(__isl_keep isl_set *set, enum isl_dim_type type)
__isl_export __isl_give isl_set * isl_set_intersect(__isl_take isl_set *set1, __isl_take isl_set *set2)
isl_ctx * isl_basic_set_get_ctx(__isl_keep isl_basic_set *bset)
__isl_constructor __isl_give isl_set * isl_set_from_basic_set(__isl_take isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_copy(__isl_keep isl_basic_set *bset)
__isl_give isl_basic_set * isl_basic_set_universe(__isl_take isl_space *space)
__isl_export __isl_give isl_basic_set * isl_set_affine_hull(__isl_take isl_set *set)
__isl_give isl_map * isl_set_project_onto_map(__isl_take isl_set *set, enum isl_dim_type type, unsigned first, unsigned n)
isl_bool isl_set_has_tuple_name(__isl_keep isl_set *set)
__isl_give isl_space * isl_space_set_tuple_id(__isl_take isl_space *space, enum isl_dim_type type, __isl_take isl_id *id)
__isl_null isl_space * isl_space_free(__isl_take isl_space *space)
__isl_give isl_space * isl_space_from_domain(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_reverse(__isl_take isl_space *space)
__isl_export __isl_give isl_space * isl_space_params(__isl_take isl_space *space)
isl_ctx * isl_space_get_ctx(__isl_keep isl_space *space)
__isl_give isl_id * isl_space_get_tuple_id(__isl_keep isl_space *space, enum isl_dim_type type)
__isl_give isl_space * isl_space_set_from_params(__isl_take isl_space *space)
__isl_give isl_space * isl_space_copy(__isl_keep isl_space *space)
__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_give isl_space * isl_space_set_alloc(isl_ctx *ctx, unsigned nparam, unsigned dim)
__isl_export __isl_give isl_space * isl_space_map_from_set(__isl_take isl_space *space)
__isl_give isl_space * isl_space_drop_all_params(__isl_take isl_space *space)
isl_size isl_space_dim(__isl_keep isl_space *space, enum isl_dim_type type)
isl_bool isl_space_has_equal_tuples(__isl_keep isl_space *space1, __isl_keep isl_space *space2)
__isl_give isl_space * isl_space_add_dims(__isl_take isl_space *space, enum isl_dim_type type, unsigned n)
__isl_give isl_space * isl_space_params_alloc(isl_ctx *ctx, unsigned nparam)
__isl_export __isl_give isl_space * isl_space_domain(__isl_take isl_space *space)
struct isl_sched_graph * graph
isl_basic_set_list * inter
isl_basic_set_list * intra
struct isl_exploit_lineality_data lineality
struct isl_sched_graph * graph
isl_union_map * equivalent
int schedule_split_scaled
int schedule_outer_coincidence
unsigned schedule_algorithm
int schedule_maximize_band_depth
struct isl_sched_node * dst
isl_union_map * tagged_validity
isl_union_map * tagged_condition
struct isl_sched_node * src
struct isl_hash_table * node_table
struct isl_sched_graph * root
struct isl_hash_table * edge_table[isl_edge_last+1]
isl_map_to_basic_set * intra_hmap
int max_edge[isl_edge_last+1]
struct isl_sched_node * node
isl_map_to_basic_set * inter_hmap
isl_map_to_basic_set * intra_hmap_param
struct isl_sched_edge * edge
struct isl_trivial_region * region
isl_pw_multi_aff * decompress
__isl_null isl_union_map * isl_union_map_free(__isl_take isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_add_map(__isl_take isl_union_map *umap, __isl_take isl_map *map)
__isl_give isl_map * isl_map_from_union_map(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_deltas(__isl_take isl_union_map *umap)
__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)
__isl_export __isl_give isl_union_map * isl_union_map_subtract_domain(__isl_take isl_union_map *umap, __isl_take isl_union_set *dom)
__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_bool isl_union_map_is_empty(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_range(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_wrap(__isl_take 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_give isl_union_map * isl_union_map_remove_divs(__isl_take isl_union_map *bmap)
__isl_export __isl_give isl_union_map * isl_union_map_subtract_range(__isl_take isl_union_map *umap, __isl_take isl_union_set *dom)
__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_zip(__isl_take isl_union_map *umap)
__isl_export __isl_give isl_union_map * isl_union_set_unwrap(__isl_take isl_union_set *uset)
isl_size isl_union_map_n_map(__isl_keep isl_union_map *umap)
__isl_export __isl_give isl_union_set * isl_union_map_domain(__isl_take isl_union_map *umap)
__isl_give isl_union_map * isl_union_map_intersect_range(__isl_take isl_union_map *umap, __isl_take isl_union_set *uset)
struct isl_union_set isl_union_set
__isl_export __isl_give isl_union_set * isl_union_set_union(__isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
__isl_export __isl_give isl_union_set * isl_union_set_apply(__isl_take isl_union_set *uset, __isl_take isl_union_map *umap)
__isl_export isl_stat isl_union_set_foreach_set(__isl_keep isl_union_set *uset, isl_stat(*fn)(__isl_take isl_set *set, void *user), void *user)
__isl_give isl_union_set * isl_union_set_add_set(__isl_take isl_union_set *uset, __isl_take isl_set *set)
__isl_give isl_union_set * isl_union_set_empty(__isl_take isl_space *space)
__isl_constructor __isl_give isl_union_set * isl_union_set_from_set(__isl_take isl_set *set)
isl_size isl_union_set_n_set(__isl_keep isl_union_set *uset)
__isl_export __isl_give isl_union_set * isl_union_set_coalesce(__isl_take isl_union_set *uset)
__isl_give isl_union_set * isl_union_set_remove_divs(__isl_take isl_union_set *bset)
__isl_give isl_basic_set_list * isl_union_set_get_basic_set_list(__isl_keep isl_union_set *uset)
__isl_give isl_union_set * isl_union_set_copy(__isl_keep isl_union_set *uset)
__isl_export __isl_give isl_union_set * isl_union_set_intersect_params(__isl_take isl_union_set *uset, __isl_take isl_set *set)
__isl_export __isl_give isl_union_set * isl_union_set_subtract(__isl_take isl_union_set *uset1, __isl_take isl_union_set *uset2)
__isl_null isl_union_set * isl_union_set_free(__isl_take isl_union_set *uset)
__isl_give isl_union_set * isl_union_set_project_out_all_params(__isl_take isl_union_set *uset)
__isl_give isl_val * isl_val_copy(__isl_keep isl_val *v)
__isl_give isl_val * isl_val_div_ui(__isl_take isl_val *v1, unsigned long v2)
__isl_export __isl_give isl_val * isl_val_ceil(__isl_take isl_val *v)
__isl_null isl_val * isl_val_free(__isl_take isl_val *v)
__isl_export isl_bool isl_val_is_zero(__isl_keep isl_val *v)
__isl_export __isl_give isl_val * isl_val_neg(__isl_take isl_val *v)
__isl_export isl_bool isl_val_is_int(__isl_keep isl_val *v)
struct isl_multi_val isl_multi_val
isl_ctx * isl_vec_get_ctx(__isl_keep isl_vec *vec)
__isl_null isl_vec * isl_vec_free(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_set_si(__isl_take isl_vec *vec, int v)
__isl_give isl_vec * isl_vec_copy(__isl_keep isl_vec *vec)
__isl_give isl_vec * isl_vec_clr(__isl_take isl_vec *vec)
__isl_give isl_vec * isl_vec_alloc(isl_ctx *ctx, unsigned size)