Polly 20.0.0git
Classes | Functions
isl_scheduler_clustering.c File Reference
#include "isl_map_private.h"
#include <isl/id.h>
#include <isl/schedule_node.h>
#include <isl/union_set.h>
#include "isl_mat_private.h"
#include "isl_scheduler_clustering.h"
#include "isl_scheduler_scc.h"
#include "isl_seq.h"
#include "isl_tarjan.h"

Go to the source code of this file.

Classes

struct  isl_mark_merge_sccs_data
 

Functions

static isl_stat clustering_init (isl_ctx *ctx, struct isl_clustering *c, struct isl_sched_graph *graph)
 
static void clustering_free (isl_ctx *ctx, struct isl_clustering *c)
 
static int bad_cluster (struct isl_sched_graph *graph)
 
static isl_bool is_non_empty_proximity (struct isl_sched_edge *edge)
 
static int find_proximity (struct isl_sched_graph *graph, struct isl_clustering *c)
 
static isl_bool cluster_follows (int i, int j, void *user)
 
static isl_stat mark_merge_sccs (isl_ctx *ctx, struct isl_sched_graph *graph, int edge, struct isl_clustering *c)
 
static __isl_give isl_idcluster_id (isl_ctx *ctx, int i)
 
static __isl_give isl_spacecluster_space (struct isl_sched_graph *scc, int i)
 
static __isl_give isl_union_setcollect_domain (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c)
 
static __isl_give isl_union_mapcollect_cluster_map (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c)
 
static __isl_give isl_schedule_constraintsadd_non_conditional_constraints (struct isl_sched_edge *edge, __isl_keep isl_union_map *umap, __isl_take isl_schedule_constraints *sc)
 
static __isl_give isl_schedule_constraintsadd_conditional_constraints (struct isl_sched_edge *edge, __isl_keep isl_union_map *umap, __isl_take isl_schedule_constraints *sc)
 
static __isl_give isl_schedule_constraintscollect_edge_constraints (struct isl_sched_edge *edge, __isl_keep isl_union_map *cluster_map, __isl_take isl_schedule_constraints *sc)
 
static __isl_give isl_schedule_constraintscollect_constraints (struct isl_sched_graph *graph, int *scc_in_merge, __isl_keep isl_union_map *cluster_map, __isl_take isl_schedule_constraints *sc)
 
static isl_stat init_merge_graph (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static isl_size compute_maxvar_max_slack (int maxvar, struct isl_clustering *c)
 
static isl_size limit_maxvar_to_slack (int maxvar, int max_slack, struct isl_clustering *c)
 
static isl_stat adjust_maxvar_to_slack (isl_ctx *ctx, struct isl_sched_graph *merge_graph, struct isl_clustering *c)
 
static int get_n_coincident (struct isl_sched_graph *graph)
 
static isl_bool ok_to_merge_coincident (struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static __isl_give isl_mapextract_node_transformation (isl_ctx *ctx, struct isl_sched_node *node, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static isl_bool distance_is_bounded (__isl_keep isl_set *set, int pos)
 
static isl_bool has_single_value (__isl_keep isl_set *set, int pos)
 
static isl_bool has_singular_src_or_dst (__isl_keep isl_map *map, int pos)
 
static isl_bool has_bounded_distances (isl_ctx *ctx, struct isl_sched_edge *edge, struct isl_sched_graph *graph, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static isl_bool ok_to_merge_proximity (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static isl_bool ok_to_merge (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static __isl_give isl_matnode_transformation (isl_ctx *ctx, struct isl_sched_node *t_node, struct isl_sched_node *node, int first, int n)
 
static isl_stat transform (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_sched_node *t_node)
 
static isl_stat merge (isl_ctx *ctx, struct isl_clustering *c, struct isl_sched_graph *merge_graph)
 
static isl_bool try_merge (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c)
 
static int any_no_merge (struct isl_sched_graph *graph, int *scc_in_merge, struct isl_sched_edge *merge_edge)
 
static isl_stat merge_clusters_along_edge (isl_ctx *ctx, struct isl_sched_graph *graph, int edge, struct isl_clustering *c)
 
static int node_cluster_exactly (struct isl_sched_node *node, int cluster)
 
static int edge_cluster_exactly (struct isl_sched_edge *edge, int cluster)
 
static void swap_sched (struct isl_sched_node *node1, struct isl_sched_node *node2)
 
static isl_stat copy_partial (struct isl_sched_graph *graph, struct isl_clustering *c, int pos)
 
static isl_bool node_follows_strong_or_same_cluster (int i, int j, void *user)
 
static isl_stat extract_clusters (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c)
 
static isl_stat compute_weights (struct isl_sched_graph *graph, struct isl_clustering *c)
 
static __isl_give isl_schedule_nodefinish_bands_decompose (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, struct isl_clustering *c)
 
static __isl_give isl_schedule_nodefinish_bands_clustering (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph, struct isl_clustering *c)
 
__isl_give isl_schedule_nodeisl_schedule_node_compute_wcc_clustering (__isl_take isl_schedule_node *node, struct isl_sched_graph *graph)
 

Function Documentation

◆ add_conditional_constraints()

static __isl_give isl_schedule_constraints * add_conditional_constraints ( struct isl_sched_edge edge,
__isl_keep isl_union_map umap,
__isl_take isl_schedule_constraints sc 
)
static

◆ add_non_conditional_constraints()

static __isl_give isl_schedule_constraints * add_non_conditional_constraints ( struct isl_sched_edge edge,
__isl_keep isl_union_map umap,
__isl_take isl_schedule_constraints sc 
)
static

◆ adjust_maxvar_to_slack()

static isl_stat adjust_maxvar_to_slack ( isl_ctx ctx,
struct isl_sched_graph merge_graph,
struct isl_clustering c 
)
static

◆ any_no_merge()

static int any_no_merge ( struct isl_sched_graph graph,
int *  scc_in_merge,
struct isl_sched_edge merge_edge 
)
static

◆ bad_cluster()

static int bad_cluster ( struct isl_sched_graph graph)
static

◆ cluster_follows()

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

◆ cluster_id()

static __isl_give isl_id * cluster_id ( isl_ctx ctx,
int  i 
)
static

Definition at line 258 of file isl_scheduler_clustering.c.

References isl_id_alloc(), and name.

Referenced by cluster_space(), and collect_cluster_map().

◆ cluster_space()

static __isl_give isl_space * cluster_space ( struct isl_sched_graph scc,
int  i 
)
static

◆ clustering_free()

static void clustering_free ( isl_ctx ctx,
struct isl_clustering c 
)
static

◆ clustering_init()

static isl_stat clustering_init ( isl_ctx ctx,
struct isl_clustering c,
struct isl_sched_graph graph 
)
static

◆ collect_cluster_map()

static __isl_give isl_union_map * collect_cluster_map ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ collect_constraints()

static __isl_give isl_schedule_constraints * collect_constraints ( struct isl_sched_graph graph,
int *  scc_in_merge,
__isl_keep isl_union_map cluster_map,
__isl_take isl_schedule_constraints sc 
)
static

◆ collect_domain()

static __isl_give isl_union_set * collect_domain ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ collect_edge_constraints()

static __isl_give isl_schedule_constraints * collect_edge_constraints ( struct isl_sched_edge edge,
__isl_keep isl_union_map cluster_map,
__isl_take isl_schedule_constraints sc 
)
static

◆ compute_maxvar_max_slack()

static isl_size compute_maxvar_max_slack ( int  maxvar,
struct isl_clustering c 
)
static

◆ compute_weights()

static isl_stat compute_weights ( struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ copy_partial()

static isl_stat copy_partial ( struct isl_sched_graph graph,
struct isl_clustering c,
int  pos 
)
static

◆ distance_is_bounded()

static isl_bool distance_is_bounded ( __isl_keep isl_set set,
int  pos 
)
static

◆ edge_cluster_exactly()

static int edge_cluster_exactly ( struct isl_sched_edge edge,
int  cluster 
)
static

◆ extract_clusters()

static isl_stat extract_clusters ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ extract_node_transformation()

static __isl_give isl_map * extract_node_transformation ( isl_ctx ctx,
struct isl_sched_node node,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ find_proximity()

static int find_proximity ( struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ finish_bands_clustering()

static __isl_give isl_schedule_node * finish_bands_clustering ( __isl_take isl_schedule_node node,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ finish_bands_decompose()

static __isl_give isl_schedule_node * finish_bands_decompose ( __isl_take isl_schedule_node node,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static

◆ get_n_coincident()

static int get_n_coincident ( struct isl_sched_graph graph)
static

◆ has_bounded_distances()

static isl_bool has_bounded_distances ( isl_ctx ctx,
struct isl_sched_edge edge,
struct isl_sched_graph graph,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ has_single_value()

static isl_bool has_single_value ( __isl_keep isl_set set,
int  pos 
)
static

◆ has_singular_src_or_dst()

static isl_bool has_singular_src_or_dst ( __isl_keep isl_map map,
int  pos 
)
static

◆ init_merge_graph()

static isl_stat init_merge_graph ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ is_non_empty_proximity()

static isl_bool is_non_empty_proximity ( struct isl_sched_edge edge)
static

◆ isl_schedule_node_compute_wcc_clustering()

__isl_give isl_schedule_node * isl_schedule_node_compute_wcc_clustering ( __isl_take isl_schedule_node node,
struct isl_sched_graph graph 
)

◆ limit_maxvar_to_slack()

static isl_size limit_maxvar_to_slack ( int  maxvar,
int  max_slack,
struct isl_clustering c 
)
static

◆ mark_merge_sccs()

static isl_stat mark_merge_sccs ( isl_ctx ctx,
struct isl_sched_graph graph,
int  edge,
struct isl_clustering c 
)
static

◆ merge()

static isl_stat merge ( isl_ctx ctx,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ merge_clusters_along_edge()

static isl_stat merge_clusters_along_edge ( isl_ctx ctx,
struct isl_sched_graph graph,
int  edge,
struct isl_clustering c 
)
static

◆ node_cluster_exactly()

static int node_cluster_exactly ( struct isl_sched_node node,
int  cluster 
)
static

Definition at line 1233 of file isl_scheduler_clustering.c.

References isl_sched_node::cluster.

Referenced by extract_clusters().

◆ node_follows_strong_or_same_cluster()

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

◆ node_transformation()

static __isl_give isl_mat * node_transformation ( isl_ctx ctx,
struct isl_sched_node t_node,
struct isl_sched_node node,
int  first,
int  n 
)
static

◆ ok_to_merge()

static isl_bool ok_to_merge ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ ok_to_merge_coincident()

static isl_bool ok_to_merge_coincident ( struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ ok_to_merge_proximity()

static isl_bool ok_to_merge_proximity ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c,
struct isl_sched_graph merge_graph 
)
static

◆ swap_sched()

static void swap_sched ( struct isl_sched_node node1,
struct isl_sched_node node2 
)
static

Definition at line 1251 of file isl_scheduler_clustering.c.

References isl_sched_node::sched, and isl_sched_node::sched_map.

Referenced by copy_partial().

◆ transform()

static isl_stat transform ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_sched_node t_node 
)
static

◆ try_merge()

static isl_bool try_merge ( isl_ctx ctx,
struct isl_sched_graph graph,
struct isl_clustering c 
)
static