xref: /llvm-project/polly/lib/External/isl/isl_scheduler_clustering.h (revision a749e09e184b2b0b6dde71af01c82dd427b3e3e2)
1 #ifndef ISL_SCHEDULER_CLUSTERING_H
2 #define ISL_SCHEDULER_CLUSTERING_H
3 
4 #include "isl_scheduler.h"
5 
6 /* Clustering information used by isl_schedule_node_compute_wcc_clustering.
7  *
8  * "n" is the number of SCCs in the original dependence graph
9  * "scc" is an array of "n" elements, each representing an SCC
10  * of the original dependence graph.  All entries in the same cluster
11  * have the same number of schedule rows.
12  * "scc_cluster" maps each SCC index to the cluster to which it belongs,
13  * where each cluster is represented by the index of the first SCC
14  * in the cluster.  Initially, each SCC belongs to a cluster containing
15  * only that SCC.
16  *
17  * "scc_in_merge" is used by merge_clusters_along_edge to keep
18  * track of which SCCs need to be merged.
19  *
20  * "cluster" contains the merged clusters of SCCs after the clustering
21  * has completed.
22  *
23  * "scc_node" is a temporary data structure used inside copy_partial.
24  * For each SCC, it keeps track of the number of nodes in the SCC
25  * that have already been copied.
26  */
27 struct isl_clustering {
28 	int n;
29 	struct isl_sched_graph *scc;
30 	struct isl_sched_graph *cluster;
31 	int *scc_cluster;
32 	int *scc_node;
33 	int *scc_in_merge;
34 };
35 
36 __isl_give isl_schedule_node *isl_schedule_node_compute_wcc_clustering(
37 	__isl_take isl_schedule_node *node, struct isl_sched_graph *graph);
38 
39 #endif
40