Polly 22.0.0git
isl_scheduler.c File Reference
#include <isl_ctx_private.h>
#include <isl_map_private.h>
#include <isl_space_private.h>
#include <isl_aff_private.h>
#include <isl/hash.h>
#include <isl/id.h>
#include <isl/constraint.h>
#include <isl/schedule.h>
#include <isl_schedule_constraints.h>
#include <isl/schedule_node.h>
#include <isl_mat_private.h>
#include <isl_vec_private.h>
#include <isl/set.h>
#include <isl_union_set_private.h>
#include <isl_seq.h>
#include <isl_tab.h>
#include <isl_dim_map.h>
#include <isl/map_to_basic_set.h>
#include <isl_sort.h>
#include <isl_options_private.h>
#include <isl_tarjan.h>
#include <isl_morph.h>
#include <isl/ilp.h>
#include <isl_val_private.h>
#include "isl_scheduler.h"
#include "isl_scheduler_clustering.h"

Go to the source code of this file.

Classes

struct  isl_extract_edge_data
struct  isl_exploit_lineality_data
struct  isl_carry
struct  isl_add_all_constraints_data
struct  isl_sched_count
struct  isl_collect_bounds_data

Functions

static isl_bool node_has_tuples (const void *entry, const void *val)
int isl_sched_node_scc_exactly (struct isl_sched_node *node, int scc)
static int node_scc_at_most (struct isl_sched_node *node, int scc)
static int node_scc_at_least (struct isl_sched_node *node, int scc)
int isl_sched_edge_has_type (struct isl_sched_edge *edge, enum isl_edge_type type)
static void set_type (struct isl_sched_edge *edge, enum isl_edge_type type)
static void clear_type (struct isl_sched_edge *edge, enum isl_edge_type type)
static int is_validity (struct isl_sched_edge *edge)
static void set_validity (struct isl_sched_edge *edge)
int isl_sched_edge_is_proximity (struct isl_sched_edge *edge)
static int is_local (struct isl_sched_edge *edge)
static void set_local (struct isl_sched_edge *edge)
static void clear_local (struct isl_sched_edge *edge)
static int is_coincidence (struct isl_sched_edge *edge)
int isl_sched_edge_is_condition (struct isl_sched_edge *edge)
int isl_sched_edge_is_conditional_validity (struct isl_sched_edge *edge)
static int is_multi_edge_type (struct isl_sched_edge *edge)
static int graph_init_table (isl_ctx *ctx, struct isl_sched_graph *graph)
struct isl_sched_nodeisl_sched_graph_find_node (isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_space *space)
int isl_sched_graph_is_node (struct isl_sched_graph *graph, struct isl_sched_node *node)
static isl_bool edge_has_src_and_dst (const void *entry, const void *val)
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 isl_stat graph_edge_tables_add (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static int graph_init_edge_tables (isl_ctx *ctx, struct isl_sched_graph *graph)
static struct isl_hash_table_entrygraph_find_edge_entry (struct isl_sched_graph *graph, enum isl_edge_type type, struct isl_sched_node *src, struct isl_sched_node *dst)
static struct isl_sched_edgegraph_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 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 struct isl_sched_edgegraph_find_matching_edge (struct isl_sched_graph *graph, struct isl_sched_edge *model)
static isl_stat graph_remove_edge (struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static isl_bool graph_has_any_edge (struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst)
isl_bool isl_sched_graph_has_validity_edge (struct isl_sched_graph *graph, struct isl_sched_node *src, struct isl_sched_node *dst)
static isl_stat graph_alloc (isl_ctx *ctx, struct isl_sched_graph *graph, int n_node, int n_edge)
static void clear_node (struct isl_sched_graph *graph, struct isl_sched_node *node)
void isl_sched_graph_free (isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat init_n_maxvar (__isl_take isl_set *set, void *user)
static isl_stat compute_max_row (struct isl_sched_graph *graph, __isl_keep isl_schedule_constraints *sc)
static isl_bool has_any_defining_equality (__isl_keep isl_basic_set *bset)
static isl_stat set_max_coefficient (isl_ctx *ctx, struct isl_sched_node *node)
static isl_stat compute_max_coefficient (isl_ctx *ctx, struct isl_sched_node *node)
static __isl_give isl_idconstruct_compressed_id (__isl_keep isl_set *set, struct isl_sched_node *node)
static __isl_give isl_mapisolate (__isl_take isl_set *set, int pos)
static __isl_give isl_valcompute_size (__isl_take isl_set *set, int dim)
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 project_out_fixed (struct isl_sched_node *node, __isl_keep isl_set *uncompressed, __isl_take isl_set *set, int pos)
static isl_stat compute_sizes (struct isl_sched_node *node, __isl_keep isl_set *uncompressed)
static isl_stat compute_sizes_and_max (isl_ctx *ctx, struct isl_sched_node *node, __isl_take isl_set *set)
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_stat extract_node (__isl_take isl_set *set, void *user)
static int merge_edge (struct isl_sched_edge *edge1, struct isl_sched_edge *edge2)
static __isl_give isl_mapinsert_dummy_tags (__isl_take isl_map *map)
static __isl_give isl_mapextract_hull (struct isl_sched_node *src, struct isl_sched_node *dst)
static __isl_give isl_mapmap_intersect_domains (__isl_take isl_map *tagged, __isl_keep isl_map *map)
static struct isl_sched_nodefind_domain_node (isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_map *map)
static struct isl_sched_nodefind_range_node (isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_map *map)
static isl_stat skip_edge (__isl_take isl_map *map, __isl_take isl_map *tagged)
static isl_stat extract_edge (__isl_take isl_map *map, void *user)
isl_stat isl_sched_graph_init (struct isl_sched_graph *graph, __isl_keep isl_schedule_constraints *sc)
static isl_bool node_follows_weak (int i, int j, void *user)
static isl_bool node_follows_strong (int i, int j, void *user)
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_stat detect_sccs (isl_ctx *ctx, struct isl_sched_graph *graph)
static isl_stat detect_wccs (isl_ctx *ctx, struct isl_sched_graph *graph)
static int cmp_scc (const void *a, const void *b, void *data)
static int sort_sccs (struct isl_sched_graph *graph)
static __isl_give isl_basic_setget_size_bounds (struct isl_sched_node *node)
static __isl_give isl_mapcompress (__isl_take isl_map *map, struct isl_sched_node *src, struct isl_sched_node *dst)
static __isl_give isl_setdrop_coalescing_constraints (__isl_take isl_set *delta, struct isl_sched_node *node)
static __isl_give isl_basic_setintra_coefficients (struct isl_sched_graph *graph, struct isl_sched_node *node, __isl_take isl_map *map, int need_param)
static __isl_give isl_basic_setinter_coefficients (struct isl_sched_graph *graph, struct isl_sched_edge *edge, __isl_take isl_map *map)
static isl_size coef_var_offset (__isl_keep isl_basic_set *coef)
static int node_cst_coef_offset (struct isl_sched_node *node)
static int node_par_coef_offset (struct isl_sched_node *node)
static int node_var_coef_offset (struct isl_sched_node *node)
static int node_var_coef_pos (struct isl_sched_node *node, int i)
static __isl_give isl_dim_mapintra_dim_map (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *node, int offset, int s)
static __isl_give isl_dim_mapinter_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_basic_setadd_constraints_dim_map (__isl_take isl_basic_set *dst, __isl_take isl_basic_set *src, __isl_take isl_dim_map *dim_map)
static isl_stat add_intra_validity_constraints (struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static isl_stat add_inter_validity_constraints (struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static isl_stat add_intra_proximity_constraints (struct isl_sched_graph *graph, struct isl_sched_edge *edge, int s, int local)
static isl_stat add_inter_proximity_constraints (struct isl_sched_graph *graph, struct isl_sched_edge *edge, int s, int local)
static int force_zero (struct isl_sched_edge *edge, int use_coincidence)
static int add_all_validity_constraints (struct isl_sched_graph *graph, int use_coincidence)
static int add_all_proximity_constraints (struct isl_sched_graph *graph, int use_coincidence)
static __isl_give isl_matnormalize_independent (__isl_take isl_mat *indep)
static __isl_give isl_matextract_linear_schedule (struct isl_sched_node *node)
isl_stat isl_sched_node_update_vmap (struct isl_sched_node *node)
static int is_any_validity (struct isl_sched_edge *edge)
static int edge_multiplicity (struct isl_sched_edge *edge, int use_coincidence)
static int parametric_intra_edge_multiplicity (struct isl_sched_edge *edge, int use_coincidence)
static isl_stat update_count (__isl_take isl_basic_set *bset, int f, int *n_eq, int *n_ineq)
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 int count_constraints (struct isl_sched_graph *graph, int *n_eq, int *n_ineq, int use_coincidence)
static isl_stat count_bound_constant_constraints (isl_ctx *ctx, struct isl_sched_graph *graph, int *n_eq, int *n_ineq)
static isl_stat add_bound_constant_constraints (isl_ctx *ctx, 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_stat node_add_coefficient_constraints (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *node, int max)
static isl_stat add_bound_coefficient_constraints (isl_ctx *ctx, 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 add_param_sum_constraint (struct isl_sched_graph *graph, int sum_pos)
static isl_stat add_var_sum_constraint (struct isl_sched_graph *graph, int sum_pos)
static isl_stat setup_lp (isl_ctx *ctx, struct isl_sched_graph *graph, int use_coincidence)
static int check_conflict (int con, void *user)
static int needs_row (struct isl_sched_graph *graph, struct isl_sched_node *node)
static __isl_give isl_matconstruct_trivial (__isl_keep isl_mat *indep)
static __isl_give isl_vecsolve_lp (isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_vecextract_var_coef (struct isl_sched_node *node, __isl_keep isl_vec *sol)
static int update_schedule (struct isl_sched_graph *graph, __isl_take isl_vec *sol, int coincident)
static __isl_give isl_affextract_schedule_row (__isl_take isl_local_space *ls, struct isl_sched_node *node, int row)
__isl_give isl_multi_affisl_sched_node_extract_partial_schedule_multi_aff (struct isl_sched_node *node, int first, int n)
static __isl_give isl_multi_affnode_extract_schedule_multi_aff (struct isl_sched_node *node)
static __isl_give isl_mapnode_extract_schedule (struct isl_sched_node *node)
static __isl_give isl_mapspecializer (struct isl_sched_node *src, struct isl_sched_node *dst)
static __isl_give isl_union_mapintersect_domains (__isl_take isl_union_map *umap, __isl_keep isl_map *map)
static isl_stat update_edge (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_edge *edge)
static int domain_intersects (__isl_keep isl_union_map *umap, __isl_keep isl_union_set *uset)
static int range_intersects (__isl_keep isl_union_map *umap, __isl_keep isl_union_set *uset)
static int is_condition_false (struct isl_sched_edge *edge)
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 int update_edges (isl_ctx *ctx, struct isl_sched_graph *graph)
static void next_band (struct isl_sched_graph *graph)
static __isl_give isl_union_setisl_sched_graph_domain (isl_ctx *ctx, struct isl_sched_graph *graph, int(*pred)(struct isl_sched_node *node, int data), int data)
__isl_give isl_union_setisl_sched_graph_extract_scc (isl_ctx *ctx, struct isl_sched_graph *graph, int scc)
__isl_give isl_union_set_listisl_sched_graph_extract_sccs (isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_union_set_listextract_split (isl_ctx *ctx, struct isl_sched_graph *graph)
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)
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)
isl_stat isl_sched_graph_compute_maxvar (struct isl_sched_graph *graph)
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_give isl_schedule_nodecompute_schedule (isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_schedule_wcc (isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_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)
int isl_sched_edge_scc_exactly (struct isl_sched_edge *edge, int scc)
static int edge_dst_scc_at_most (struct isl_sched_edge *edge, int scc)
static int edge_src_scc_at_least (struct isl_sched_edge *edge, int scc)
static isl_stat reset_band (struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_split_schedule (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodeinsert_current_band (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int permutable)
static __isl_give isl_schedule_nodecompute_next_band (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int permutable)
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_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 void isl_carry_clear (struct isl_carry *carry)
static struct isl_sched_nodegraph_find_compressed_node (isl_ctx *ctx, struct isl_sched_graph *graph, __isl_keep isl_space *space)
static isl_stat lp_add_intra (__isl_take isl_basic_set *coef, void *user)
static isl_stat lp_add_inter (__isl_take isl_basic_set *coef, void *user)
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)
static isl_stat bset_update_count (__isl_take isl_basic_set *bset, void *user)
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 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)
static __isl_give isl_schedule_nodecompute_component_schedule (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int wcc)
static __isl_give isl_schedule_nodesplit_scaled (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static int is_trivial (struct isl_sched_node *node, __isl_keep isl_vec *sol)
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 __isl_give isl_tab_lexminzero_out_node_coef (__isl_take isl_tab_lexmin *tl, struct isl_sched_node *node, int pos)
static __isl_give isl_vecnon_empty_solution (__isl_keep isl_tab_lexmin *tl)
static int carries_dependences (__isl_keep isl_vec *sol, int n_edge)
static __isl_give isl_vecnon_neg_lexmin (struct isl_sched_graph *graph, __isl_take isl_basic_set *lp, int n_edge, int want_integral)
static __isl_give isl_union_mapadd_intra (__isl_take isl_union_map *umap, struct isl_sched_edge *edge)
static __isl_give isl_union_mapadd_inter (__isl_take isl_union_map *umap, struct isl_sched_edge *edge)
static isl_stat collect_bounds (__isl_take isl_set *set, void *user)
static __isl_give isl_union_setunion_drop_coalescing_constraints (isl_ctx *ctx, struct isl_sched_graph *graph, __isl_take isl_union_set *delta)
static isl_stat add_non_trivial_lineality (__isl_take isl_basic_set *lineality, struct isl_exploit_lineality_data *data)
static isl_stat add_lineality (__isl_take isl_set *set, void *user)
static __isl_give isl_union_setexploit_intra_lineality (__isl_take isl_union_set *intra, struct isl_exploit_lineality_data *data)
static __isl_give isl_union_mapexploit_inter_lineality (__isl_take isl_union_map *inter, struct isl_exploit_lineality_data *data)
static __isl_give isl_union_mapcollect_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_give isl_basic_set_listcollect_intra_validity (isl_ctx *ctx, struct isl_sched_graph *graph, int coincidence, struct isl_exploit_lineality_data *data)
static __isl_give isl_basic_set_listcollect_inter_validity (struct isl_sched_graph *graph, int coincidence, struct isl_exploit_lineality_data *data)
static __isl_give isl_veccompute_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_veccompute_carrying_sol (isl_ctx *ctx, struct isl_sched_graph *graph, int fallback, int coincidence)
static __isl_give isl_schedule_nodecarry (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int fallback, int coincidence)
static __isl_give isl_schedule_nodecarry_fallback (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int coincidence)
static __isl_give isl_schedule_nodecarry_feautrier (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecarry_dependences (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecarry_coincidence (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodesort_statements (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int initialized)
static int has_validity_edges (struct isl_sched_graph *graph)
static int need_feautrier_step (isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_schedule_wcc_feautrier (isl_schedule_node *node, struct isl_sched_graph *graph)
static void clear_local_edges (struct isl_sched_graph *graph)
static int need_condition_check (struct isl_sched_graph *graph)
static int has_any_coincidence (struct isl_sched_graph *graph)
static __isl_give isl_mapfinal_row (struct isl_sched_node *node)
static int is_violated (struct isl_sched_graph *graph, int edge_index)
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)
static int has_violated_conditional_constraint (isl_ctx *ctx, struct isl_sched_graph *graph)
__isl_give isl_schedule_nodeisl_schedule_node_compute_finish_band (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, int initialized)
isl_stat isl_schedule_node_compute_wcc_band (isl_ctx *ctx, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_schedule_wcc_whole (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
static __isl_give isl_schedule_nodecompute_schedule_wcc (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
__isl_give isl_scheduleisl_schedule_constraints_compute_schedule (__isl_take isl_schedule_constraints *sc)
__isl_give isl_scheduleisl_union_set_compute_schedule (__isl_take isl_union_set *domain, __isl_take isl_union_map *validity, __isl_take isl_union_map *proximity)

Function Documentation

◆ add_all_constraints()

◆ add_all_proximity_constraints()

◆ add_all_validity_constraints()

int add_all_validity_constraints ( struct isl_sched_graph * graph,
int use_coincidence )
static

◆ add_bound_coefficient_constraints()

◆ add_bound_constant_constraints()

◆ add_constraints_dim_map()

◆ add_inter()

◆ add_inter_constraints()

◆ add_inter_proximity_constraints()

◆ add_inter_validity_constraints()

◆ add_intra()

◆ add_intra_constraints()

◆ add_intra_proximity_constraints()

◆ add_intra_validity_constraints()

◆ add_lineality()

◆ add_node()

◆ add_non_trivial_lineality()

◆ add_param_sum_constraint()

◆ add_sum_constraint()

isl_stat add_sum_constraint ( struct isl_sched_graph * graph,
int sum_pos,
int first,
int n )
static

◆ add_var_sum_constraint()

◆ bset_update_count()

isl_stat bset_update_count ( __isl_take isl_basic_set * bset,
void * user )
static

◆ carries_dependences()

int carries_dependences ( __isl_keep isl_vec * sol,
int n_edge )
static

Definition at line 4530 of file isl_scheduler.c.

References __isl_keep, isl_int_cmp_si, isl_int_divexact, and isl_int_set_si.

Referenced by non_neg_lexmin().

◆ carry()

◆ carry_coincidence()

__isl_give isl_schedule_node * carry_coincidence ( __isl_take isl_schedule_node * node,
struct isl_sched_graph * graph )
static

Definition at line 5246 of file isl_scheduler.c.

References __isl_give, __isl_take, and carry_fallback().

Referenced by isl_schedule_node_compute_finish_band().

◆ carry_dependences()

__isl_give isl_schedule_node * carry_dependences ( __isl_take isl_schedule_node * node,
struct isl_sched_graph * graph )
static

Definition at line 5235 of file isl_scheduler.c.

References __isl_give, __isl_take, and carry_fallback().

Referenced by isl_schedule_node_compute_finish_band(), and sort_statements().

◆ carry_fallback()

__isl_give isl_schedule_node * carry_fallback ( __isl_take isl_schedule_node * node,
struct isl_sched_graph * graph,
int coincidence )
static

Definition at line 5213 of file isl_scheduler.c.

References __isl_give, __isl_take, and carry().

Referenced by carry_coincidence(), and carry_dependences().

◆ carry_feautrier()

__isl_give isl_schedule_node * carry_feautrier ( __isl_take isl_schedule_node * node,
struct isl_sched_graph * graph )
static

Definition at line 5225 of file isl_scheduler.c.

References __isl_give, __isl_take, and carry().

Referenced by compute_schedule_wcc_feautrier().

◆ check_conflict()

◆ clear_local()

void clear_local ( struct isl_sched_edge * edge)
static

Definition at line 138 of file isl_scheduler.c.

References clear_type(), and isl_edge_local.

Referenced by clear_local_edges().

◆ clear_local_edges()

void clear_local_edges ( struct isl_sched_graph * graph)
static

◆ clear_node()

◆ clear_type()

void clear_type ( struct isl_sched_edge * edge,
enum isl_edge_type type )
static

Definition at line 96 of file isl_scheduler.c.

References ISL_FL_CLR, type, and isl_sched_edge::types.

Referenced by clear_local().

◆ cmp_scc()

int cmp_scc ( const void * a,
const void * b,
void * data )
static

Definition at line 1487 of file isl_scheduler.c.

References a(), b(), isl_sched_graph::node, and isl_sched_node::scc.

Referenced by sort_sccs().

◆ coef_var_offset()

◆ collect_bounds()

◆ collect_inter_validity()

◆ collect_intra_validity()

◆ collect_validity()

◆ compress()

◆ compress_node()

◆ compute_carrying_sol()

__isl_give isl_vec * compute_carrying_sol ( isl_ctx * ctx,
struct isl_sched_graph * graph,
int fallback,
int coincidence )
static

◆ compute_carrying_sol_coef()

__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

◆ compute_component_schedule()

◆ compute_max_coefficient()

◆ compute_max_row()

◆ compute_next_band()

◆ compute_schedule()

◆ compute_schedule_wcc() [1/2]

◆ compute_schedule_wcc() [2/2]

__isl_give isl_schedule_node * compute_schedule_wcc ( isl_schedule_node * node,
struct isl_sched_graph * graph )
static

References __isl_give.

Referenced by compute_schedule(), and compute_sub_schedule().

◆ compute_schedule_wcc_feautrier()

__isl_give isl_schedule_node * compute_schedule_wcc_feautrier ( isl_schedule_node * node,
struct isl_sched_graph * graph )
static

Definition at line 5350 of file isl_scheduler.c.

References __isl_give, and carry_feautrier().

Referenced by compute_schedule_wcc().

◆ compute_schedule_wcc_whole()

◆ compute_size()

◆ compute_sizes()

◆ compute_sizes_and_max()

◆ compute_split_schedule()

◆ compute_sub_schedule()

__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 )
static

◆ construct_compressed_id()

◆ construct_trivial()

__isl_give isl_mat * construct_trivial ( __isl_keep isl_mat * indep)
static

◆ copy_edges()

◆ copy_nodes()

◆ count_all_constraints()

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

◆ count_bound_coefficient_constraints()

int count_bound_coefficient_constraints ( isl_ctx * ctx,
struct isl_sched_graph * graph,
int * n_eq,
int * n_ineq )
static

◆ count_bound_constant_constraints()

isl_stat count_bound_constant_constraints ( isl_ctx * ctx,
struct isl_sched_graph * graph,
int * n_eq,
int * n_ineq )
static

Definition at line 2448 of file isl_scheduler.c.

References isl_options_get_schedule_max_constant_term(), isl_stat_ok, and isl_sched_graph::n.

Referenced by setup_lp().

◆ count_constraints()

int count_constraints ( struct isl_sched_graph * graph,
int * n_eq,
int * n_ineq,
int use_coincidence )
static

◆ count_map_constraints()

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

◆ detect_sccs()

isl_stat detect_sccs ( isl_ctx * ctx,
struct isl_sched_graph * graph )
static

◆ detect_wccs()

isl_stat detect_wccs ( isl_ctx * ctx,
struct isl_sched_graph * graph )
static

◆ domain_intersects()

◆ drop_coalescing_constraints()

◆ edge_dst_scc_at_most()

int edge_dst_scc_at_most ( struct isl_sched_edge * edge,
int scc )
static

◆ edge_has_src_and_dst()

isl_bool edge_has_src_and_dst ( const void * entry,
const void * val )
static

◆ edge_multiplicity()

int edge_multiplicity ( struct isl_sched_edge * edge,
int use_coincidence )
static

Definition at line 2311 of file isl_scheduler.c.

References force_zero(), is_validity(), and isl_sched_edge_is_proximity().

Referenced by count_map_constraints().

◆ edge_src_scc_at_least()

int edge_src_scc_at_least ( struct isl_sched_edge * edge,
int scc )
static

◆ exploit_inter_lineality()

◆ exploit_intra_lineality()

◆ extract_edge()

◆ extract_hull()

◆ extract_linear_schedule()

__isl_give isl_mat * extract_linear_schedule ( struct isl_sched_node * node)
static

◆ extract_node()

◆ extract_schedule_row()

◆ extract_split()

◆ extract_var_coef()

◆ final_row()

◆ find_domain_node()

struct isl_sched_node * find_domain_node ( isl_ctx * ctx,
struct isl_sched_graph * graph,
__isl_keep isl_map * map )
static

◆ find_node_coalescing()

◆ find_range_node()

struct isl_sched_node * find_range_node ( isl_ctx * ctx,
struct isl_sched_graph * graph,
__isl_keep isl_map * map )
static

◆ force_zero()

int force_zero ( struct isl_sched_edge * edge,
int use_coincidence )
static

◆ get_size_bounds()

◆ graph_alloc()

◆ graph_edge_table_add()

◆ graph_edge_tables_add()

isl_stat graph_edge_tables_add ( isl_ctx * ctx,
struct isl_sched_graph * graph,
struct isl_sched_edge * edge )
static

◆ graph_find_compressed_node()

◆ graph_find_edge()

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

◆ graph_find_edge_entry()

◆ graph_find_matching_edge()

struct isl_sched_edge * graph_find_matching_edge ( struct isl_sched_graph * graph,
struct isl_sched_edge * model )
static

◆ graph_has_any_edge()

isl_bool graph_has_any_edge ( struct isl_sched_graph * graph,
struct isl_sched_node * src,
struct isl_sched_node * dst )
static

Definition at line 419 of file isl_scheduler.c.

References graph_has_edge(), isl_edge_first, and isl_edge_last.

Referenced by node_follows_weak().

◆ graph_has_edge()

◆ graph_init_edge_tables()

int graph_init_edge_tables ( isl_ctx * ctx,
struct isl_sched_graph * graph )
static

◆ graph_init_table()

◆ graph_remove_edge()

◆ has_adjacent_true_conditions()

◆ has_any_coincidence()

int has_any_coincidence ( struct isl_sched_graph * graph)
static

◆ has_any_defining_equality()

isl_bool has_any_defining_equality ( __isl_keep isl_basic_set * bset)
static

◆ has_validity_edges()

int has_validity_edges ( struct isl_sched_graph * graph)
static

◆ has_violated_conditional_constraint()

◆ init_n_maxvar()

isl_stat init_n_maxvar ( __isl_take isl_set * set,
void * user )
static

◆ insert_current_band()

◆ insert_dummy_tags()

◆ inter_coefficients()

◆ inter_dim_map()

◆ intersect_domains()

◆ intra_coefficients()

◆ intra_dim_map()

◆ is_any_trivial()

int is_any_trivial ( struct isl_sched_graph * graph,
__isl_keep isl_vec * sol )
static

Definition at line 4381 of file isl_scheduler.c.

References __isl_keep, is_trivial(), isl_sched_graph::n, needs_row(), and isl_sched_graph::node.

Referenced by carry().

◆ is_any_validity()

int is_any_validity ( struct isl_sched_edge * edge)
static

◆ is_coincidence()

int is_coincidence ( struct isl_sched_edge * edge)
static

◆ is_condition_false()

◆ is_local()

int is_local ( struct isl_sched_edge * edge)
static

◆ is_multi_edge_type()

int is_multi_edge_type ( struct isl_sched_edge * edge)
static

◆ is_trivial()

◆ is_validity()

◆ is_violated()

◆ isl_carry_clear()

void isl_carry_clear ( struct isl_carry * carry)
static

Definition at line 3977 of file isl_scheduler.c.

References carry(), isl_union_map_free(), and isl_union_set_free().

Referenced by compute_carrying_sol().

◆ isl_sched_edge_has_type()

◆ isl_sched_edge_is_condition()

◆ isl_sched_edge_is_conditional_validity()

◆ isl_sched_edge_is_proximity()

◆ isl_sched_edge_scc_exactly()

int isl_sched_edge_scc_exactly ( struct isl_sched_edge * edge,
int scc )

◆ isl_sched_graph_compute_maxvar()

◆ isl_sched_graph_detect_ccs()

◆ isl_sched_graph_domain()

◆ isl_sched_graph_extract_scc()

__isl_give isl_union_set * isl_sched_graph_extract_scc ( isl_ctx * ctx,
struct isl_sched_graph * graph,
int scc )

◆ isl_sched_graph_extract_sccs()

◆ isl_sched_graph_extract_sub_graph()

◆ isl_sched_graph_find_node()

◆ isl_sched_graph_free()

◆ isl_sched_graph_has_validity_edge()

isl_bool isl_sched_graph_has_validity_edge ( struct isl_sched_graph * graph,
struct isl_sched_node * src,
struct isl_sched_node * dst )

◆ isl_sched_graph_init()

◆ isl_sched_graph_is_node()

int isl_sched_graph_is_node ( struct isl_sched_graph * graph,
struct isl_sched_node * node )

◆ isl_sched_node_extract_partial_schedule_multi_aff()

◆ isl_sched_node_scc_exactly()

int isl_sched_node_scc_exactly ( struct isl_sched_node * node,
int scc )

◆ isl_sched_node_update_vmap()

◆ isl_schedule_constraints_compute_schedule()

◆ isl_schedule_node_compute_finish_band()

◆ isl_schedule_node_compute_wcc_band()

◆ isl_union_set_compute_schedule()

◆ isolate()

◆ lp_add_inter()

◆ lp_add_intra()

◆ map_intersect_domains()

__isl_give isl_map * map_intersect_domains ( __isl_take isl_map * tagged,
__isl_keep isl_map * map )
static

◆ merge_edge()

◆ need_condition_check()

◆ need_feautrier_step()

int need_feautrier_step ( isl_ctx * ctx,
struct isl_sched_graph * graph )
static

◆ needs_row()

int needs_row ( struct isl_sched_graph * graph,
struct isl_sched_node * node )
static

◆ next_band()

void next_band ( struct isl_sched_graph * graph)
static

◆ node_add_coefficient_constraints()

◆ node_cst_coef_offset()

int node_cst_coef_offset ( struct isl_sched_node * node)
static

◆ node_extract_schedule()

__isl_give isl_map * node_extract_schedule ( struct isl_sched_node * node)
static

◆ node_extract_schedule_multi_aff()

__isl_give isl_multi_aff * node_extract_schedule_multi_aff ( struct isl_sched_node * node)
static

◆ node_follows_strong()

isl_bool node_follows_strong ( int i,
int j,
void * user )
static

Definition at line 1427 of file isl_scheduler.c.

References isl_sched_graph_has_validity_edge(), isl_sched_graph::node, and user.

Referenced by detect_sccs().

◆ node_follows_weak()

isl_bool node_follows_weak ( int i,
int j,
void * user )
static

Definition at line 1413 of file isl_scheduler.c.

References f, graph_has_any_edge(), isl_sched_graph::node, and user.

Referenced by detect_wccs().

◆ node_has_tuples()

isl_bool node_has_tuples ( const void * entry,
const void * val )
static

◆ node_par_coef_offset()

int node_par_coef_offset ( struct isl_sched_node * node)
static

◆ node_scc_at_least()

int node_scc_at_least ( struct isl_sched_node * node,
int scc )
static

Definition at line 74 of file isl_scheduler.c.

References isl_sched_node::scc.

Referenced by compute_split_schedule(), and extract_split().

◆ node_scc_at_most()

int node_scc_at_most ( struct isl_sched_node * node,
int scc )
static

Definition at line 69 of file isl_scheduler.c.

References isl_sched_node::scc.

Referenced by compute_split_schedule(), and extract_split().

◆ node_var_coef_offset()

int node_var_coef_offset ( struct isl_sched_node * node)
static

◆ node_var_coef_pos()

int node_var_coef_pos ( struct isl_sched_node * node,
int i )
static

◆ non_empty_solution()

◆ non_neg_lexmin()

◆ normalize_independent()

__isl_give isl_mat * normalize_independent ( __isl_take isl_mat * indep)
static

◆ parametric_intra_edge_multiplicity()

int parametric_intra_edge_multiplicity ( struct isl_sched_edge * edge,
int use_coincidence )
static

◆ project_out_fixed()

◆ range_intersects()

◆ reset_band()

◆ set_local()

void set_local ( struct isl_sched_edge * edge)
static

Definition at line 131 of file isl_scheduler.c.

References isl_edge_local, and set_type.

Referenced by has_adjacent_true_conditions().

◆ set_max_coefficient()

◆ set_type()

void set_type ( struct isl_sched_edge * edge,
enum isl_edge_type type )
static

Definition at line 89 of file isl_scheduler.c.

References ISL_FL_SET, type, and isl_sched_edge::types.

◆ set_validity()

void set_validity ( struct isl_sched_edge * edge)
static

Definition at line 110 of file isl_scheduler.c.

References isl_edge_validity, and set_type.

Referenced by unconditionalize_adjacent_validity().

◆ setup_carry_lp()

◆ setup_lp()

◆ skip_edge()

isl_stat skip_edge ( __isl_take isl_map * map,
__isl_take isl_map * tagged )
static

Definition at line 1228 of file isl_scheduler.c.

References __isl_take, isl_map_free(), isl_stat_ok, and map.

Referenced by extract_edge().

◆ solve_lp()

◆ sort_sccs()

int sort_sccs ( struct isl_sched_graph * graph)
static

◆ sort_statements()

◆ specializer()

__isl_give isl_map * specializer ( struct isl_sched_node * src,
struct isl_sched_node * dst )
static

Definition at line 3137 of file isl_scheduler.c.

References __isl_give, isl_map_apply_range(), isl_map_reverse(), and node_extract_schedule().

Referenced by update_edge().

◆ split_scaled()

◆ unconditionalize_adjacent_validity()

◆ union_drop_coalescing_constraints()

◆ update_count()

isl_stat update_count ( __isl_take isl_basic_set * bset,
int f,
int * n_eq,
int * n_ineq )
static

◆ update_edge()

◆ update_edges()

◆ update_schedule()

◆ zero_out_node_coef()