Polly 22.0.0git
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()

◆ add_non_conditional_constraints()

◆ adjust_maxvar_to_slack()

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

◆ any_no_merge()

◆ bad_cluster()

int bad_cluster ( struct isl_sched_graph * graph)
static

◆ cluster_follows()

◆ cluster_id()

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

Definition at line 258 of file isl_scheduler_clustering.c.

References __isl_give, isl_id_alloc(), and name.

Referenced by cluster_space(), and collect_cluster_map().

◆ cluster_space()

◆ clustering_free()

◆ clustering_init()

◆ collect_cluster_map()

◆ collect_constraints()

◆ collect_domain()

◆ collect_edge_constraints()

◆ compute_maxvar_max_slack()

◆ compute_weights()

◆ copy_partial()

◆ distance_is_bounded()

◆ edge_cluster_exactly()

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

◆ extract_clusters()

◆ extract_node_transformation()

◆ find_proximity()

◆ finish_bands_clustering()

◆ finish_bands_decompose()

◆ get_n_coincident()

int get_n_coincident ( struct isl_sched_graph * graph)
static

◆ has_bounded_distances()

◆ has_single_value()

◆ has_singular_src_or_dst()

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

◆ init_merge_graph()

◆ is_non_empty_proximity()

isl_bool is_non_empty_proximity ( struct isl_sched_edge * edge)
static

◆ isl_schedule_node_compute_wcc_clustering()

◆ limit_maxvar_to_slack()

◆ mark_merge_sccs()

◆ merge()

◆ merge_clusters_along_edge()

◆ node_cluster_exactly()

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()

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

◆ node_transformation()

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

◆ ok_to_merge_coincident()

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

◆ ok_to_merge_proximity()

◆ swap_sched()

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()

◆ try_merge()