Polly 22.0.0git
isl_tab_pip.c File Reference
#include <isl_ctx_private.h>
#include "isl_map_private.h"
#include <isl_seq.h>
#include "isl_tab.h"
#include "isl_sample.h"
#include <isl_mat_private.h>
#include <isl_vec_private.h>
#include <isl_aff_private.h>
#include <isl_constraint_private.h>
#include <isl_options_private.h>
#include <isl_config.h>
#include <bset_to_bmap.c>
#include "isl_tab_lexopt_templ.c"

Go to the source code of this file.

Classes

struct  isl_context_op
struct  isl_context
struct  isl_context_lex
struct  isl_partial_sol
struct  isl_sol_callback
struct  isl_sol
struct  isl_sol_map
struct  isl_context_gbr
struct  isl_gbr_tab_undo
struct  isl_constraint_equal_info
struct  isl_lexmin_data
struct  isl_local_region
struct  isl_tab_lexmin
struct  isl_sol_pma

Macros

#define I_CST   1 << 0
#define I_PAR   1 << 1
#define I_VAR   1 << 2
#define CUT_ALL   1
#define CUT_ONE   0
#define TYPE   isl_map
#define SUFFIX
#define TYPE   isl_pw_multi_aff
#define SUFFIX   _pw_multi_aff

Enumerations

enum  isl_next { isl_next_error = -1 , isl_next_done , isl_next_backtrack , isl_next_handle }

Functions

static void sol_free (struct isl_sol *sol)
static void sol_push_sol (struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static isl_stat check_final_columns_are_zero (__isl_keep isl_mat *M, unsigned first)
static __isl_give isl_multi_affset_from_affine_matrix (__isl_take isl_multi_aff *ma, __isl_take isl_local_space *ls, __isl_take isl_mat *M)
static void sol_push_sol_mat (struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_mat *M)
static void sol_pop_one (struct isl_sol *sol)
static struct isl_basic_setsol_domain (struct isl_sol *sol)
static isl_bool same_solution (struct isl_partial_sol *s1, struct isl_partial_sol *s2)
static void swap_initial (struct isl_sol *sol)
static isl_stat combine_initial_into_second (struct isl_sol *sol)
static isl_bool equal_on_domain (__isl_keep isl_multi_aff *ma1, __isl_keep isl_multi_aff *ma2, __isl_keep isl_basic_set *dom)
static isl_stat combine_initial_if_equal (struct isl_sol *sol)
static void sol_pop (struct isl_sol *sol)
static void sol_dec_level (struct isl_sol *sol)
static isl_stat sol_dec_level_wrap (struct isl_tab_callback *cb)
static void sol_inc_level (struct isl_sol *sol)
static void scale_rows (struct isl_mat *mat, isl_int m, int n_row)
static void sol_add (struct isl_sol *sol, struct isl_tab *tab)
static void sol_map_free (struct isl_sol *sol)
static void sol_map_add_empty (struct isl_sol_map *sol, struct isl_basic_set *bset)
static void sol_map_add_empty_wrap (struct isl_sol *sol, struct isl_basic_set *bset)
static void sol_map_add (struct isl_sol_map *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static void sol_map_add_wrap (struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static void get_row_parameter_line (struct isl_tab *tab, int row, isl_int *line)
static int identical_parameter_line (struct isl_tab *tab, int row1, int row2)
static struct isl_vecget_row_parameter_ineq (struct isl_tab *tab, int row)
static void normalize_div (__isl_keep isl_vec *div)
static struct isl_vecget_row_parameter_div (struct isl_tab *tab, int row)
static struct isl_vecget_row_split_div (struct isl_tab *tab, int row)
static __isl_give isl_vecineq_for_div (__isl_keep isl_basic_set *bset, unsigned div)
static struct isl_tabset_row_cst_to_div (struct isl_tab *tab, int row, int div)
static int is_obviously_neg (struct isl_tab *tab, int row)
static int is_obviously_nonneg (struct isl_tab *tab, int row)
static int lexmin_col_pair (struct isl_tab *tab, int row, int col1, int col2, isl_int tmp)
static int is_parameter_var (struct isl_tab *tab, int index)
static int col_is_parameter_var (struct isl_tab *tab, int col)
static int row_is_parameter_var (struct isl_tab *tab, int row)
static int lexmin_pivot_col (struct isl_tab *tab, int row)
static int first_neg (struct isl_tab *tab)
static void check_lexpos (struct isl_tab *tab) __attribute__((unused))
static int report_conflicting_constraint (struct isl_tab *tab, int con)
static int report_conflict (struct isl_tab *tab, int row)
static int restore_lexmin (struct isl_tab *tab) WARN_UNUSED
static int last_var_col_or_int_par_col (struct isl_tab *tab, int row)
static struct isl_tabadd_lexmin_valid_eq (struct isl_tab *tab, isl_int *eq)
static int is_constant (struct isl_tab *tab, int row)
static int is_parametric_constant (struct isl_tab *tab, int row)
static int add_lexmin_eq (struct isl_tab *tab, isl_int *eq) WARN_UNUSED
static struct isl_tabadd_lexmin_ineq (struct isl_tab *tab, isl_int *ineq)
static int integer_parameter (struct isl_tab *tab, int row)
static int integer_variable (struct isl_tab *tab, int row)
static int integer_constant (struct isl_tab *tab, int row)
static int next_non_integer_var (struct isl_tab *tab, int var, int *f)
static int first_non_integer_row (struct isl_tab *tab, int *f)
static int add_cut (struct isl_tab *tab, int row)
static struct isl_tabcut_to_integer_lexmin (struct isl_tab *tab, int cutting_strategy)
static struct isl_tabcheck_samples (struct isl_tab *tab, isl_int *ineq, int eq)
static int sample_is_finite (struct isl_tab *tab)
static struct isl_tabcheck_integer_feasible (struct isl_tab *tab)
static int tab_has_valid_sample (struct isl_tab *tab, isl_int *ineq, int eq)
static isl_bool context_tab_insert_div (struct isl_tab *tab, int pos, __isl_keep isl_vec *div, isl_stat(*add_ineq)(void *user, isl_int *), void *user)
static int add_div (struct isl_tab *tab, struct isl_context *context, __isl_keep isl_vec *div)
static int find_div (struct isl_tab *tab, isl_int *div, isl_int denom)
static int get_div (struct isl_tab *tab, struct isl_context *context, struct isl_vec *div)
static int add_parametric_cut (struct isl_tab *tab, int row, struct isl_context *context)
static __isl_give struct isl_tabtab_for_lexmin (__isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, unsigned M, int max)
static int best_split (struct isl_tab *tab, struct isl_tab *context_tab)
static struct isl_basic_setcontext_lex_peek_basic_set (struct isl_context *context)
static struct isl_tabcontext_lex_peek_tab (struct isl_context *context)
static void context_lex_add_eq (struct isl_context *context, isl_int *eq, int check, int update)
static void context_lex_add_ineq (struct isl_context *context, isl_int *ineq, int check, int update)
static isl_stat context_lex_add_ineq_wrap (void *user, isl_int *ineq)
static enum isl_tab_row_sign tab_ineq_sign (struct isl_tab *tab, isl_int *ineq, int strict)
static enum isl_tab_row_sign context_lex_ineq_sign (struct isl_context *context, isl_int *ineq, int strict)
static int context_lex_test_ineq (struct isl_context *context, isl_int *ineq)
static int context_lex_get_div (struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static isl_bool context_lex_insert_div (struct isl_context *context, int pos, __isl_keep isl_vec *div)
static int context_lex_detect_equalities (struct isl_context *context, struct isl_tab *tab)
static int context_lex_best_split (struct isl_context *context, struct isl_tab *tab)
static int context_lex_is_empty (struct isl_context *context)
static void * context_lex_save (struct isl_context *context)
static void context_lex_restore (struct isl_context *context, void *save)
static void context_lex_discard (void *save)
static int context_lex_is_ok (struct isl_context *context)
static struct isl_tabtab_detect_nonnegative_parameters (struct isl_tab *tab, struct isl_tab *context_tab)
static struct isl_tabcontext_lex_detect_nonnegative_parameters (struct isl_context *context, struct isl_tab *tab)
static void context_lex_invalidate (struct isl_context *context)
static __isl_null struct isl_contextcontext_lex_free (struct isl_context *context)
static struct isl_tabcontext_tab_for_lexmin (__isl_take isl_basic_set *bset)
static struct isl_contextisl_context_lex_alloc (struct isl_basic_set *dom)
static struct isl_tabcontext_gbr_detect_nonnegative_parameters (struct isl_context *context, struct isl_tab *tab)
static struct isl_basic_setcontext_gbr_peek_basic_set (struct isl_context *context)
static struct isl_tabcontext_gbr_peek_tab (struct isl_context *context)
static void gbr_init_shifted (struct isl_context_gbr *cgbr)
static struct isl_vecgbr_get_shifted_sample (struct isl_context_gbr *cgbr)
static __isl_give isl_basic_setdrop_constant_terms (__isl_take isl_basic_set *bset)
static int use_shifted (struct isl_context_gbr *cgbr)
static struct isl_vecgbr_get_sample (struct isl_context_gbr *cgbr)
static void check_gbr_integer_feasible (struct isl_context_gbr *cgbr)
static struct isl_tabadd_gbr_eq (struct isl_tab *tab, isl_int *eq)
static void context_gbr_add_eq (struct isl_context *context, isl_int *eq, int check, int update)
static void add_gbr_ineq (struct isl_context_gbr *cgbr, isl_int *ineq)
static void context_gbr_add_ineq (struct isl_context *context, isl_int *ineq, int check, int update)
static isl_stat context_gbr_add_ineq_wrap (void *user, isl_int *ineq)
static enum isl_tab_row_sign context_gbr_ineq_sign (struct isl_context *context, isl_int *ineq, int strict)
static int context_gbr_test_ineq (struct isl_context *context, isl_int *ineq)
static int last_non_zero_var_col (struct isl_tab *tab, isl_int *p)
static int propagate_equalities (struct isl_context_gbr *cgbr, struct isl_tab *tab, unsigned first)
static int context_gbr_detect_equalities (struct isl_context *context, struct isl_tab *tab)
static int context_gbr_get_div (struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static isl_bool context_gbr_insert_div (struct isl_context *context, int pos, __isl_keep isl_vec *div)
static int context_gbr_best_split (struct isl_context *context, struct isl_tab *tab)
static int context_gbr_is_empty (struct isl_context *context)
static void * context_gbr_save (struct isl_context *context)
static void context_gbr_restore (struct isl_context *context, void *save)
static void context_gbr_discard (void *save)
static int context_gbr_is_ok (struct isl_context *context)
static void context_gbr_invalidate (struct isl_context *context)
static __isl_null struct isl_contextcontext_gbr_free (struct isl_context *context)
static struct isl_contextisl_context_gbr_alloc (__isl_keep isl_basic_set *dom)
static struct isl_contextisl_context_alloc (__isl_keep isl_basic_set *dom)
static isl_stat sol_init (struct isl_sol *sol, __isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, int max)
static struct isl_solsol_map_init (__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max)
static int is_critical (struct isl_tab *tab, int row)
static int is_strict (struct isl_vec *vec)
static enum isl_tab_row_sign row_sign (struct isl_tab *tab, struct isl_sol *sol, int row)
static void find_solutions (struct isl_sol *sol, struct isl_tab *tab)
static void find_in_pos (struct isl_sol *sol, struct isl_tab *tab, isl_int *ineq)
static void no_sol_in_strict (struct isl_sol *sol, struct isl_tab *tab, struct isl_vec *ineq)
static void reset_any_to_unknown (struct isl_tab *tab)
static int sol_has_mergeable_solutions (struct isl_sol *sol)
static void find_solutions_main (struct isl_sol *sol, struct isl_tab *tab)
static int find_context_div (__isl_keep isl_basic_map *bmap, __isl_keep isl_basic_set *dom, unsigned div)
static __isl_give isl_basic_mapalign_context_divs (__isl_take isl_basic_map *bmap, __isl_keep isl_basic_set *dom)
static struct isl_solbasic_map_partial_lexopt_base_sol (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, struct isl_sol *(*init)(__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max))
static __isl_give isl_mapbasic_map_partial_lexopt_base (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static __isl_give int * count_occurrences (__isl_keep isl_basic_map *bmap, int n)
static int single_occurrence (int n, isl_int *c, int *occurrences)
static int all_single_occurrence (__isl_keep isl_basic_map *bmap, int ineq, int n)
static isl_bool constraint_equal (const void *entry, const void *val)
static isl_bool parallel_constraints (__isl_keep isl_basic_map *bmap, int *first, int *second)
static __isl_give isl_basic_setselect_minimum (__isl_take isl_basic_set *bset, __isl_keep isl_mat *var, int i)
static __isl_give isl_setset_minimum (__isl_take isl_space *space, __isl_take isl_mat *var)
static isl_bool need_split_basic_map (__isl_keep isl_basic_map *bmap, __isl_keep isl_mat *cst)
static isl_bool need_split_basic_set (__isl_keep isl_basic_set *bset, __isl_keep isl_mat *cst)
static isl_bool need_split_set (__isl_keep isl_set *set, __isl_keep isl_mat *cst)
static __isl_give isl_mapsplit_domain (__isl_take isl_map *opt, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static __isl_give isl_setsplit (__isl_take isl_set *empty, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static __isl_give isl_mapbasic_map_partial_lexopt (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static __isl_give isl_mapbasic_map_partial_lexopt_symm_core (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, __isl_take isl_space *map_space, __isl_take isl_space *set_space)
static __isl_give isl_basic_setextract_domain (__isl_keep isl_basic_map *bmap, unsigned flags)
static __isl_give isl_vecextract_sample_sequence (struct isl_tab *tab, int pos, int len)
static isl_bool region_is_trivial (struct isl_tab *tab, int pos, __isl_keep isl_mat *trivial)
static int first_trivial_region (struct isl_lexmin_data *data)
static int is_optimal (__isl_keep isl_vec *sol, int n_op)
static int force_better_solution (struct isl_tab *tab, __isl_keep isl_vec *sol, int n_op, int n_zero)
static isl_stat fix_zero (struct isl_tab *tab, struct isl_trivial_region *region, int dir, struct isl_lexmin_data *data)
static struct isl_tabpos_neg (struct isl_tab *tab, struct isl_trivial_region *region, int side, struct isl_lexmin_data *data)
static isl_stat init_lexmin_data (struct isl_lexmin_data *data, __isl_keep isl_basic_set *bset)
static void update_outer_levels (struct isl_lexmin_data *data, int level)
static isl_stat init_local_region (struct isl_local_region *local, int region, struct isl_lexmin_data *data)
static int finished_all_cases (struct isl_local_region *local, struct isl_lexmin_data *data)
static enum isl_next enter_level (int level, int init, struct isl_lexmin_data *data)
static isl_stat better_next_side (struct isl_local_region *local, struct isl_lexmin_data *data)
static isl_stat pick_side (struct isl_local_region *local, struct isl_lexmin_data *data)
static void clear_lexmin_data (struct isl_lexmin_data *data)
__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_null isl_tab_lexminisl_tab_lexmin_free (__isl_take isl_tab_lexmin *tl)
__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)
static void sol_pma_free (struct isl_sol *sol)
static void sol_pma_add_empty (struct isl_sol_pma *sol, __isl_take isl_basic_set *bset)
static void sol_pma_add (struct isl_sol_pma *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *maff)
static void sol_pma_add_empty_wrap (struct isl_sol *sol, __isl_take isl_basic_set *bset)
static void sol_pma_add_wrap (struct isl_sol *sol, __isl_take isl_basic_set *dom, __isl_take isl_multi_aff *ma)
static struct isl_solsol_pma_init (__isl_keep isl_basic_map *bmap, __isl_take isl_basic_set *dom, int track_empty, int max)
static __isl_give isl_pw_multi_affbasic_map_partial_lexopt_base_pw_multi_aff (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static isl_bool need_substitution (__isl_keep isl_multi_aff *maff)
static __isl_give isl_pw_affset_minimum_pa (__isl_take isl_space *space, __isl_take isl_mat *var)
static __isl_give isl_pw_multi_affsplit_domain_pma (__isl_take isl_pw_multi_aff *opt, __isl_take isl_pw_aff *min_expr_pa, __isl_take isl_set *min_expr, __isl_take isl_mat *cst)
static __isl_give isl_pw_multi_affbasic_map_partial_lexopt_pw_multi_aff (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max)
static __isl_give isl_pw_multi_affbasic_map_partial_lexopt_symm_core_pw_multi_aff (__isl_take isl_basic_map *bmap, __isl_take isl_basic_set *dom, __isl_give isl_set **empty, int max, __isl_take isl_mat *cst, __isl_take isl_space *map_space, __isl_take isl_space *set_space)

Variables

struct isl_context_op isl_context_lex_op
struct isl_context_op isl_context_gbr_op

Macro Definition Documentation

◆ CUT_ALL

#define CUT_ALL   1

Definition at line 1858 of file isl_tab_pip.c.

Referenced by check_integer_feasible().

◆ CUT_ONE

#define CUT_ONE   0

◆ I_CST

#define I_CST   1 << 0

Definition at line 1747 of file isl_tab_pip.c.

Referenced by next_non_integer_var().

◆ I_PAR

#define I_PAR   1 << 1

Definition at line 1748 of file isl_tab_pip.c.

Referenced by find_solutions(), and next_non_integer_var().

◆ I_VAR

#define I_VAR   1 << 2

Definition at line 1749 of file isl_tab_pip.c.

Referenced by cut_to_integer_lexmin(), find_solutions(), and next_non_integer_var().

◆ SUFFIX [1/2]

#define SUFFIX

Definition at line 4975 of file isl_tab_pip.c.

◆ SUFFIX [2/2]

#define SUFFIX   _pw_multi_aff

Definition at line 4975 of file isl_tab_pip.c.

◆ TYPE [1/2]

#define TYPE   isl_map

Definition at line 4973 of file isl_tab_pip.c.

◆ TYPE [2/2]

#define TYPE   isl_pw_multi_aff

Definition at line 4973 of file isl_tab_pip.c.

Enumeration Type Documentation

◆ isl_next

enum isl_next
Enumerator
isl_next_error 
isl_next_done 
isl_next_backtrack 
isl_next_handle 

Definition at line 5298 of file isl_tab_pip.c.

Function Documentation

◆ add_cut()

◆ add_div()

int add_div ( struct isl_tab * tab,
struct isl_context * context,
__isl_keep isl_vec * div )
static

◆ add_gbr_eq()

struct isl_tab * add_gbr_eq ( struct isl_tab * tab,
isl_int * eq )
static

Definition at line 3092 of file isl_tab_pip.c.

References isl_tab_add_eq(), isl_tab_extend_cons(), and isl_tab_free().

Referenced by context_gbr_add_eq().

◆ add_gbr_ineq()

◆ add_lexmin_eq()

◆ add_lexmin_ineq()

◆ add_lexmin_valid_eq()

◆ add_parametric_cut()

◆ align_context_divs()

◆ all_single_occurrence()

int all_single_occurrence ( __isl_keep isl_basic_map * bmap,
int ineq,
int n )
static

Definition at line 4536 of file isl_tab_pip.c.

References __isl_keep, isl_int_is_zero, and n.

Referenced by SF().

◆ basic_map_partial_lexopt()

◆ basic_map_partial_lexopt_base()

◆ basic_map_partial_lexopt_base_pw_multi_aff()

◆ basic_map_partial_lexopt_base_sol()

◆ basic_map_partial_lexopt_pw_multi_aff()

__isl_give isl_pw_multi_aff * basic_map_partial_lexopt_pw_multi_aff ( __isl_take isl_basic_map * bmap,
__isl_take isl_basic_set * dom,
__isl_give isl_set ** empty,
int max )
static

◆ basic_map_partial_lexopt_symm_core()

◆ basic_map_partial_lexopt_symm_core_pw_multi_aff()

__isl_give isl_pw_multi_aff * basic_map_partial_lexopt_symm_core_pw_multi_aff ( __isl_take isl_basic_map * bmap,
__isl_take isl_basic_set * dom,
__isl_give isl_set ** empty,
int max,
__isl_take isl_mat * cst,
__isl_take isl_space * map_space,
__isl_take isl_space * set_space )
static

Definition at line 5980 of file isl_tab_pip.c.

◆ best_split()

◆ better_next_side()

◆ check_final_columns_are_zero()

isl_stat check_final_columns_are_zero ( __isl_keep isl_mat * M,
unsigned first )
static

◆ check_gbr_integer_feasible()

◆ check_integer_feasible()

◆ check_lexpos()

◆ check_samples()

◆ clear_lexmin_data()

void clear_lexmin_data ( struct isl_lexmin_data * data)
static

◆ col_is_parameter_var()

int col_is_parameter_var ( struct isl_tab * tab,
int col )
static

◆ combine_initial_if_equal()

◆ combine_initial_into_second()

◆ constraint_equal()

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

◆ context_gbr_add_eq()

◆ context_gbr_add_ineq()

void context_gbr_add_ineq ( struct isl_context * context,
isl_int * ineq,
int check,
int update )
static

◆ context_gbr_add_ineq_wrap()

isl_stat context_gbr_add_ineq_wrap ( void * user,
isl_int * ineq )
static

Definition at line 3226 of file isl_tab_pip.c.

References context, context_gbr_add_ineq(), isl_stat_error, isl_stat_ok, and user.

Referenced by context_gbr_insert_div().

◆ context_gbr_best_split()

int context_gbr_best_split ( struct isl_context * context,
struct isl_tab * tab )
static

◆ context_gbr_detect_equalities()

◆ context_gbr_detect_nonnegative_parameters()

struct isl_tab * context_gbr_detect_nonnegative_parameters ( struct isl_context * context,
struct isl_tab * tab )
static

◆ context_gbr_discard()

void context_gbr_discard ( void * save)
static

Definition at line 3561 of file isl_tab_pip.c.

◆ context_gbr_free()

__isl_null struct isl_context * context_gbr_free ( struct isl_context * context)
static

◆ context_gbr_get_div()

int context_gbr_get_div ( struct isl_context * context,
struct isl_tab * tab,
struct isl_vec * div )
static

Definition at line 3427 of file isl_tab_pip.c.

References context, and get_div().

◆ context_gbr_ineq_sign()

enum isl_tab_row_sign context_gbr_ineq_sign ( struct isl_context * context,
isl_int * ineq,
int strict )
static

Definition at line 3233 of file isl_tab_pip.c.

References context, isl_context_gbr::tab, and tab_ineq_sign().

◆ context_gbr_insert_div()

◆ context_gbr_invalidate()

void context_gbr_invalidate ( struct isl_context * context)
static

Definition at line 3573 of file isl_tab_pip.c.

References context, isl_tab_free(), and isl_context_gbr::tab.

◆ context_gbr_is_empty()

int context_gbr_is_empty ( struct isl_context * context)
static

Definition at line 3481 of file isl_tab_pip.c.

References context, isl_tab::empty, and isl_context_gbr::tab.

◆ context_gbr_is_ok()

int context_gbr_is_ok ( struct isl_context * context)
static

Definition at line 3567 of file isl_tab_pip.c.

References context, and isl_context_gbr::tab.

◆ context_gbr_peek_basic_set()

struct isl_basic_set * context_gbr_peek_basic_set ( struct isl_context * context)
static

Definition at line 2896 of file isl_tab_pip.c.

References context, isl_basic_set, isl_tab_peek_bset(), and isl_context_gbr::tab.

◆ context_gbr_peek_tab()

struct isl_tab * context_gbr_peek_tab ( struct isl_context * context)
static

Definition at line 2905 of file isl_tab_pip.c.

References context, and isl_context_gbr::tab.

◆ context_gbr_restore()

◆ context_gbr_save()

◆ context_gbr_test_ineq()

◆ context_lex_add_eq()

void context_lex_add_eq ( struct isl_context * context,
isl_int * eq,
int check,
int update )
static

◆ context_lex_add_ineq()

void context_lex_add_ineq ( struct isl_context * context,
isl_int * ineq,
int check,
int update )
static

◆ context_lex_add_ineq_wrap()

isl_stat context_lex_add_ineq_wrap ( void * user,
isl_int * ineq )
static

Definition at line 2533 of file isl_tab_pip.c.

References context, context_lex_add_ineq(), isl_stat_error, isl_stat_ok, and user.

Referenced by context_lex_insert_div().

◆ context_lex_best_split()

int context_lex_best_split ( struct isl_context * context,
struct isl_tab * tab )
static

◆ context_lex_detect_equalities()

int context_lex_detect_equalities ( struct isl_context * context,
struct isl_tab * tab )
static

Definition at line 2644 of file isl_tab_pip.c.

References context.

◆ context_lex_detect_nonnegative_parameters()

struct isl_tab * context_lex_detect_nonnegative_parameters ( struct isl_context * context,
struct isl_tab * tab )
static

◆ context_lex_discard()

void context_lex_discard ( void * save)
static

Definition at line 2699 of file isl_tab_pip.c.

◆ context_lex_free()

__isl_null struct isl_context * context_lex_free ( struct isl_context * context)
static

Definition at line 2799 of file isl_tab_pip.c.

References __isl_null, context, isl_tab_free(), and isl_context_lex::tab.

◆ context_lex_get_div()

int context_lex_get_div ( struct isl_context * context,
struct isl_tab * tab,
struct isl_vec * div )
static

Definition at line 2616 of file isl_tab_pip.c.

References context, and get_div().

◆ context_lex_ineq_sign()

enum isl_tab_row_sign context_lex_ineq_sign ( struct isl_context * context,
isl_int * ineq,
int strict )
static

Definition at line 2580 of file isl_tab_pip.c.

References context, isl_context_lex::tab, and tab_ineq_sign().

◆ context_lex_insert_div()

isl_bool context_lex_insert_div ( struct isl_context * context,
int pos,
__isl_keep isl_vec * div )
static

◆ context_lex_invalidate()

void context_lex_invalidate ( struct isl_context * context)
static

Definition at line 2792 of file isl_tab_pip.c.

References context, isl_tab_free(), and isl_context_lex::tab.

◆ context_lex_is_empty()

int context_lex_is_empty ( struct isl_context * context)
static

Definition at line 2668 of file isl_tab_pip.c.

References context, isl_tab::empty, and isl_context_lex::tab.

◆ context_lex_is_ok()

int context_lex_is_ok ( struct isl_context * context)
static

Definition at line 2703 of file isl_tab_pip.c.

References context, and isl_context_lex::tab.

◆ context_lex_peek_basic_set()

struct isl_basic_set * context_lex_peek_basic_set ( struct isl_context * context)
static

Definition at line 2473 of file isl_tab_pip.c.

References context, isl_basic_set, isl_tab_peek_bset(), and isl_context_lex::tab.

◆ context_lex_peek_tab()

struct isl_tab * context_lex_peek_tab ( struct isl_context * context)
static

Definition at line 2482 of file isl_tab_pip.c.

References context, and isl_context_lex::tab.

◆ context_lex_restore()

void context_lex_restore ( struct isl_context * context,
void * save )
static

Definition at line 2690 of file isl_tab_pip.c.

References context, isl_tab_free(), isl_tab_rollback(), and isl_context_lex::tab.

◆ context_lex_save()

void * context_lex_save ( struct isl_context * context)
static

◆ context_lex_test_ineq()

int context_lex_test_ineq ( struct isl_context * context,
isl_int * ineq )
static

◆ context_tab_for_lexmin()

struct isl_tab * context_tab_for_lexmin ( __isl_take isl_basic_set * bset)
static

◆ context_tab_insert_div()

◆ count_occurrences()

__isl_give int * count_occurrences ( __isl_keep isl_basic_map * bmap,
int n )
static

◆ cut_to_integer_lexmin()

struct isl_tab * cut_to_integer_lexmin ( struct isl_tab * tab,
int cutting_strategy )
static

◆ drop_constant_terms()

__isl_give isl_basic_set * drop_constant_terms ( __isl_take isl_basic_set * bset)
static

Definition at line 2969 of file isl_tab_pip.c.

References __isl_give, __isl_take, isl_basic_set, and isl_int_set_si.

Referenced by gbr_get_sample().

◆ enter_level()

◆ equal_on_domain()

◆ extract_domain()

◆ extract_sample_sequence()

__isl_give isl_vec * extract_sample_sequence ( struct isl_tab * tab,
int pos,
int len )
static

◆ find_context_div()

◆ find_div()

int find_div ( struct isl_tab * tab,
isl_int * div,
isl_int denom )
static

◆ find_in_pos()

void find_in_pos ( struct isl_sol * sol,
struct isl_tab * tab,
isl_int * ineq )
static

◆ find_solutions()

◆ find_solutions_main()

◆ finished_all_cases()

int finished_all_cases ( struct isl_local_region * local,
struct isl_lexmin_data * data )
static

Definition at line 5313 of file isl_tab_pip.c.

References isl_tab::empty, isl_local_region::n, isl_local_region::side, and isl_lexmin_data::tab.

Referenced by enter_level().

◆ first_neg()

◆ first_non_integer_row()

int first_non_integer_row ( struct isl_tab * tab,
int * f )
static

Definition at line 1796 of file isl_tab_pip.c.

References f, isl_tab_var::index, next_non_integer_var(), isl_tab::var, and var().

Referenced by find_solutions().

◆ first_trivial_region()

int first_trivial_region ( struct isl_lexmin_data * data)
static

◆ fix_zero()

isl_stat fix_zero ( struct isl_tab * tab,
struct isl_trivial_region * region,
int dir,
struct isl_lexmin_data * data )
static

◆ force_better_solution()

int force_better_solution ( struct isl_tab * tab,
__isl_keep isl_vec * sol,
int n_op,
int n_zero )
static

◆ gbr_get_sample()

◆ gbr_get_shifted_sample()

◆ gbr_init_shifted()

◆ get_div()

int get_div ( struct isl_tab * tab,
struct isl_context * context,
struct isl_vec * div )
static

◆ get_row_parameter_div()

struct isl_vec * get_row_parameter_div ( struct isl_tab * tab,
int row )
static

◆ get_row_parameter_ineq()

struct isl_vec * get_row_parameter_ineq ( struct isl_tab * tab,
int row )
static

◆ get_row_parameter_line()

◆ get_row_split_div()

struct isl_vec * get_row_split_div ( struct isl_tab * tab,
int row )
static

◆ identical_parameter_line()

int identical_parameter_line ( struct isl_tab * tab,
int row1,
int row2 )
static

◆ ineq_for_div()

__isl_give isl_vec * ineq_for_div ( __isl_keep isl_basic_set * bset,
unsigned div )
static

◆ init_lexmin_data()

◆ init_local_region()

◆ integer_constant()

int integer_constant ( struct isl_tab * tab,
int row )
static

Definition at line 1741 of file isl_tab_pip.c.

References isl_int_is_divisible_by, isl_tab::mat, and isl_mat::row.

Referenced by next_non_integer_var().

◆ integer_parameter()

int integer_parameter ( struct isl_tab * tab,
int row )
static

◆ integer_variable()

int integer_variable ( struct isl_tab * tab,
int row )
static

◆ is_constant()

int is_constant ( struct isl_tab * tab,
int row )
static

◆ is_critical()

int is_critical ( struct isl_tab * tab,
int row )
static

◆ is_obviously_neg()

◆ is_obviously_nonneg()

◆ is_optimal()

int is_optimal ( __isl_keep isl_vec * sol,
int n_op )
static

Definition at line 5089 of file isl_tab_pip.c.

References __isl_keep, and isl_int_is_zero.

Referenced by enter_level().

◆ is_parameter_var()

int is_parameter_var ( struct isl_tab * tab,
int index )
static

Definition at line 1236 of file isl_tab_pip.c.

References isl_tab::n_div, isl_tab::n_param, and isl_tab::n_var.

Referenced by col_is_parameter_var(), and row_is_parameter_var().

◆ is_parametric_constant()

int is_parametric_constant ( struct isl_tab * tab,
int row )
static

◆ is_strict()

int is_strict ( struct isl_vec * vec)
static

◆ isl_context_alloc()

◆ isl_context_gbr_alloc()

◆ isl_context_lex_alloc()

◆ isl_tab_basic_set_non_trivial_lexmin()

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

◆ last_non_zero_var_col()

int last_non_zero_var_col ( struct isl_tab * tab,
isl_int * p )
static

◆ last_var_col_or_int_par_col()

◆ lexmin_col_pair()

int lexmin_col_pair ( struct isl_tab * tab,
int row,
int col1,
int col2,
isl_int tmp )
static

◆ lexmin_pivot_col()

int lexmin_pivot_col ( struct isl_tab * tab,
int row )
static

◆ need_split_basic_map()

◆ need_split_basic_set()

isl_bool need_split_basic_set ( __isl_keep isl_basic_set * bset,
__isl_keep isl_mat * cst )
static

Definition at line 4794 of file isl_tab_pip.c.

References __isl_keep, bset_to_bmap(), isl_basic_set, and need_split_basic_map().

Referenced by need_split_set().

◆ need_split_set()

isl_bool need_split_set ( __isl_keep isl_set * set,
__isl_keep isl_mat * cst )
static

Definition at line 4804 of file isl_tab_pip.c.

References __isl_keep, isl_bool_false, isl_set, need_split_basic_set(), set, and split().

Referenced by split_domain_pma().

◆ need_substitution()

isl_bool need_substitution ( __isl_keep isl_multi_aff * maff)
static

Definition at line 5806 of file isl_tab_pip.c.

References __isl_keep, isl_aff_involves_dims(), isl_bool_error, isl_bool_false, isl_dim_in, and pos().

Referenced by split_domain_pma().

◆ next_non_integer_var()

◆ no_sol_in_strict()

void no_sol_in_strict ( struct isl_sol * sol,
struct isl_tab * tab,
struct isl_vec * ineq )
static

◆ normalize_div()

◆ parallel_constraints()

◆ pick_side()

◆ pos_neg()

◆ propagate_equalities()

◆ region_is_trivial()

◆ report_conflict()

◆ report_conflicting_constraint()

int report_conflicting_constraint ( struct isl_tab * tab,
int con )
static

Definition at line 1374 of file isl_tab_pip.c.

References isl_tab::con, isl_tab::conflict, and isl_tab::conflict_user.

Referenced by report_conflict().

◆ reset_any_to_unknown()

void reset_any_to_unknown ( struct isl_tab * tab)
static

◆ restore_lexmin()

◆ row_is_parameter_var()

int row_is_parameter_var ( struct isl_tab * tab,
int row )
static

Definition at line 1256 of file isl_tab_pip.c.

References is_parameter_var(), and isl_tab::row_var.

Referenced by find_solutions_main().

◆ row_sign()

◆ same_solution()

isl_bool same_solution ( struct isl_partial_sol * s1,
struct isl_partial_sol * s2 )
static

Definition at line 392 of file isl_tab_pip.c.

References isl_bool_false, isl_bool_true, and isl_partial_sol::ma.

Referenced by combine_initial_if_equal().

◆ sample_is_finite()

int sample_is_finite ( struct isl_tab * tab)
static

◆ scale_rows()

void scale_rows ( struct isl_mat * mat,
isl_int m,
int n_row )
static

Definition at line 612 of file isl_tab_pip.c.

References isl_int_is_one, isl_seq_scale(), m, isl_tab::mat, isl_mat::n_col, isl_tab::n_row, and isl_mat::row.

Referenced by sol_add().

◆ select_minimum()

◆ set_from_affine_matrix()

◆ set_minimum()

◆ set_minimum_pa()

◆ set_row_cst_to_div()

◆ single_occurrence()

int single_occurrence ( int n,
isl_int * c,
int * occurrences )
static

Definition at line 4519 of file isl_tab_pip.c.

References isl_int_is_zero, and n.

Referenced by parallel_constraints().

◆ sol_add()

◆ sol_dec_level()

void sol_dec_level ( struct isl_sol * sol)
static

Definition at line 574 of file isl_tab_pip.c.

References isl_sol::error, isl_sol::level, and sol_pop().

Referenced by sol_dec_level_wrap().

◆ sol_dec_level_wrap()

isl_stat sol_dec_level_wrap ( struct isl_tab_callback * cb)
static

Definition at line 584 of file isl_tab_pip.c.

References isl_sol_callback::callback, isl_stat_error, isl_stat_ok, and sol_dec_level().

Referenced by sol_init().

◆ sol_domain()

◆ sol_free()

◆ sol_has_mergeable_solutions()

int sol_has_mergeable_solutions ( struct isl_sol * sol)
static

◆ sol_inc_level()

◆ sol_init()

◆ sol_map_add()

◆ sol_map_add_empty()

◆ sol_map_add_empty_wrap()

void sol_map_add_empty_wrap ( struct isl_sol * sol,
struct isl_basic_set * bset )
static

Definition at line 797 of file isl_tab_pip.c.

References isl_basic_set, isl_sol_map::sol, and sol_map_add_empty().

Referenced by sol_map_init().

◆ sol_map_add_wrap()

void sol_map_add_wrap ( struct isl_sol * sol,
__isl_take isl_basic_set * dom,
__isl_take isl_multi_aff * ma )
static

Definition at line 828 of file isl_tab_pip.c.

References __isl_take, isl_basic_set, ma, isl_sol_map::sol, and sol_map_add().

Referenced by sol_map_init().

◆ sol_map_free()

void sol_map_free ( struct isl_sol * sol)
static

Definition at line 767 of file isl_tab_pip.c.

References isl_sol_map::empty, isl_map_free(), isl_set_free(), isl_sol_map::map, and isl_sol_map::sol.

Referenced by sol_map_init().

◆ sol_map_init()

◆ sol_pma_add()

◆ sol_pma_add_empty()

◆ sol_pma_add_empty_wrap()

void sol_pma_add_empty_wrap ( struct isl_sol * sol,
__isl_take isl_basic_set * bset )
static

Definition at line 5716 of file isl_tab_pip.c.

References __isl_take, isl_basic_set, isl_sol_pma::sol, and sol_pma_add_empty().

Referenced by sol_pma_init().

◆ sol_pma_add_wrap()

void sol_pma_add_wrap ( struct isl_sol * sol,
__isl_take isl_basic_set * dom,
__isl_take isl_multi_aff * ma )
static

Definition at line 5722 of file isl_tab_pip.c.

References __isl_take, isl_basic_set, ma, isl_sol_pma::sol, and sol_pma_add().

Referenced by sol_pma_init().

◆ sol_pma_free()

void sol_pma_free ( struct isl_sol * sol)
static

◆ sol_pma_init()

◆ sol_pop()

◆ sol_pop_one()

void sol_pop_one ( struct isl_sol * sol)
static

◆ sol_push_sol()

◆ sol_push_sol_mat()

◆ split()

◆ split_domain()

◆ split_domain_pma()

◆ swap_initial()

void swap_initial ( struct isl_sol * sol)
static

Definition at line 413 of file isl_tab_pip.c.

References isl_partial_sol::next, and isl_sol::partial.

Referenced by combine_initial_if_equal().

◆ tab_detect_nonnegative_parameters()

◆ tab_for_lexmin()

◆ tab_has_valid_sample()

◆ tab_ineq_sign()

◆ update_outer_levels()

void update_outer_levels ( struct isl_lexmin_data * data,
int level )
static

Definition at line 5263 of file isl_tab_pip.c.

References isl_lexmin_data::local, and isl_local_region::update.

Referenced by enter_level().

◆ use_shifted()

int use_shifted ( struct isl_context_gbr * cgbr)
static

Variable Documentation

◆ isl_context_gbr_op

struct isl_context_op isl_context_gbr_op
Initial value:
= {
}
static struct isl_tab * context_gbr_peek_tab(struct isl_context *context)
static int context_gbr_test_ineq(struct isl_context *context, isl_int *ineq)
static int context_gbr_detect_equalities(struct isl_context *context, struct isl_tab *tab)
static int context_gbr_is_empty(struct isl_context *context)
static int context_gbr_best_split(struct isl_context *context, struct isl_tab *tab)
static void context_gbr_discard(void *save)
static void * context_gbr_save(struct isl_context *context)
static int context_gbr_get_div(struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static struct isl_tab * context_gbr_detect_nonnegative_parameters(struct isl_context *context, struct isl_tab *tab)
static __isl_null struct isl_context * context_gbr_free(struct isl_context *context)
static struct isl_basic_set * context_gbr_peek_basic_set(struct isl_context *context)
static void context_gbr_invalidate(struct isl_context *context)
static int context_gbr_is_ok(struct isl_context *context)
static enum isl_tab_row_sign context_gbr_ineq_sign(struct isl_context *context, isl_int *ineq, int strict)
static void context_gbr_restore(struct isl_context *context, void *save)
static isl_bool context_gbr_insert_div(struct isl_context *context, int pos, __isl_keep isl_vec *div)
static void context_gbr_add_eq(struct isl_context *context, isl_int *eq, int check, int update)
static void context_gbr_add_ineq(struct isl_context *context, isl_int *ineq, int check, int update)

Definition at line 3592 of file isl_tab_pip.c.

Referenced by isl_context_gbr_alloc().

◆ isl_context_lex_op

struct isl_context_op isl_context_lex_op
Initial value:
= {
}
static void context_lex_add_ineq(struct isl_context *context, isl_int *ineq, int check, int update)
static int context_lex_is_ok(struct isl_context *context)
static struct isl_tab * context_lex_detect_nonnegative_parameters(struct isl_context *context, struct isl_tab *tab)
static int context_lex_get_div(struct isl_context *context, struct isl_tab *tab, struct isl_vec *div)
static isl_bool context_lex_insert_div(struct isl_context *context, int pos, __isl_keep isl_vec *div)
static int context_lex_best_split(struct isl_context *context, struct isl_tab *tab)
static struct isl_tab * context_lex_peek_tab(struct isl_context *context)
static void context_lex_discard(void *save)
static void context_lex_restore(struct isl_context *context, void *save)
static int context_lex_detect_equalities(struct isl_context *context, struct isl_tab *tab)
static void context_lex_invalidate(struct isl_context *context)
static void context_lex_add_eq(struct isl_context *context, isl_int *eq, int check, int update)
static struct isl_basic_set * context_lex_peek_basic_set(struct isl_context *context)
static enum isl_tab_row_sign context_lex_ineq_sign(struct isl_context *context, isl_int *ineq, int strict)
static __isl_null struct isl_context * context_lex_free(struct isl_context *context)
static int context_lex_test_ineq(struct isl_context *context, isl_int *ineq)
static int context_lex_is_empty(struct isl_context *context)
static void * context_lex_save(struct isl_context *context)

Definition at line 2809 of file isl_tab_pip.c.

Referenced by isl_context_lex_alloc().