Polly 22.0.0git
isl_tab.h File Reference
#include "isl_int.h"
#include <isl/lp.h>
#include <isl/map.h>
#include <isl/mat.h>
#include <isl/set.h>
#include <isl_config.h>

Go to the source code of this file.

Classes

struct  isl_tab_var
struct  isl_tab_callback
union  isl_tab_undo_val
struct  isl_tab_undo
struct  isl_tab
struct  isl_trivial_region

Macros

#define ISL_TAB_SAVE_DUAL   (1 << 0)
#define ISL_OPT_MAX   (1 << 0)
#define ISL_OPT_FULL   (1 << 1)
#define ISL_OPT_QE   (1 << 2)

Typedefs

typedef struct isl_tab_lexmin isl_tab_lexmin

Enumerations

enum  isl_tab_undo_type {
  isl_tab_undo_bottom , isl_tab_undo_rational , isl_tab_undo_empty , isl_tab_undo_nonneg ,
  isl_tab_undo_redundant , isl_tab_undo_freeze , isl_tab_undo_zero , isl_tab_undo_allocate ,
  isl_tab_undo_relax , isl_tab_undo_unrestrict , isl_tab_undo_bmap_ineq , isl_tab_undo_bmap_eq ,
  isl_tab_undo_bmap_div , isl_tab_undo_saved_basis , isl_tab_undo_drop_sample , isl_tab_undo_saved_samples ,
  isl_tab_undo_callback
}
enum  isl_tab_row_sign { isl_tab_row_unknown = 0 , isl_tab_row_pos , isl_tab_row_neg , isl_tab_row_any }
enum  isl_ineq_type {
  isl_ineq_error = -1 , isl_ineq_redundant , isl_ineq_separate , isl_ineq_cut ,
  isl_ineq_adj_eq , isl_ineq_adj_ineq
}

Functions

struct isl_tabisl_tab_alloc (struct isl_ctx *ctx, unsigned n_row, unsigned n_var, unsigned M)
void isl_tab_free (struct isl_tab *tab)
isl_ctxisl_tab_get_ctx (struct isl_tab *tab)
__isl_give struct isl_tabisl_tab_from_basic_map (__isl_keep isl_basic_map *bmap, int track)
__isl_give struct isl_tabisl_tab_from_basic_set (__isl_keep isl_basic_set *bset, int track)
struct isl_tabisl_tab_from_recession_cone (__isl_keep isl_basic_set *bset, int parametric)
isl_bool isl_tab_cone_is_bounded (struct isl_tab *tab)
__isl_give isl_basic_mapisl_basic_map_update_from_tab (__isl_take isl_basic_map *bmap, struct isl_tab *tab)
__isl_give isl_basic_setisl_basic_set_update_from_tab (__isl_take isl_basic_set *bset, struct isl_tab *tab)
int isl_tab_detect_implicit_equalities (struct isl_tab *tab) WARN_UNUSED
__isl_give isl_basic_mapisl_tab_make_equalities_explicit (struct isl_tab *tab, __isl_take isl_basic_map *bmap)
int isl_tab_detect_redundant (struct isl_tab *tab) WARN_UNUSED
isl_stat isl_tab_restore_redundant (struct isl_tab *tab)
enum isl_lp_result isl_tab_min (struct isl_tab *tab, isl_int *f, isl_int denom, isl_int *opt, isl_int *opt_denom, unsigned flags) WARN_UNUSED
isl_stat isl_tab_add_ineq (struct isl_tab *tab, isl_int *ineq) WARN_UNUSED
isl_stat isl_tab_add_eq (struct isl_tab *tab, isl_int *eq) WARN_UNUSED
int isl_tab_add_valid_eq (struct isl_tab *tab, isl_int *eq) WARN_UNUSED
int isl_tab_freeze_constraint (struct isl_tab *tab, int con) WARN_UNUSED
isl_stat isl_tab_track_bmap (struct isl_tab *tab, __isl_take isl_basic_map *bmap) WARN_UNUSED
isl_stat isl_tab_track_bset (struct isl_tab *tab, __isl_take isl_basic_set *bset) WARN_UNUSED
__isl_keep isl_basic_setisl_tab_peek_bset (struct isl_tab *tab)
int isl_tab_is_equality (struct isl_tab *tab, int con)
int isl_tab_is_redundant (struct isl_tab *tab, int con)
int isl_tab_sample_is_integer (struct isl_tab *tab)
__isl_give isl_vecisl_tab_get_sample_value (struct isl_tab *tab)
enum isl_ineq_type isl_tab_ineq_type (struct isl_tab *tab, isl_int *ineq)
struct isl_tab_undoisl_tab_snap (struct isl_tab *tab)
isl_stat isl_tab_rollback (struct isl_tab *tab, struct isl_tab_undo *snap) WARN_UNUSED
isl_bool isl_tab_need_undo (struct isl_tab *tab)
void isl_tab_clear_undo (struct isl_tab *tab)
int isl_tab_relax (struct isl_tab *tab, int con) WARN_UNUSED
int isl_tab_select_facet (struct isl_tab *tab, int con) WARN_UNUSED
int isl_tab_unrestrict (struct isl_tab *tab, int con) WARN_UNUSED
void isl_tab_dump (__isl_keep struct isl_tab *tab)
__isl_give isl_mapisl_tab_basic_map_partial_lexopt (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, unsigned flags)
__isl_give isl_pw_multi_affisl_tab_basic_map_partial_lexopt_pw_multi_aff (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, unsigned flags)
__isl_give isl_vecisl_tab_basic_set_non_trivial_lexmin (__isl_take isl_basic_set *bset, int n_op, int n_region, struct isl_trivial_region *region, int(*conflict)(int con, void *user), void *user)
__isl_give isl_tab_lexminisl_tab_lexmin_from_basic_set (__isl_take isl_basic_set *bset)
int isl_tab_lexmin_dim (__isl_keep isl_tab_lexmin *tl)
__isl_give isl_tab_lexminisl_tab_lexmin_add_eq (__isl_take isl_tab_lexmin *tl, isl_int *eq)
__isl_give isl_tab_lexminisl_tab_lexmin_cut_to_integer (__isl_take isl_tab_lexmin *tl)
__isl_give isl_vecisl_tab_lexmin_get_solution (__isl_keep isl_tab_lexmin *tl)
__isl_null isl_tab_lexminisl_tab_lexmin_free (__isl_take isl_tab_lexmin *tl)
struct isl_tab_varisl_tab_var_from_row (struct isl_tab *tab, int i)
int isl_tab_mark_redundant (struct isl_tab *tab, int row) WARN_UNUSED
int isl_tab_mark_rational (struct isl_tab *tab) WARN_UNUSED
isl_stat isl_tab_mark_empty (struct isl_tab *tab) WARN_UNUSED
struct isl_tabisl_tab_dup (struct isl_tab *tab)
struct isl_tabisl_tab_product (struct isl_tab *tab1, struct isl_tab *tab2)
int isl_tab_extend_cons (struct isl_tab *tab, unsigned n_new) WARN_UNUSED
int isl_tab_allocate_con (struct isl_tab *tab) WARN_UNUSED
int isl_tab_extend_vars (struct isl_tab *tab, unsigned n_new) WARN_UNUSED
int isl_tab_insert_var (struct isl_tab *tab, int pos) WARN_UNUSED
int isl_tab_pivot (struct isl_tab *tab, int row, int col) WARN_UNUSED
int isl_tab_add_row (struct isl_tab *tab, isl_int *line) WARN_UNUSED
int isl_tab_row_is_redundant (struct isl_tab *tab, int row)
int isl_tab_min_at_most_neg_one (struct isl_tab *tab, struct isl_tab_var *var)
int isl_tab_sign_of_max (struct isl_tab *tab, int con)
int isl_tab_kill_col (struct isl_tab *tab, int col) WARN_UNUSED
isl_stat isl_tab_push (struct isl_tab *tab, enum isl_tab_undo_type type) WARN_UNUSED
isl_stat isl_tab_push_var (struct isl_tab *tab, enum isl_tab_undo_type type, struct isl_tab_var *var) WARN_UNUSED
isl_stat isl_tab_push_basis (struct isl_tab *tab) WARN_UNUSED
struct isl_tabisl_tab_init_samples (struct isl_tab *tab) WARN_UNUSED
int isl_tab_add_sample (struct isl_tab *tab, __isl_take isl_vec *sample) WARN_UNUSED
struct isl_tabisl_tab_drop_sample (struct isl_tab *tab, int s)
isl_stat isl_tab_save_samples (struct isl_tab *tab) WARN_UNUSED
struct isl_tabisl_tab_detect_equalities (struct isl_tab *tab, struct isl_tab *tab_cone) WARN_UNUSED
isl_bool isl_tab_is_constant (struct isl_tab *tab, int var, isl_int *value)
isl_stat isl_tab_detect_constants (struct isl_tab *tab)
isl_stat isl_tab_push_callback (struct isl_tab *tab, struct isl_tab_callback *callback) WARN_UNUSED
int isl_tab_insert_div (struct isl_tab *tab, int pos, __isl_keep isl_vec *div, isl_stat(*add_ineq)(void *user, isl_int *), void *user)
int isl_tab_add_div (struct isl_tab *tab, __isl_keep isl_vec *div)
int isl_tab_shift_var (struct isl_tab *tab, int pos, isl_int shift) WARN_UNUSED
isl_stat isl_tab_swap_constraints (struct isl_tab *tab, int con1, int con2)

Macro Definition Documentation

◆ ISL_OPT_FULL

#define ISL_OPT_FULL   (1 << 1)

◆ ISL_OPT_MAX

#define ISL_OPT_MAX   (1 << 0)

◆ ISL_OPT_QE

#define ISL_OPT_QE   (1 << 2)

Definition at line 256 of file isl_tab.h.

Referenced by extract_domain(), and isl_basic_set_lexmin_compute_divs().

◆ ISL_TAB_SAVE_DUAL

#define ISL_TAB_SAVE_DUAL   (1 << 0)

Definition at line 206 of file isl_tab.h.

Referenced by isl_tab_min(), and solve_lp().

Typedef Documentation

◆ isl_tab_lexmin

typedef struct isl_tab_lexmin isl_tab_lexmin

Definition at line 280 of file isl_tab.h.

Enumeration Type Documentation

◆ isl_ineq_type

Enumerator
isl_ineq_error 
isl_ineq_redundant 
isl_ineq_separate 
isl_ineq_cut 
isl_ineq_adj_eq 
isl_ineq_adj_ineq 

Definition at line 229 of file isl_tab.h.

◆ isl_tab_row_sign

Enumerator
isl_tab_row_unknown 
isl_tab_row_pos 
isl_tab_row_neg 
isl_tab_row_any 

Definition at line 129 of file isl_tab.h.

◆ isl_tab_undo_type

Enumerator
isl_tab_undo_bottom 
isl_tab_undo_rational 
isl_tab_undo_empty 
isl_tab_undo_nonneg 
isl_tab_undo_redundant 
isl_tab_undo_freeze 
isl_tab_undo_zero 
isl_tab_undo_allocate 
isl_tab_undo_relax 
isl_tab_undo_unrestrict 
isl_tab_undo_bmap_ineq 
isl_tab_undo_bmap_eq 
isl_tab_undo_bmap_div 
isl_tab_undo_saved_basis 
isl_tab_undo_drop_sample 
isl_tab_undo_saved_samples 
isl_tab_undo_callback 

Definition at line 31 of file isl_tab.h.

Function Documentation

◆ isl_basic_map_update_from_tab()

◆ isl_basic_set_update_from_tab()

◆ isl_tab_add_div()

int isl_tab_add_div ( struct isl_tab * tab,
__isl_keep isl_vec * div )

Definition at line 2372 of file isl_tab.c.

References __isl_keep, isl_tab_insert_div(), and isl_tab::n_var.

Referenced by tab_add_divs().

◆ isl_tab_add_eq()

◆ isl_tab_add_ineq()

◆ isl_tab_add_row()

◆ isl_tab_add_sample()

◆ isl_tab_add_valid_eq()

◆ isl_tab_alloc()

◆ isl_tab_allocate_con()

◆ isl_tab_basic_map_partial_lexopt()

__isl_give isl_map * isl_tab_basic_map_partial_lexopt ( __isl_take isl_basic_map * bmap,
__isl_take isl_basic_set * dom,
__isl_give isl_set ** empty,
unsigned flags )

References __isl_give, __isl_take, isl_basic_set, and isl_set.

Referenced by SF(), and SF().

◆ isl_tab_basic_map_partial_lexopt_pw_multi_aff()

__isl_give isl_pw_multi_aff * isl_tab_basic_map_partial_lexopt_pw_multi_aff ( __isl_take isl_basic_map * bmap,
__isl_take isl_basic_set * dom,
__isl_give isl_set ** empty,
unsigned flags )

◆ isl_tab_basic_set_non_trivial_lexmin()

◆ isl_tab_clear_undo()

void isl_tab_clear_undo ( struct isl_tab * tab)

Definition at line 3698 of file isl_tab.c.

References free_undo(), and isl_tab::need_undo.

Referenced by propagate_equalities().

◆ isl_tab_cone_is_bounded()

◆ isl_tab_detect_constants()

isl_stat isl_tab_detect_constants ( struct isl_tab * tab)

◆ isl_tab_detect_equalities()

◆ isl_tab_detect_implicit_equalities()

◆ isl_tab_detect_redundant()

◆ isl_tab_drop_sample()

struct isl_tab * isl_tab_drop_sample ( struct isl_tab * tab,
int s )

◆ isl_tab_dump()

void isl_tab_dump ( __isl_keep struct isl_tab * tab)

Definition at line 4256 of file isl_tab.c.

References __isl_keep, and isl_tab_print_internal().

◆ isl_tab_dup()

◆ isl_tab_extend_cons()

◆ isl_tab_extend_vars()

◆ isl_tab_free()

void isl_tab_free ( struct isl_tab * tab)

Definition at line 204 of file isl_tab.c.

References isl_tab::basis, isl_tab::bmap, isl_tab::col_var, isl_tab::con, isl_tab::dual, free_undo(), isl_basic_map_free(), isl_mat_free(), isl_vec_free(), isl_tab::mat, isl_tab::row_sign, isl_tab::row_var, isl_tab::sample_index, isl_tab::samples, and isl_tab::var.

Referenced by add_eq(), add_gbr_eq(), add_gbr_ineq(), add_lexmin_ineq(), add_lexmin_valid_eq(), basic_map_collect_diff(), check_gbr_integer_feasible(), check_integer_feasible(), check_samples(), clear(), clear_coalesce_info(), clear_lexmin_data(), compute_chambers(), context_gbr_add_eq(), context_gbr_add_ineq(), context_gbr_detect_equalities(), context_gbr_free(), context_gbr_invalidate(), context_gbr_restore(), context_gbr_test_ineq(), context_lex_add_eq(), context_lex_add_ineq(), context_lex_detect_nonnegative_parameters(), context_lex_free(), context_lex_invalidate(), context_lex_restore(), context_tab_for_lexmin(), cut_to_integer_lexmin(), delete_lp(), find_solutions(), find_solutions_main(), free_todo(), fuse(), gbr_tab(), isl_basic_map_implicit_equalities(), isl_basic_map_remove_redundancies(), isl_basic_set_compute_vertices(), isl_basic_set_interior_point(), isl_basic_set_is_bounded(), isl_basic_set_reduced_basis(), isl_basic_set_scan(), isl_basic_set_vars_get_sign(), isl_tab_alloc(), isl_tab_detect_equalities(), isl_tab_drop_sample(), isl_tab_dup(), isl_tab_from_basic_map(), isl_tab_from_recession_cone(), isl_tab_init_samples(), isl_tab_lexmin_free(), isl_tab_product(), isl_tab_solve_lp(), lower_dim_vertices_free(), pos_neg(), propagate_equalities(), rational_sample(), sample_bounded(), set_row_cst_to_div(), sh_data_free(), tab_detect_nonnegative_parameters(), tab_for_lexmin(), tab_for_shifted_cone(), test_ineq_data_clear(), update_ineq_free(), uset_affine_hull_bounded(), uset_gist_full(), and valid_direction().

◆ isl_tab_freeze_constraint()

int isl_tab_freeze_constraint ( struct isl_tab * tab,
int con )

◆ isl_tab_from_basic_map()

◆ isl_tab_from_basic_set()

◆ isl_tab_from_recession_cone()

◆ isl_tab_get_ctx()

◆ isl_tab_get_sample_value()

◆ isl_tab_ineq_type()

◆ isl_tab_init_samples()

◆ isl_tab_insert_div()

◆ isl_tab_insert_var()

◆ isl_tab_is_constant()

isl_bool isl_tab_is_constant ( struct isl_tab * tab,
int var,
isl_int * value )

◆ isl_tab_is_equality()

◆ isl_tab_is_redundant()

◆ isl_tab_kill_col()

◆ isl_tab_lexmin_add_eq()

◆ isl_tab_lexmin_cut_to_integer()

__isl_give isl_tab_lexmin * isl_tab_lexmin_cut_to_integer ( __isl_take isl_tab_lexmin * tl)

◆ isl_tab_lexmin_dim()

int isl_tab_lexmin_dim ( __isl_keep isl_tab_lexmin * tl)

Definition at line 5604 of file isl_tab_pip.c.

References __isl_keep.

Referenced by zero_out_node_coef().

◆ isl_tab_lexmin_free()

◆ isl_tab_lexmin_from_basic_set()

◆ isl_tab_lexmin_get_solution()

__isl_give isl_vec * isl_tab_lexmin_get_solution ( __isl_keep isl_tab_lexmin * tl)

Definition at line 5653 of file isl_tab_pip.c.

References __isl_give, __isl_keep, isl_tab_get_sample_value(), and isl_vec_alloc().

Referenced by non_empty_solution().

◆ isl_tab_make_equalities_explicit()

◆ isl_tab_mark_empty()

◆ isl_tab_mark_rational()

int isl_tab_mark_rational ( struct isl_tab * tab)

Definition at line 985 of file isl_tab.c.

References isl_tab_push(), isl_tab_undo_rational, isl_tab::need_undo, and isl_tab::rational.

Referenced by check_facets().

◆ isl_tab_mark_redundant()

◆ isl_tab_min()

◆ isl_tab_min_at_most_neg_one()

◆ isl_tab_need_undo()

isl_bool isl_tab_need_undo ( struct isl_tab * tab)

Definition at line 3685 of file isl_tab.c.

References isl_bool_error, isl_bool_ok(), and isl_tab::need_undo.

Referenced by propagate_equalities().

◆ isl_tab_peek_bset()

◆ isl_tab_pivot()

◆ isl_tab_product()

◆ isl_tab_push()

isl_stat isl_tab_push ( struct isl_tab * tab,
enum isl_tab_undo_type type )

◆ isl_tab_push_basis()

◆ isl_tab_push_callback()

isl_stat isl_tab_push_callback ( struct isl_tab * tab,
struct isl_tab_callback * callback )

Definition at line 857 of file isl_tab.c.

References isl_tab_undo_val::callback, isl_tab_undo_callback, and push_union().

Referenced by sol_inc_level().

◆ isl_tab_push_var()

◆ isl_tab_relax()

◆ isl_tab_restore_redundant()

◆ isl_tab_rollback()

◆ isl_tab_row_is_redundant()

◆ isl_tab_sample_is_integer()

◆ isl_tab_save_samples()

isl_stat isl_tab_save_samples ( struct isl_tab * tab)

◆ isl_tab_select_facet()

int isl_tab_select_facet ( struct isl_tab * tab,
int con )

◆ isl_tab_shift_var()

◆ isl_tab_sign_of_max()

int isl_tab_sign_of_max ( struct isl_tab * tab,
int con )

Definition at line 1284 of file isl_tab.c.

References isl_tab::con, isl_mat::ctx, isl_assert, isl_tab::mat, sign_of_max(), and var().

Referenced by can_select().

◆ isl_tab_snap()

◆ isl_tab_swap_constraints()

isl_stat isl_tab_swap_constraints ( struct isl_tab * tab,
int con1,
int con2 )

Definition at line 3053 of file isl_tab.c.

References isl_tab::con, isl_stat_error, isl_stat_ok, isl_tab_check_con(), update_con_after_move(), and var().

Referenced by swap_eq().

◆ isl_tab_track_bmap()

◆ isl_tab_track_bset()

isl_stat isl_tab_track_bset ( struct isl_tab * tab,
__isl_take isl_basic_set * bset )

◆ isl_tab_unrestrict()

int isl_tab_unrestrict ( struct isl_tab * tab,
int con )

Definition at line 2888 of file isl_tab.c.

References isl_tab::con, isl_tab_push_var(), isl_tab_undo_unrestrict, and var().

Referenced by is_adj_ineq_extension_with_wraps().

◆ isl_tab_var_from_row()