Polly 22.0.0git
isl_scheduler_scc.c File Reference
#include <stdio.h>
#include <isl/ctx.h>
#include <isl/schedule_node.h>
#include <isl/union_set.h>
#include "isl_hash_private.h"
#include "isl_scheduler_scc.h"
#include "isl_sort.h"

Go to the source code of this file.

Classes

struct  isl_scc_graph
struct  isl_edge_src
struct  isl_extract_dst_data
struct  isl_foreach_reachable_data
struct  isl_copy_edge_data
struct  isl_merge_src_dst_data

Functions

static isl_stat print_edge (void **entry, void *user)
void isl_scc_graph_dump (struct isl_scc_graph *scc_graph)
struct isl_scc_graphisl_scc_graph_free (struct isl_scc_graph *scc_graph)
static void * isl_scc_graph_encode_local_index (struct isl_scc_graph *scc_graph, int pos)
static int isl_scc_graph_local_index (struct isl_scc_graph *scc_graph, int *data)
static isl_bool is_scc_node (const void *entry, const void *val)
struct isl_hash_table_entryisl_scc_graph_find_edge (struct isl_scc_graph *scc_graph, struct isl_hash_table **edge_table, int src, int dst, int reserve)
static isl_bool isl_scc_graph_remove_edge (struct isl_scc_graph *scc_graph, int src, int dst)
static isl_stat extract_dst (void **entry, void *user)
static int cmp_int (const void *a, const void *b, void *data)
static int * next_nodes (struct isl_scc_graph *scc_graph, int i)
static isl_stat foreach_reachable (struct isl_foreach_reachable_data *data, int pos)
static isl_stat recurse_foreach_reachable (void **entry, void *user)
static isl_bool elim_or_next (int pos, void *user)
static struct isl_scc_graphisl_scc_graph_reduce (struct isl_scc_graph *scc_graph)
static isl_stat isl_scc_graph_add_edge (struct isl_scc_graph *scc_graph, struct isl_hash_table **edge_table, int src, int dst)
static isl_stat add_reverse (void **entry, void *user)
static struct isl_scc_graphisl_scc_graph_add_reverse_edges (struct isl_scc_graph *scc_graph)
static isl_stat add_scc_edge (void **entry, void *user)
static struct isl_scc_graphisl_scc_graph_alloc (isl_ctx *ctx, int n, struct isl_sched_graph *graph, struct isl_clustering *c)
struct isl_scc_graphisl_scc_graph_from_sched_graph (isl_ctx *ctx, struct isl_sched_graph *graph, struct isl_clustering *c)
static isl_stat copy_edge (void **entry, void *user)
static struct isl_scc_graphisl_scc_graph_sub (struct isl_scc_graph *scc_graph, int *pos, int n)
static __isl_give isl_union_setisl_scc_graph_extract_local_scc (struct isl_scc_graph *scc_graph, int pos)
static __isl_give isl_union_set_listadd_scc_seq (struct isl_scc_graph *scc_graph, int(*el)(int i, void *user), void *user, int n, __isl_take isl_union_set_list *list)
static int offset (int i, void *user)
static __isl_give isl_union_set_listisl_scc_graph_add_scc_seq (struct isl_scc_graph *scc_graph, int first, int n, __isl_take isl_union_set_list *list)
static int at (int i, void *user)
static __isl_give isl_union_set_listisl_scc_graph_add_scc_indirect_seq (struct isl_scc_graph *scc_graph, int *seq, int n, __isl_take isl_union_set_list *list)
static __isl_give isl_union_set_listextract_split_scc (struct isl_scc_graph *scc_graph, int pos)
static __isl_give isl_schedule_nodeisl_scc_graph_finish_band (struct isl_scc_graph *scc_graph, __isl_take isl_schedule_node *node, int pos)
static __isl_give isl_schedule_nodeisl_scc_graph_chain (struct isl_scc_graph *scc_graph, __isl_take isl_schedule_node *node)
static __isl_give isl_schedule_noderecurse (struct isl_scc_graph *scc_graph, int *pos, int n, __isl_take isl_schedule_node *node)
static void isl_scc_graph_init_component (struct isl_scc_graph *scc_graph)
static int assign (int *component, int a, int b)
static void isl_scc_graph_merge_src_dst (struct isl_scc_graph *scc_graph, int a, int b)
static isl_stat merge_src_dst (void **entry, void *user)
static isl_stat isl_scc_graph_merge_components (struct isl_scc_graph *scc_graph, int first, int n)
static int isl_scc_graph_sort_components (struct isl_scc_graph *scc_graph, int first, int n)
static __isl_give isl_union_set_listextract_components (struct isl_scc_graph *scc_graph, int first, int n_component)
static __isl_give isl_schedule_nodedetect_components (struct isl_scc_graph *scc_graph, int first, int n, __isl_take isl_schedule_node *node)
static __isl_give isl_schedule_nodedetect_components_at (struct isl_scc_graph *scc_graph, int first, int n, __isl_take isl_schedule_node *node, int child)
static int best_split (struct isl_scc_graph *scc_graph)
__isl_give isl_schedule_nodeisl_scc_graph_decompose (struct isl_scc_graph *scc_graph, __isl_take isl_schedule_node *node)

Function Documentation

◆ add_reverse()

◆ add_scc_edge()

isl_stat add_scc_edge ( void ** entry,
void * user )
static

◆ add_scc_seq()

◆ assign()

int assign ( int * component,
int a,
int b )
static

Definition at line 873 of file isl_scheduler_scc.c.

References a(), b(), isl_scc_graph::component, and t.

Referenced by isl_scc_graph_merge_src_dst().

◆ at()

int at ( int i,
void * user )
static

Definition at line 742 of file isl_scheduler_scc.c.

References user.

Referenced by isl_scc_graph_add_scc_indirect_seq(), and sort_divs().

◆ best_split()

◆ cmp_int()

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

Definition at line 270 of file isl_scheduler_scc.c.

References a(), and b().

Referenced by next_nodes().

◆ copy_edge()

◆ detect_components()

◆ detect_components_at()

__isl_give isl_schedule_node * detect_components_at ( struct isl_scc_graph * scc_graph,
int first,
int n,
__isl_take isl_schedule_node * node,
int child )
static

◆ elim_or_next()

isl_bool elim_or_next ( int pos,
void * user )
static

◆ extract_components()

__isl_give isl_union_set_list * extract_components ( struct isl_scc_graph * scc_graph,
int first,
int n_component )
static

◆ extract_dst()

isl_stat extract_dst ( void ** entry,
void * user )
static

◆ extract_split_scc()

◆ foreach_reachable()

◆ is_scc_node()

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

Definition at line 188 of file isl_scheduler_scc.c.

References val.

Referenced by isl_scc_graph_find_edge().

◆ isl_scc_graph_add_edge()

isl_stat isl_scc_graph_add_edge ( struct isl_scc_graph * scc_graph,
struct isl_hash_table ** edge_table,
int src,
int dst )
static

◆ isl_scc_graph_add_reverse_edges()

◆ isl_scc_graph_add_scc_indirect_seq()

__isl_give isl_union_set_list * isl_scc_graph_add_scc_indirect_seq ( struct isl_scc_graph * scc_graph,
int * seq,
int n,
__isl_take isl_union_set_list * list )
static

◆ isl_scc_graph_add_scc_seq()

__isl_give isl_union_set_list * isl_scc_graph_add_scc_seq ( struct isl_scc_graph * scc_graph,
int first,
int n,
__isl_take isl_union_set_list * list )
static

◆ isl_scc_graph_alloc()

◆ isl_scc_graph_chain()

◆ isl_scc_graph_decompose()

◆ isl_scc_graph_dump()

◆ isl_scc_graph_encode_local_index()

void * isl_scc_graph_encode_local_index ( struct isl_scc_graph * scc_graph,
int pos )
static

Definition at line 171 of file isl_scheduler_scc.c.

References isl_scc_graph::graph_scc, and pos().

Referenced by isl_scc_graph_find_edge().

◆ isl_scc_graph_extract_local_scc()

◆ isl_scc_graph_find_edge()

struct isl_hash_table_entry * isl_scc_graph_find_edge ( struct isl_scc_graph * scc_graph,
struct isl_hash_table ** edge_table,
int src,
int dst,
int reserve )

◆ isl_scc_graph_finish_band()

◆ isl_scc_graph_free()

◆ isl_scc_graph_from_sched_graph()

◆ isl_scc_graph_init_component()

void isl_scc_graph_init_component ( struct isl_scc_graph * scc_graph)
static

Definition at line 862 of file isl_scheduler_scc.c.

References isl_scc_graph::component, and isl_scc_graph::n.

Referenced by isl_scc_graph_decompose().

◆ isl_scc_graph_local_index()

int isl_scc_graph_local_index ( struct isl_scc_graph * scc_graph,
int * data )
static

◆ isl_scc_graph_merge_components()

◆ isl_scc_graph_merge_src_dst()

void isl_scc_graph_merge_src_dst ( struct isl_scc_graph * scc_graph,
int a,
int b )
static

Definition at line 898 of file isl_scheduler_scc.c.

References a(), assign(), b(), and isl_scc_graph::component.

Referenced by merge_src_dst().

◆ isl_scc_graph_reduce()

◆ isl_scc_graph_remove_edge()

isl_bool isl_scc_graph_remove_edge ( struct isl_scc_graph * scc_graph,
int src,
int dst )
static

◆ isl_scc_graph_sort_components()

int isl_scc_graph_sort_components ( struct isl_scc_graph * scc_graph,
int first,
int n )
static

◆ isl_scc_graph_sub()

◆ merge_src_dst()

◆ next_nodes()

◆ offset()

int offset ( int i,
void * user )
static

Definition at line 722 of file isl_scheduler_scc.c.

References user.

◆ print_edge()

isl_stat print_edge ( void ** entry,
void * user )
static

Definition at line 92 of file isl_scheduler_scc.c.

References isl_stat_ok, and user.

Referenced by isl_scc_graph_dump().

◆ recurse()

◆ recurse_foreach_reachable()