add isl_map_{lexmin,lexmax}_pw_multi_aff
[platform/upstream/isl.git] / doc / user.pod
index 74cb4ce..46e5a4c 100644 (file)
@@ -673,6 +673,8 @@ of the original object.
                __isl_keep isl_pw_aff *pwaff);
        __isl_give isl_space *isl_pw_aff_get_space(
                __isl_keep isl_pw_aff *pwaff);
+       __isl_give isl_space *isl_multi_aff_get_domain_space(
+               __isl_keep isl_multi_aff *maff);
        __isl_give isl_space *isl_multi_aff_get_space(
                __isl_keep isl_multi_aff *maff);
        __isl_give isl_space *isl_pw_multi_aff_get_domain_space(
@@ -1184,10 +1186,14 @@ using the following functions.
 Sets and relations can be converted to union sets and relations
 using the following functions.
 
-       __isl_give isl_union_map *isl_union_map_from_map(
-               __isl_take isl_map *map);
+       __isl_give isl_union_set *isl_union_set_from_basic_set(
+               __isl_take isl_basic_set *bset);
+       __isl_give isl_union_map *isl_union_map_from_basic_map(
+               __isl_take isl_basic_map *bmap);
        __isl_give isl_union_set *isl_union_set_from_set(
                __isl_take isl_set *set);
+       __isl_give isl_union_map *isl_union_map_from_map(
+               __isl_take isl_map *map);
 
 The inverse conversions below can only be used if the input
 union set or relation is known to contain elements in exactly one
@@ -1218,7 +1224,7 @@ functions.
        __isl_give isl_union_map *isl_union_map_copy(
                __isl_keep isl_union_map *umap);
        void isl_basic_set_free(__isl_take isl_basic_set *bset);
-       void isl_set_free(__isl_take isl_set *set);
+       void *isl_set_free(__isl_take isl_set *set);
        void *isl_union_set_free(__isl_take isl_union_set *uset);
        void isl_basic_map_free(__isl_take isl_basic_map *bmap);
        void isl_map_free(__isl_take isl_map *map);
@@ -1400,6 +1406,27 @@ using the following functions, which compute an overapproximation.
        __isl_give isl_map *isl_map_remove_divs(
                __isl_take isl_map *map);
 
+It is also possible to only remove those divs that are defined
+in terms of a given range of dimensions or only those for which
+no explicit representation is known.
+
+       __isl_give isl_basic_set *
+       isl_basic_set_remove_divs_involving_dims(
+               __isl_take isl_basic_set *bset,
+               enum isl_dim_type type,
+               unsigned first, unsigned n);
+       __isl_give isl_set *isl_set_remove_divs_involving_dims(
+               __isl_take isl_set *set, enum isl_dim_type type,
+               unsigned first, unsigned n);
+       __isl_give isl_map *isl_map_remove_divs_involving_dims(
+               __isl_take isl_map *map, enum isl_dim_type type,
+               unsigned first, unsigned n);
+
+       __isl_give isl_set *isl_set_remove_unknown_divs(
+               __isl_take isl_set *set);
+       __isl_give isl_map *isl_map_remove_unknown_divs(
+               __isl_take isl_map *map);
+
 To iterate over all the sets or maps in a union set or map, use
 
        int isl_union_set_foreach_set(__isl_keep isl_union_set *uset,
@@ -1914,6 +1941,10 @@ that maps (a wrapped version of) the input relation to its domain or range.
 
 =item * Elimination
 
+       __isl_give isl_basic_set *isl_basic_set_eliminate(
+               __isl_take isl_basic_set *bset,
+               enum isl_dim_type type,
+               unsigned first, unsigned n);
        __isl_give isl_set *isl_set_eliminate(
                __isl_take isl_set *set, enum isl_dim_type type,
                unsigned first, unsigned n);
@@ -2375,9 +2406,15 @@ with the original range as range of this nested relation.
 
 =item * Aligning parameters
 
+       __isl_give isl_basic_set *isl_basic_set_align_params(
+               __isl_take isl_basic_set *bset,
+               __isl_take isl_space *model);
        __isl_give isl_set *isl_set_align_params(
                __isl_take isl_set *set,
                __isl_take isl_space *model);
+       __isl_give isl_basic_map *isl_basic_map_align_params(
+               __isl_take isl_basic_map *bmap,
+               __isl_take isl_space *model);
        __isl_give isl_map *isl_map_align_params(
                __isl_take isl_map *map,
                __isl_take isl_space *model);
@@ -2395,6 +2432,14 @@ All parameters need to be named.
        __isl_give isl_map *isl_map_add_dims(
                __isl_take isl_map *map,
                enum isl_dim_type type, unsigned n);
+       __isl_give isl_basic_set *isl_basic_set_insert_dims(
+               __isl_take isl_basic_set *bset,
+               enum isl_dim_type type, unsigned pos,
+               unsigned n);
+       __isl_give isl_basic_map *isl_basic_map_insert_dims(
+               __isl_take isl_basic_map *bmap,
+               enum isl_dim_type type, unsigned pos,
+               unsigned n);
        __isl_give isl_set *isl_set_insert_dims(
                __isl_take isl_set *set,
                enum isl_dim_type type, unsigned pos, unsigned n);
@@ -2586,12 +2631,18 @@ a parametric set as well.
        __isl_give isl_basic_map *isl_basic_map_range_product(
                __isl_take isl_basic_map *bmap1,
                __isl_take isl_basic_map *bmap2);
+       __isl_give isl_basic_map *isl_basic_map_product(
+               __isl_take isl_basic_map *bmap1,
+               __isl_take isl_basic_map *bmap2);
        __isl_give isl_map *isl_map_domain_product(
                __isl_take isl_map *map1,
                __isl_take isl_map *map2);
        __isl_give isl_map *isl_map_range_product(
                __isl_take isl_map *map1,
                __isl_take isl_map *map2);
+       __isl_give isl_union_map *isl_union_map_domain_product(
+               __isl_take isl_union_map *umap1,
+               __isl_take isl_union_map *umap2);
        __isl_give isl_union_map *isl_union_map_range_product(
                __isl_take isl_union_map *umap1,
                __isl_take isl_union_map *umap2);
@@ -2808,11 +2859,15 @@ returning a basic set or relation.
                __isl_take isl_basic_map *bmap,
                __isl_take isl_basic_set *dom,
                __isl_give isl_set **empty);
+       __isl_give isl_pw_multi_aff *isl_map_lexmin_pw_multi_aff(
+               __isl_take isl_map *map);
+       __isl_give isl_pw_multi_aff *isl_map_lexmax_pw_multi_aff(
+               __isl_take isl_map *map);
 
 =head2 Lists
 
 Lists are defined over several element types, including
-C<isl_aff>, C<isl_pw_aff>, C<isl_basic_set> and C<isl_set>.
+C<isl_id>, C<isl_aff>, C<isl_pw_aff>, C<isl_basic_set> and C<isl_set>.
 Here we take lists of C<isl_set>s as an example.
 Lists can be created, copied, modified and freed using the following functions.
 
@@ -3072,6 +3127,10 @@ It can be modified using
                __isl_take isl_aff *aff, isl_int v);
        __isl_give isl_aff *isl_aff_add_constant_si(
                __isl_take isl_aff *aff, int v);
+       __isl_give isl_aff *isl_aff_add_constant_num(
+               __isl_take isl_aff *aff, isl_int v);
+       __isl_give isl_aff *isl_aff_add_constant_num_si(
+               __isl_take isl_aff *aff, int v);
        __isl_give isl_aff *isl_aff_add_coefficient(
                __isl_take isl_aff *aff,
                enum isl_dim_type type, int pos, isl_int v);
@@ -3102,6 +3161,8 @@ Note that the C<set_constant> and C<set_coefficient> functions
 set the I<numerator> of the constant or coefficient, while
 C<add_constant> and C<add_coefficient> add an integer value to
 the possibly rational constant or coefficient.
+The C<add_constant_num> functions add an integer value to
+the numerator.
 
 To check whether an affine expressions is obviously zero
 or obviously equal to some other affine expression, use
@@ -3206,6 +3267,8 @@ When multiplying two affine expressions, at least one of the two needs
 to be a constant.
 
        #include <isl/aff.h>
+       __isl_give isl_basic_set *isl_aff_neg_basic_set(
+               __isl_take isl_aff *aff);
        __isl_give isl_basic_set *isl_aff_le_basic_set(
                __isl_take isl_aff *aff1, __isl_take isl_aff *aff2);
        __isl_give isl_basic_set *isl_aff_ge_basic_set(
@@ -3248,6 +3311,9 @@ to be a constant.
                __isl_take isl_pw_aff_list *list1,
                __isl_take isl_pw_aff_list *list2);
 
+The function C<isl_aff_neg_basic_set> returns a basic set
+containing those elements in the domain space
+of C<aff> where C<aff> is negative.
 The function C<isl_aff_ge_basic_set> returns a basic set
 containing those elements in the shared space
 of C<aff1> and C<aff2> where C<aff1> is greater than or equal to C<aff2>.
@@ -3343,6 +3409,8 @@ can be created using the following functions.
                __isl_take isl_space *space);
        __isl_give isl_multi_aff *isl_multi_aff_zero(
                __isl_take isl_space *space);
+       __isl_give isl_multi_aff *isl_multi_aff_identity(
+               __isl_take isl_space *space);
        __isl_give isl_pw_multi_aff *
        isl_pw_multi_aff_from_multi_aff(
                __isl_take isl_multi_aff *ma);
@@ -3473,6 +3541,12 @@ obviously equal to each other, use
 Operations include
 
        #include <isl/aff.h>
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_lexmin(
+               __isl_take isl_pw_multi_aff *pma1,
+               __isl_take isl_pw_multi_aff *pma2);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_union_lexmax(
+               __isl_take isl_pw_multi_aff *pma1,
+               __isl_take isl_pw_multi_aff *pma2);
        __isl_give isl_multi_aff *isl_multi_aff_add(
                __isl_take isl_multi_aff *maff1,
                __isl_take isl_multi_aff *maff2);
@@ -3518,10 +3592,16 @@ Operations include
        __isl_give isl_multi_aff *isl_multi_aff_flat_range_product(
                __isl_take isl_multi_aff *ma1,
                __isl_take isl_multi_aff *ma2);
+       __isl_give isl_multi_aff *isl_multi_aff_product(
+               __isl_take isl_multi_aff *ma1,
+               __isl_take isl_multi_aff *ma2);
        __isl_give isl_pw_multi_aff *
        isl_pw_multi_aff_flat_range_product(
                __isl_take isl_pw_multi_aff *pma1,
                __isl_take isl_pw_multi_aff *pma2);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_product(
+               __isl_take isl_pw_multi_aff *pma1,
+               __isl_take isl_pw_multi_aff *pma2);
        __isl_give isl_union_pw_multi_aff *
        isl_union_pw_multi_aff_flat_range_product(
                __isl_take isl_union_pw_multi_aff *upma1,
@@ -3531,6 +3611,18 @@ If the C<ls> argument of C<isl_multi_aff_lift> is not C<NULL>,
 then it is assigned the local space that lies at the basis of
 the lifting applied.
 
+       __isl_give isl_set *isl_multi_aff_lex_le_set(
+               __isl_take isl_multi_aff *ma1,
+               __isl_take isl_multi_aff *ma2);
+       __isl_give isl_set *isl_multi_aff_lex_ge_set(
+               __isl_take isl_multi_aff *ma1,
+               __isl_take isl_multi_aff *ma2);
+
+The function C<isl_multi_aff_lex_le_set> returns a set
+containing those elements in the shared domain space
+where C<ma1> is lexicographically smaller than or
+equal to C<ma2>.
+
 An expression can be read from input using
 
        #include <isl/aff.h>