X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=isl_tab.h;h=8b808f0da86c20f5f1d137f2fdfe402e8dc3a10a;hb=c53ceda9cc1f9556507c9956647975a1d661a380;hp=51a0afcc5120559b53e898efc32ce6eedb1657e4;hpb=f3c292bf31fbb13ce50a8877ee71910897276a24;p=platform%2Fupstream%2Fisl.git diff --git a/isl_tab.h b/isl_tab.h index 51a0afc..8b808f0 100644 --- a/isl_tab.h +++ b/isl_tab.h @@ -1,7 +1,7 @@ /* * Copyright 2008-2009 Katholieke Universiteit Leuven * - * Use of this software is governed by the GNU LGPLv2.1 license + * Use of this software is governed by the MIT license * * Written by Sven Verdoolaege, K.U.Leuven, Departement * Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium @@ -35,6 +35,7 @@ enum isl_tab_undo_type { 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, @@ -118,6 +119,9 @@ struct isl_tab_undo { * can be reinstated during rollback when the constraint that cut them * out is removed. These samples are only maintained for the context * tableau while solving PILP problems. + * + * If "preserve" is set, then we want to keep all constraints in the + * tableau, even if they turn out to be redundant. */ enum isl_tab_row_sign { isl_tab_row_unknown = 0, @@ -161,8 +165,12 @@ struct isl_tab { int n_unbounded; struct isl_mat *basis; + int (*conflict)(int con, void *user); + void *conflict_user; + unsigned strict_redundant : 1; unsigned need_undo : 1; + unsigned preserve : 1; unsigned rational : 1; unsigned empty : 1; unsigned in_undo : 1; @@ -174,8 +182,12 @@ struct isl_tab *isl_tab_alloc(struct isl_ctx *ctx, unsigned n_row, unsigned n_var, unsigned M); void isl_tab_free(struct isl_tab *tab); -struct isl_tab *isl_tab_from_basic_map(struct isl_basic_map *bmap); -struct isl_tab *isl_tab_from_basic_set(struct isl_basic_set *bset); +isl_ctx *isl_tab_get_ctx(struct isl_tab *tab); + +__isl_give struct isl_tab *isl_tab_from_basic_map( + __isl_keep isl_basic_map *bmap, int track); +__isl_give struct isl_tab *isl_tab_from_basic_set( + __isl_keep isl_basic_set *bset, int track); struct isl_tab *isl_tab_from_recession_cone(struct isl_basic_set *bset, int parametric); int isl_tab_cone_is_bounded(struct isl_tab *tab); @@ -184,6 +196,8 @@ struct isl_basic_map *isl_basic_map_update_from_tab(struct isl_basic_map *bmap, struct isl_basic_set *isl_basic_set_update_from_tab(struct isl_basic_set *bset, struct isl_tab *tab); int isl_tab_detect_implicit_equalities(struct isl_tab *tab) WARN_UNUSED; +__isl_give isl_basic_map *isl_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; #define ISL_TAB_SAVE_DUAL (1 << 0) enum isl_lp_result isl_tab_min(struct isl_tab *tab, @@ -223,12 +237,31 @@ int isl_tab_rollback(struct isl_tab *tab, struct isl_tab_undo *snap) WARN_UNUSED struct isl_tab *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(struct isl_tab *tab, FILE *out, int indent); +void isl_tab_dump(__isl_keep struct isl_tab *tab); struct isl_map *isl_tab_basic_map_partial_lexopt( struct isl_basic_map *bmap, struct isl_basic_set *dom, struct isl_set **empty, int max); +__isl_give isl_pw_multi_aff *isl_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); + +/* An isl_region represents a sequence of consecutive variables. + * pos is the location (starting at 0) of the first variable in the sequence. + */ +struct isl_region { + int pos; + int len; +}; + +__isl_give isl_vec *isl_tab_basic_set_non_trivial_lexmin( + __isl_take isl_basic_set *bset, int n_op, int n_region, + struct isl_region *region, + int (*conflict)(int con, void *user), void *user); +__isl_give isl_vec *isl_tab_basic_set_non_neg_lexmin( + __isl_take isl_basic_set *bset); /* private */