Polly 22.0.0git
isl_coalesce.c File Reference
#include <isl_ctx_private.h>
#include "isl_map_private.h"
#include <isl_seq.h>
#include <isl/options.h>
#include "isl_tab.h"
#include <isl_mat_private.h>
#include <isl_local_space_private.h>
#include <isl_val_private.h>
#include <isl_vec_private.h>
#include <isl_aff_private.h>
#include <isl_equalities.h>
#include <isl_constraint_private.h>
#include <set_to_map.c>
#include <set_from_map.c>

Go to the source code of this file.

Classes

struct  isl_coalesce_info
struct  isl_wraps
struct  isl_expanded

Macros

#define STATUS_ERROR   -1
#define STATUS_REDUNDANT   1
#define STATUS_VALID   2
#define STATUS_SEPARATE   3
#define STATUS_CUT   4
#define STATUS_ADJ_EQ   5
#define STATUS_ADJ_INEQ   6

Enumerations

enum  isl_change {
  isl_change_error = -1 , isl_change_none = 0 , isl_change_drop_first , isl_change_drop_second ,
  isl_change_fuse
}

Functions

static int status_in (isl_int *ineq, struct isl_tab *tab)
static int * eq_status_in (__isl_keep isl_basic_map *bmap_i, struct isl_tab *tab_j)
static int * ineq_status_in (__isl_keep isl_basic_map *bmap_i, struct isl_tab *tab_i, struct isl_tab *tab_j)
static int any (int *con, unsigned len, int status)
static int find (int *con, unsigned len, int status)
static int count (int *con, unsigned len, int status)
static int all (int *con, unsigned len, int status)
static int any_eq (struct isl_coalesce_info *info, int status)
static int any_ineq (struct isl_coalesce_info *info, int status)
static int find_eq (struct isl_coalesce_info *info, int status)
static int find_ineq (struct isl_coalesce_info *info, int status)
static int count_eq (struct isl_coalesce_info *info, int status)
static int count_ineq (struct isl_coalesce_info *info, int status)
static int all_valid_or_cut (struct isl_coalesce_info *info)
static int coalesce_info_set_hull_hash (struct isl_coalesce_info *info)
static void clear_coalesce_info (int n, struct isl_coalesce_info *info)
static void clear (struct isl_coalesce_info *info)
static void drop (struct isl_coalesce_info *info)
static void exchange (struct isl_coalesce_info *info1, struct isl_coalesce_info *info2)
static enum isl_change invert_change (enum isl_change change)
static __isl_give isl_basic_mapadd_valid_constraints (__isl_take isl_basic_map *bmap, struct isl_coalesce_info *info, unsigned len)
static int number_of_constraints_increases (int i, int j, struct isl_coalesce_info *info, __isl_keep isl_basic_map *bmap, struct isl_tab *tab)
static enum isl_change fuse (int i, int j, struct isl_coalesce_info *info, __isl_keep isl_mat *extra, int detect_equalities, int check_number)
static enum isl_change check_facets (int i, int j, struct isl_coalesce_info *info)
static isl_bool contains (struct isl_coalesce_info *info, struct isl_tab *tab)
static enum isl_change is_adj_ineq_extension_with_wraps (int i, int j, int k, struct isl_coalesce_info *info, __isl_keep isl_mat *extra)
static int not_unique_unit_row (__isl_keep isl_mat *T, int row)
static isl_bool is_affected (__isl_keep isl_basic_map *bmap, int ineq, int *affected, int total)
static __isl_give isl_vectry_tightening (struct isl_coalesce_info *info, int ineq, __isl_take isl_vec *v)
static isl_stat tighten_on_relaxed_facet (struct isl_coalesce_info *info, int n, int *relaxed, int l)
static enum isl_change extend (int i, int j, int n, int *relax, struct isl_coalesce_info *info)
static enum isl_change is_relaxed_extension (int i, int j, int n, int *relax, struct isl_coalesce_info *info)
static isl_stat wraps_update_max (struct isl_wraps *wraps, struct isl_coalesce_info *info)
static isl_stat wraps_init (struct isl_wraps *wraps, __isl_take isl_mat *mat, struct isl_coalesce_info *info, int i, int j)
static void wraps_free (struct isl_wraps *wraps)
static isl_stat wraps_mark_failed (struct isl_wraps *wraps)
static int allow_wrap (struct isl_wraps *wraps, int row)
static int add_wrap (struct isl_wraps *wraps, int w, isl_int *bound, isl_int *ineq, unsigned len, __isl_keep isl_set *set, int negate)
static isl_stat add_selected_wraps (struct isl_wraps *wraps, struct isl_coalesce_info *info, isl_int *bound, __isl_keep isl_set *set, int add_valid)
static isl_stat add_wraps (struct isl_wraps *wraps, struct isl_coalesce_info *info, isl_int *bound, __isl_keep isl_set *set)
static isl_stat check_wraps (struct isl_wraps *wraps, int first, struct isl_tab *tab, int keep)
static __isl_give isl_setset_from_updated_bmap (__isl_keep isl_basic_map *bmap, struct isl_tab *tab)
static isl_bool has_redundant_cuts (struct isl_coalesce_info *info)
static isl_stat add_selected_wraps_around_facet (struct isl_wraps *wraps, struct isl_coalesce_info *info, int k, isl_int *bound, __isl_keep isl_set *set, int add_valid)
static isl_stat add_wraps_around_facet (struct isl_wraps *wraps, struct isl_coalesce_info *info, int k, isl_int *bound, __isl_keep isl_set *set)
static isl_stat add_valid_wraps_around_facet (struct isl_wraps *wraps, struct isl_coalesce_info *info, int k, isl_int *bound, __isl_keep isl_set *set)
static enum isl_change is_adj_ineq_extension (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_adj_ineq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change can_wrap_in_facet (int i, int j, int k, struct isl_coalesce_info *info, int wrap_facet)
static isl_stat wrap_in_facet (struct isl_wraps *wraps, int w, struct isl_coalesce_info *info_j, __isl_keep isl_set *set_i, struct isl_tab_undo *snap)
static enum isl_change try_wrap_in_facets (int i, int j, struct isl_coalesce_info *info, struct isl_wraps *wraps, __isl_keep isl_set *set_i)
static enum isl_change wrap_in_facets (int i, int j, int n, struct isl_coalesce_info *info)
static enum isl_ineq_type type_of_relaxed (struct isl_tab *tab, isl_int *ineq)
static enum isl_change can_wrap_in_set (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_wrap (int i, int j, struct isl_coalesce_info *info)
static isl_bool all_cut_by_one (int i, int j, struct isl_coalesce_info *info, int *list)
static enum isl_change check_single_adj_eq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_adj_eq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_ineq_adj_eq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_eq_adj_eq (int i, int j, struct isl_coalesce_info *info)
static void init_status (struct isl_coalesce_info *info)
static void set_eq_status_in (struct isl_coalesce_info *info, struct isl_tab *tab)
static void set_ineq_status_in (struct isl_coalesce_info *info, struct isl_tab *tab)
static void clear_status (struct isl_coalesce_info *info)
static int all_ineq_valid_or_single_adj_ineq (struct isl_coalesce_info *info)
static enum isl_change separating_equality (int i, int j, struct isl_coalesce_info *info)
static enum isl_change coalesce_local_pair_reuse (int i, int j, struct isl_coalesce_info *info)
static enum isl_change coalesce_local_pair (int i, int j, struct isl_coalesce_info *info)
static isl_stat shift_div (struct isl_coalesce_info *info, int div, isl_int shift)
static isl_stat normalize_stride_div (struct isl_coalesce_info *info, int div)
static isl_stat harmonize_stride_divs (struct isl_coalesce_info *info1, struct isl_coalesce_info *info2)
static isl_stat shift_if_cst_int (struct isl_coalesce_info *info, int div, __isl_keep isl_aff *shift)
static isl_stat harmonize_divs_with_hulls (struct isl_coalesce_info *info1, struct isl_coalesce_info *info2, __isl_keep isl_basic_set *eq1, __isl_keep isl_basic_set *eq2)
static isl_stat harmonize_divs (struct isl_coalesce_info *info1, struct isl_coalesce_info *info2)
static isl_bool same_divs (__isl_keep isl_basic_map *bmap1, __isl_keep isl_basic_map *bmap2)
static isl_stat copy_ineq (struct isl_tab *tab, __isl_keep isl_basic_map *bmap)
static isl_stat fix_constant_divs (struct isl_coalesce_info *info, int n, struct isl_expanded *expanded)
static isl_stat tab_insert_divs (struct isl_coalesce_info *info, int n, struct isl_expanded *expanded, __isl_take isl_basic_map *bmap)
static isl_stat expand_tab (struct isl_coalesce_info *info, int *exp, __isl_take isl_basic_map *bmap)
static enum isl_change coalesce_expand_tab_divs (__isl_take isl_basic_map *bmap, int i, int j, struct isl_coalesce_info *info, __isl_keep isl_mat *div, int *exp)
static enum isl_change coalesce_with_expanded_divs (__isl_keep isl_basic_map *bmap, int i, int j, struct isl_coalesce_info *info, __isl_keep isl_mat *div, int *exp)
static enum isl_change coalesce_after_aligning_divs (__isl_keep isl_basic_map *bmap_i, int i, int j, struct isl_coalesce_info *info)
static enum isl_change coalesce_subset_with_equalities (int i, int j, struct isl_coalesce_info *info)
static enum isl_change coalesce_divs (int i, int j, struct isl_coalesce_info *info)
static isl_bool has_nested_div (__isl_keep isl_basic_map *bmap)
static __isl_give isl_aff_list * set_up_substitutions (__isl_keep isl_basic_map *bmap_i, __isl_keep isl_basic_map *bmap_j, __isl_take isl_basic_map *hull)
static isl_stat add_sub_vars (struct isl_coalesce_info *info, __isl_keep isl_aff_list *list, int dim, int extra_var)
static isl_stat add_sub_equalities (struct isl_tab *tab, __isl_keep isl_aff_list *list, int dim)
static isl_stat add_subs (struct isl_coalesce_info *info, __isl_keep isl_aff_list *list, int dim)
static enum isl_change coalesce_with_subs (int i, int j, struct isl_coalesce_info *info, __isl_keep isl_aff_list *list)
static enum isl_change check_coalesce_into_eq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change check_coalesce_eq (int i, int j, struct isl_coalesce_info *info)
static enum isl_change coalesce_pair (int i, int j, struct isl_coalesce_info *info)
static int isl_max (int a, int b)
static int coalesce_range (isl_ctx *ctx, struct isl_coalesce_info *info, int start1, int end1, int start2, int end2)
static int coalesce (isl_ctx *ctx, int n, struct isl_coalesce_info *info)
static __isl_give isl_mapupdate_basic_maps (__isl_take isl_map *map, int n, struct isl_coalesce_info *info)
__isl_give isl_mapisl_map_coalesce (__isl_take isl_map *map)
__isl_give isl_setisl_set_coalesce (__isl_take isl_set *set)

Macro Definition Documentation

◆ STATUS_ADJ_EQ

#define STATUS_ADJ_EQ   5

◆ STATUS_ADJ_INEQ

◆ STATUS_CUT

◆ STATUS_ERROR

#define STATUS_ERROR   -1

◆ STATUS_REDUNDANT

◆ STATUS_SEPARATE

#define STATUS_SEPARATE   3

◆ STATUS_VALID

Enumeration Type Documentation

◆ isl_change

enum isl_change
Enumerator
isl_change_error 
isl_change_none 
isl_change_drop_first 
isl_change_drop_second 
isl_change_fuse 

Definition at line 393 of file isl_coalesce.c.

Function Documentation

◆ add_selected_wraps()

◆ add_selected_wraps_around_facet()

◆ add_sub_equalities()

◆ add_sub_vars()

◆ add_subs()

isl_stat add_subs ( struct isl_coalesce_info * info,
__isl_keep isl_aff_list * list,
int dim )
static

◆ add_valid_constraints()

◆ add_valid_wraps_around_facet()

isl_stat add_valid_wraps_around_facet ( struct isl_wraps * wraps,
struct isl_coalesce_info * info,
int k,
isl_int * bound,
__isl_keep isl_set * set )
static

Definition at line 1605 of file isl_coalesce.c.

References __isl_keep, add_selected_wraps_around_facet(), bound, isl_set, and set.

Referenced by is_adj_ineq_extension().

◆ add_wrap()

int add_wrap ( struct isl_wraps * wraps,
int w,
isl_int * bound,
isl_int * ineq,
unsigned len,
__isl_keep isl_set * set,
int negate )
static

◆ add_wraps()

isl_stat add_wraps ( struct isl_wraps * wraps,
struct isl_coalesce_info * info,
isl_int * bound,
__isl_keep isl_set * set )
static

Definition at line 1422 of file isl_coalesce.c.

References __isl_keep, add_selected_wraps(), bound, isl_set, and set.

Referenced by can_wrap_in_facet(), check_eq_adj_eq(), and wrap_in_facet().

◆ add_wraps_around_facet()

isl_stat add_wraps_around_facet ( struct isl_wraps * wraps,
struct isl_coalesce_info * info,
int k,
isl_int * bound,
__isl_keep isl_set * set )
static

Definition at line 1591 of file isl_coalesce.c.

References __isl_keep, add_selected_wraps_around_facet(), bound, isl_set, and set.

Referenced by can_wrap_in_facet().

◆ all()

int all ( int * con,
unsigned len,
int status )
static

◆ all_cut_by_one()

◆ all_ineq_valid_or_single_adj_ineq()

int all_ineq_valid_or_single_adj_ineq ( struct isl_coalesce_info * info)
static

◆ all_valid_or_cut()

◆ allow_wrap()

int allow_wrap ( struct isl_wraps * wraps,
int row )
static

◆ any()

int any ( int * con,
unsigned len,
int status )
static

Definition at line 129 of file isl_coalesce.c.

Referenced by any_eq(), any_ineq(), and tighten_on_relaxed_facet().

◆ any_eq()

◆ any_ineq()

◆ can_wrap_in_facet()

◆ can_wrap_in_set()

◆ check_adj_eq()

◆ check_adj_ineq()

enum isl_change check_adj_ineq ( int i,
int j,
struct isl_coalesce_info * info )
static

◆ check_coalesce_eq()

enum isl_change check_coalesce_eq ( int i,
int j,
struct isl_coalesce_info * info )
static

◆ check_coalesce_into_eq()

◆ check_eq_adj_eq()

◆ check_facets()

◆ check_ineq_adj_eq()

enum isl_change check_ineq_adj_eq ( int i,
int j,
struct isl_coalesce_info * info )
static

◆ check_single_adj_eq()

◆ check_wrap()

enum isl_change check_wrap ( int i,
int j,
struct isl_coalesce_info * info )
static

Definition at line 2114 of file isl_coalesce.c.

References can_wrap_in_set(), and isl_change_none.

Referenced by coalesce_local_pair_reuse().

◆ check_wraps()

isl_stat check_wraps ( struct isl_wraps * wraps,
int first,
struct isl_tab * tab,
int keep )
static

◆ clear()

void clear ( struct isl_coalesce_info * info)
static

Definition at line 356 of file isl_coalesce.c.

References isl_coalesce_info::bmap, isl_basic_map_free(), isl_tab_free(), and isl_coalesce_info::tab.

Referenced by drop(), and fuse().

◆ clear_coalesce_info()

void clear_coalesce_info ( int n,
struct isl_coalesce_info * info )
static

Definition at line 339 of file isl_coalesce.c.

References isl_tab::bmap, isl_basic_map_free(), isl_tab_free(), and n.

Referenced by isl_map_coalesce().

◆ clear_status()

◆ coalesce()

int coalesce ( isl_ctx * ctx,
int n,
struct isl_coalesce_info * info )
static

Definition at line 4099 of file isl_coalesce.c.

References coalesce_range(), and n.

Referenced by div_find_coalesce(), FN(), FN(), FN(), FN(), isl_map_coalesce(), and MULTI().

◆ coalesce_after_aligning_divs()

◆ coalesce_divs()

enum isl_change coalesce_divs ( int i,
int j,
struct isl_coalesce_info * info )
static

◆ coalesce_expand_tab_divs()

◆ coalesce_info_set_hull_hash()

◆ coalesce_local_pair()

enum isl_change coalesce_local_pair ( int i,
int j,
struct isl_coalesce_info * info )
static

Definition at line 2632 of file isl_coalesce.c.

References coalesce_local_pair_reuse(), and init_status().

Referenced by coalesce_pair(), and coalesce_with_subs().

◆ coalesce_local_pair_reuse()

◆ coalesce_pair()

◆ coalesce_range()

int coalesce_range ( isl_ctx * ctx,
struct isl_coalesce_info * info,
int start1,
int end1,
int start2,
int end2 )
static

◆ coalesce_subset_with_equalities()

◆ coalesce_with_expanded_divs()

◆ coalesce_with_subs()

◆ contains()

◆ copy_ineq()

isl_stat copy_ineq ( struct isl_tab * tab,
__isl_keep isl_basic_map * bmap )
static

◆ count()

◆ count_eq()

int count_eq ( struct isl_coalesce_info * info,
int status )
static

◆ count_ineq()

int count_ineq ( struct isl_coalesce_info * info,
int status )
static

◆ drop()

◆ eq_status_in()

int * eq_status_in ( __isl_keep isl_basic_map * bmap_i,
struct isl_tab * tab_j )
static

◆ exchange()

void exchange ( struct isl_coalesce_info * info1,
struct isl_coalesce_info * info2 )
static

Definition at line 375 of file isl_coalesce.c.

Referenced by extend().

◆ expand_tab()

◆ extend()

◆ find()

int find ( int * con,
unsigned len,
int status )
static

Definition at line 142 of file isl_coalesce.c.

Referenced by contains(), find_eq(), find_ineq(), and replace().

◆ find_eq()

int find_eq ( struct isl_coalesce_info * info,
int status )
static

◆ find_ineq()

int find_ineq ( struct isl_coalesce_info * info,
int status )
static

◆ fix_constant_divs()

◆ fuse()

◆ harmonize_divs()

◆ harmonize_divs_with_hulls()

◆ harmonize_stride_divs()

◆ has_nested_div()

◆ has_redundant_cuts()

◆ ineq_status_in()

int * ineq_status_in ( __isl_keep isl_basic_map * bmap_i,
struct isl_tab * tab_i,
struct isl_tab * tab_j )
static

◆ init_status()

void init_status ( struct isl_coalesce_info * info)
static

◆ invert_change()

enum isl_change invert_change ( enum isl_change change)
static

◆ is_adj_ineq_extension()

◆ is_adj_ineq_extension_with_wraps()

◆ is_affected()

isl_bool is_affected ( __isl_keep isl_basic_map * bmap,
int ineq,
int * affected,
int total )
static

Definition at line 858 of file isl_coalesce.c.

References __isl_keep, isl_bool_false, isl_bool_true, isl_int_is_zero, and total().

Referenced by tighten_on_relaxed_facet().

◆ is_relaxed_extension()

◆ isl_map_coalesce()

◆ isl_max()

int isl_max ( int a,
int b )
static

Definition at line 4035 of file isl_coalesce.c.

References a(), and b().

Referenced by coalesce_range().

◆ isl_set_coalesce()

◆ normalize_stride_div()

◆ not_unique_unit_row()

int not_unique_unit_row ( __isl_keep isl_mat * T,
int row )
static

◆ number_of_constraints_increases()

int number_of_constraints_increases ( int i,
int j,
struct isl_coalesce_info * info,
__isl_keep isl_basic_map * bmap,
struct isl_tab * tab )
static

◆ same_divs()

◆ separating_equality()

enum isl_change separating_equality ( int i,
int j,
struct isl_coalesce_info * info )
static

◆ set_eq_status_in()

void set_eq_status_in ( struct isl_coalesce_info * info,
struct isl_tab * tab )
static

◆ set_from_updated_bmap()

◆ set_ineq_status_in()

void set_ineq_status_in ( struct isl_coalesce_info * info,
struct isl_tab * tab )
static

◆ set_up_substitutions()

◆ shift_div()

◆ shift_if_cst_int()

◆ status_in()

◆ tab_insert_divs()

◆ tighten_on_relaxed_facet()

◆ try_tightening()

◆ try_wrap_in_facets()

◆ type_of_relaxed()

enum isl_ineq_type type_of_relaxed ( struct isl_tab * tab,
isl_int * ineq )
static

Definition at line 1984 of file isl_coalesce.c.

References isl_int_add_ui, isl_int_sub_ui, isl_tab_ineq_type(), and type.

Referenced by all_cut_by_one(), and can_wrap_in_set().

◆ update_basic_maps()

◆ wrap_in_facet()

◆ wrap_in_facets()

◆ wraps_free()

void wraps_free ( struct isl_wraps * wraps)
static

◆ wraps_init()

◆ wraps_mark_failed()

isl_stat wraps_mark_failed ( struct isl_wraps * wraps)
static

◆ wraps_update_max()