add isl_pw_multi_aff_set_pw_aff
[platform/upstream/isl.git] / doc / user.pod
index af31a03..d0678df 100644 (file)
@@ -168,6 +168,47 @@ A call C<isl_pw_aff_cond(a, b, c)> can be replaced by
 
 =back
 
+=head3 Changes since isl-0.10
+
+=over
+
+=item * The functions C<isl_set_dim_has_lower_bound> and
+C<isl_set_dim_has_upper_bound> have been renamed to
+C<isl_set_dim_has_any_lower_bound> and
+C<isl_set_dim_has_any_upper_bound>.
+
+=back
+
+=head1 License
+
+C<isl> is released under the MIT license.
+
+=over
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+=back
+
+Note that C<isl> currently requires C<GMP>, which is released
+under the GNU Lesser General Public License (LGPL).  This means
+that code linked against C<isl> is also linked against LGPL code.
+
 =head1 Installation
 
 The source of C<isl> can be obtained either as a tarball
@@ -591,7 +632,7 @@ parameters is discouraged.
        __isl_give isl_space *isl_space_set_alloc(isl_ctx *ctx,
                unsigned nparam, unsigned dim);
        __isl_give isl_space *isl_space_copy(__isl_keep isl_space *space);
-       void isl_space_free(__isl_take isl_space *space);
+       void *isl_space_free(__isl_take isl_space *space);
        unsigned isl_space_dim(__isl_keep isl_space *space,
                enum isl_dim_type type);
 
@@ -616,11 +657,20 @@ or whether it is a parameter space, use these functions:
        int isl_space_is_set(__isl_keep isl_space *space);
        int isl_space_is_map(__isl_keep isl_space *space);
 
-Spaces can be compared using the following function:
+Spaces can be compared using the following functions:
 
        #include <isl/space.h>
        int isl_space_is_equal(__isl_keep isl_space *space1,
                __isl_keep isl_space *space2);
+       int isl_space_is_domain(__isl_keep isl_space *space1,
+               __isl_keep isl_space *space2);
+       int isl_space_is_range(__isl_keep isl_space *space1,
+               __isl_keep isl_space *space2);
+
+C<isl_space_is_domain> checks whether the first argument is equal
+to the domain of the second argument.  This requires in particular that
+the first argument is a set space and that the second argument
+is a map space.
 
 It is often useful to create objects that live in the
 same space as some other object.  This can be accomplished
@@ -1230,11 +1280,11 @@ functions.
        __isl_give isl_map *isl_map_copy(__isl_keep isl_map *map);
        __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_basic_set_free(__isl_take isl_basic_set *bset);
        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);
+       void *isl_basic_map_free(__isl_take isl_basic_map *bmap);
+       void *isl_map_free(__isl_take isl_map *map);
        void *isl_union_map_free(__isl_take isl_union_map *umap);
 
 Other sets and relations can be constructed by starting
@@ -1422,6 +1472,11 @@ no explicit representation is known.
                __isl_take isl_basic_set *bset,
                enum isl_dim_type type,
                unsigned first, unsigned n);
+       __isl_give isl_basic_map *
+       isl_basic_map_remove_divs_involving_dims(
+               __isl_take isl_basic_map *bmap,
+               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);
@@ -1600,9 +1655,9 @@ constraints.  Instead the following functions can be used.
 Similarly, the following functions can be used to check whether
 a given dimension is involved in any lower or upper bound.
 
-       int isl_set_dim_has_lower_bound(__isl_keep isl_set *set,
+       int isl_set_dim_has_any_lower_bound(__isl_keep isl_set *set,
                enum isl_dim_type type, unsigned pos);
-       int isl_set_dim_has_upper_bound(__isl_keep isl_set *set,
+       int isl_set_dim_has_any_upper_bound(__isl_keep isl_set *set,
                enum isl_dim_type type, unsigned pos);
 
 The identifiers or names of the domain and range spaces of a set
@@ -1985,6 +2040,9 @@ without removing the dimensions.
        __isl_give isl_basic_map *isl_basic_map_fix_si(
                __isl_take isl_basic_map *bmap,
                enum isl_dim_type type, unsigned pos, int value);
+       __isl_give isl_map *isl_map_fix(__isl_take isl_map *map,
+               enum isl_dim_type type, unsigned pos,
+               isl_int value);
        __isl_give isl_map *isl_map_fix_si(__isl_take isl_map *map,
                enum isl_dim_type type, unsigned pos, int value);
 
@@ -1994,6 +2052,9 @@ dimension has the fixed given value.
        __isl_give isl_basic_map *isl_basic_map_lower_bound_si(
                __isl_take isl_basic_map *bmap,
                enum isl_dim_type type, unsigned pos, int value);
+       __isl_give isl_basic_map *isl_basic_map_upper_bound_si(
+               __isl_take isl_basic_map *bmap,
+               enum isl_dim_type type, unsigned pos, int value);
        __isl_give isl_set *isl_set_lower_bound(
                __isl_take isl_set *set,
                enum isl_dim_type type, unsigned pos,
@@ -2039,6 +2100,10 @@ dimensions are equal to each other.
 Intersect the relation with the hyperplane where the given
 dimensions have opposite values.
 
+       __isl_give isl_basic_map *isl_basic_map_order_ge(
+               __isl_take isl_basic_map *bmap,
+               enum isl_dim_type type1, int pos1,
+               enum isl_dim_type type2, int pos2);
        __isl_give isl_map *isl_map_order_lt(__isl_take isl_map *map,
                enum isl_dim_type type1, int pos1,
                enum isl_dim_type type2, int pos2);
@@ -2887,9 +2952,15 @@ Lists can be created, copied, modified and freed using the following functions.
                isl_ctx *ctx, int n);
        __isl_give isl_set_list *isl_set_list_copy(
                __isl_keep isl_set_list *list);
+       __isl_give isl_set_list *isl_set_list_insert(
+               __isl_take isl_set_list *list, unsigned pos,
+               __isl_take isl_set *el);
        __isl_give isl_set_list *isl_set_list_add(
                __isl_take isl_set_list *list,
                __isl_take isl_set *el);
+       __isl_give isl_set_list *isl_set_list_drop(
+               __isl_take isl_set_list *list,
+               unsigned first, unsigned n);
        __isl_give isl_set_list *isl_set_list_set_set(
                __isl_take isl_set_list *list, int index,
                __isl_take isl_set *set);
@@ -2928,7 +2999,7 @@ Vectors can be created, copied and freed using the following functions.
        __isl_give isl_vec *isl_vec_alloc(isl_ctx *ctx,
                unsigned size);
        __isl_give isl_vec *isl_vec_copy(__isl_keep isl_vec *vec);
-       void isl_vec_free(__isl_take isl_vec *vec);
+       void *isl_vec_free(__isl_take isl_vec *vec);
 
 Note that the elements of a newly created vector may have arbitrary values.
 The elements can be changed and inspected using the following functions.
@@ -2945,10 +3016,17 @@ The elements can be changed and inspected using the following functions.
                isl_int v);
        __isl_give isl_vec *isl_vec_set_si(__isl_take isl_vec *vec,
                int v);
+       __isl_give isl_vec *isl_vec_fdiv_r(__isl_take isl_vec *vec,
+               isl_int m);
 
 C<isl_vec_get_element> will return a negative value if anything went wrong.
 In that case, the value of C<*v> is undefined.
 
+The following function can be used to concatenate two vectors.
+
+       __isl_give isl_vec *isl_vec_concat(__isl_take isl_vec *vec1,
+               __isl_take isl_vec *vec2);
+
 =head2 Matrices
 
 Matrices can be created, copied and freed using the following functions.
@@ -3276,6 +3354,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_zero_basic_set(
+               __isl_take isl_aff *aff);
        __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(
@@ -3420,6 +3500,8 @@ can be created using the following functions.
                __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_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);
@@ -3524,6 +3606,9 @@ It can be modified using
        __isl_give isl_multi_aff *isl_multi_aff_set_aff(
                __isl_take isl_multi_aff *multi, int pos,
                __isl_take isl_aff *aff);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_pw_aff(
+               __isl_take isl_pw_multi_aff *pma, unsigned pos,
+               __isl_take isl_pw_aff *pa);
        __isl_give isl_multi_aff *isl_multi_aff_set_dim_name(
                __isl_take isl_multi_aff *maff,
                enum isl_dim_type type, unsigned pos, const char *s);
@@ -3588,6 +3673,9 @@ Operations include
        __isl_give isl_multi_aff *isl_multi_aff_align_params(
                __isl_take isl_multi_aff *multi,
                __isl_take isl_space *model);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_align_params(
+               __isl_take isl_pw_multi_aff *pma,
+               __isl_take isl_space *model);
        __isl_give isl_pw_multi_aff *
        isl_pw_multi_aff_project_domain_on_params(
                __isl_take isl_pw_multi_aff *pma);