export isl_qpolynomial_fold_gist
[platform/upstream/isl.git] / doc / user.pod
index ad04919..2abe0c7 100644 (file)
@@ -98,6 +98,8 @@ but they will be removed in the future.
 
 =item * The function C<isl_pw_aff_max> has been renamed to
 C<isl_pw_aff_union_max>.
+Similarly, the function C<isl_pw_aff_add> has been renamed to
+C<isl_pw_aff_union_add>.
 
 =item * The C<isl_dim> type has been renamed to C<isl_space>
 along with the associated functions.
@@ -598,6 +600,12 @@ 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_space(
+               __isl_keep isl_multi_aff *maff);
+       __isl_give isl_space *isl_pw_multi_aff_get_domain_space(
+               __isl_keep isl_pw_multi_aff *pma);
+       __isl_give isl_space *isl_pw_multi_aff_get_space(
+               __isl_keep isl_pw_multi_aff *pma);
 
        #include <isl/point.h>
        __isl_give isl_space *isl_point_get_space(
@@ -777,6 +785,9 @@ using the following functions.
                __isl_take isl_local_space *ls);
        __isl_give isl_local_space *isl_local_space_from_domain(
                __isl_take isl_local_space *ls);
+       __isl_give isl_local_space *isl_local_space_intersect(
+               __isl_take isl_local_space *ls1,
+               __isl_take isl_local_space *ls2);
        __isl_give isl_local_space *isl_local_space_add_dims(
                __isl_take isl_local_space *ls,
                enum isl_dim_type type, unsigned n);
@@ -1199,8 +1210,10 @@ of C<isl_dim_cst>, C<isl_dim_param>,
 C<isl_dim_in>, C<isl_dim_out> and C<isl_dim_div> for relations.
 
 A (basic) set or relation can also be constructed from a (piecewise)
-affine expression
-or a list of affine expressions (See L<"Piecewise Quasi Affine Expressions">).
+(multiple) affine expression
+or a list of affine expressions
+(See L<"Piecewise Quasi Affine Expressions"> and
+L<"Piecewise Multiple Quasi Affine Expressions">).
 
        __isl_give isl_basic_map *isl_basic_map_from_aff(
                __isl_take isl_aff *aff);
@@ -1211,6 +1224,12 @@ or a list of affine expressions (See L<"Piecewise Quasi Affine Expressions">).
        __isl_give isl_basic_map *isl_basic_map_from_aff_list(
                __isl_take isl_space *domain_space,
                __isl_take isl_aff_list *list);
+       __isl_give isl_basic_map *isl_basic_map_from_multi_aff(
+               __isl_take isl_multi_aff *maff)
+       __isl_give isl_set *isl_set_from_pw_multi_aff(
+               __isl_take isl_pw_multi_aff *pma);
+       __isl_give isl_map *isl_map_from_pw_multi_aff(
+               __isl_take isl_pw_multi_aff *pma);
 
 The C<domain_dim> argument describes the domain of the resulting
 basic relation.  It is required because the C<list> may consist
@@ -1577,6 +1596,8 @@ has a fixed value and if so, return that value in C<*val>.
 To check whether a set is a parameter domain, use this function:
 
        int isl_set_is_params(__isl_keep isl_set *set);
+       int isl_union_set_is_params(
+               __isl_keep isl_union_set *uset);
 
 =item * Wrapping
 
@@ -1704,6 +1725,10 @@ i.e., whether both domain and range are nested relations.
                __isl_take isl_map *bmap);
        __isl_give isl_set *isl_map_range(
                __isl_take isl_map *map);
+       __isl_give isl_set *isl_union_set_params(
+               __isl_take isl_union_set *uset);
+       __isl_give isl_set *isl_union_map_params(
+               __isl_take isl_union_map *umap);
        __isl_give isl_union_set *isl_union_map_domain(
                __isl_take isl_union_map *umap);
        __isl_give isl_union_set *isl_union_map_range(
@@ -1728,6 +1753,10 @@ that maps (a wrapped version of) the input relation to its domain or range.
        __isl_give isl_set *isl_set_eliminate(
                __isl_take isl_set *set, enum isl_dim_type type,
                unsigned first, unsigned n);
+       __isl_give isl_basic_map *isl_basic_map_eliminate(
+               __isl_take isl_basic_map *bmap,
+               enum isl_dim_type type,
+               unsigned first, unsigned n);
 
 Eliminate the coefficients for the given dimensions from the constraints,
 without removing the dimensions.
@@ -1931,9 +1960,12 @@ C<isl_lp_ok>, C<isl_lp_unbounded> or C<isl_lp_empty>.
                __isl_take isl_set *set, int pos);
        __isl_give isl_pw_aff *isl_set_dim_max(
                __isl_take isl_set *set, int pos);
+       __isl_give isl_pw_aff *isl_map_dim_max(
+               __isl_take isl_map *map, int pos);
 
-Compute the minimum or maximum of the given set dimension as a function of the
-parameters, but independently of the other set dimensions.
+Compute the minimum or maximum of the given set or output dimension
+as a function of the parameters (and input dimensions), but independently
+of the other set or output dimensions.
 For lexicographic optimization, see L<"Lexicographic Optimization">.
 
 =item * Dual
@@ -2064,6 +2096,15 @@ existentially quantified variables.
        __isl_give isl_union_set *isl_union_set_lift(
                __isl_take isl_union_set *uset);
 
+Given a local space that contains the existentially quantified
+variables of a set, a basic relation that, when applied to
+a basic set, has essentially the same effect as C<isl_basic_set_lift>,
+can be constructed using the following function.
+
+       #include <isl/local_space.h>
+       __isl_give isl_basic_map *isl_local_space_lifting(
+               __isl_take isl_local_space *ls);
+
 =item * Internal Product
 
        __isl_give isl_basic_map *isl_basic_map_zip(
@@ -2146,6 +2187,9 @@ the same (number of) parameters.
 
 =item * Intersection
 
+       __isl_give isl_basic_set *isl_basic_set_intersect_params(
+               __isl_take isl_basic_set *bset1,
+               __isl_take isl_basic_set *bset2);
        __isl_give isl_basic_set *isl_basic_set_intersect(
                __isl_take isl_basic_set *bset1,
                __isl_take isl_basic_set *bset2);
@@ -2155,6 +2199,12 @@ the same (number of) parameters.
        __isl_give isl_set *isl_set_intersect(
                __isl_take isl_set *set1,
                __isl_take isl_set *set2);
+       __isl_give isl_union_set *isl_union_set_intersect_params(
+               __isl_take isl_union_set *uset,
+               __isl_take isl_set *set);
+       __isl_give isl_union_map *isl_union_map_intersect_params(
+               __isl_take isl_union_map *umap,
+               __isl_take isl_set *set);
        __isl_give isl_union_set *isl_union_set_intersect(
                __isl_take isl_union_set *uset1,
                __isl_take isl_union_set *uset2);
@@ -2329,6 +2379,9 @@ instead.
        __isl_give isl_union_set *isl_union_set_gist(
                __isl_take isl_union_set *uset,
                __isl_take isl_union_set *context);
+       __isl_give isl_union_set *isl_union_set_gist_params(
+               __isl_take isl_union_set *uset,
+               __isl_take isl_set *set);
        __isl_give isl_basic_map *isl_basic_map_gist(
                __isl_take isl_basic_map *bmap,
                __isl_take isl_basic_map *context);
@@ -2337,9 +2390,18 @@ instead.
        __isl_give isl_map *isl_map_gist_params(
                __isl_take isl_map *map,
                __isl_take isl_set *context);
+       __isl_give isl_map *isl_map_gist_domain(
+               __isl_take isl_map *map,
+               __isl_take isl_set *context);
        __isl_give isl_union_map *isl_union_map_gist(
                __isl_take isl_union_map *umap,
                __isl_take isl_union_map *context);
+       __isl_give isl_union_map *isl_union_map_gist_params(
+               __isl_take isl_union_map *umap,
+               __isl_take isl_set *set);
+       __isl_give isl_union_map *isl_union_map_gist_domain(
+               __isl_take isl_union_map *umap,
+               __isl_take isl_union_set *uset);
 
 The gist operation returns a set or relation that has the
 same intersection with the context as the input set or relation.
@@ -2444,6 +2506,36 @@ In case of union relations, the optimum is computed per space.
        __isl_give isl_union_map *isl_union_map_lexmax(
                __isl_take isl_union_map *umap);
 
+The following functions return their result in the form of
+a piecewise multi-affine expression
+(See L<"Piecewise Multiple Quasi Affine Expressions">),
+but are otherwise equivalent to the corresponding functions
+returning a basic set or relation.
+
+       __isl_give isl_pw_multi_aff *
+       isl_basic_map_lexmin_pw_multi_aff(
+               __isl_take isl_basic_map *bmap);
+       __isl_give isl_pw_multi_aff *
+       isl_basic_set_partial_lexmin_pw_multi_aff(
+               __isl_take isl_basic_set *bset,
+               __isl_take isl_basic_set *dom,
+               __isl_give isl_set **empty);
+       __isl_give isl_pw_multi_aff *
+       isl_basic_set_partial_lexmax_pw_multi_aff(
+               __isl_take isl_basic_set *bset,
+               __isl_take isl_basic_set *dom,
+               __isl_give isl_set **empty);
+       __isl_give isl_pw_multi_aff *
+       isl_basic_map_partial_lexmin_pw_multi_aff(
+               __isl_take isl_basic_map *bmap,
+               __isl_take isl_basic_set *dom,
+               __isl_give isl_set **empty);
+       __isl_give isl_pw_multi_aff *
+       isl_basic_map_partial_lexmax_pw_multi_aff(
+               __isl_take isl_basic_map *bmap,
+               __isl_take isl_basic_set *dom,
+               __isl_give isl_set **empty);
+
 =head2 Lists
 
 Lists are defined over several element types, including
@@ -2596,6 +2688,12 @@ The expression can be inspected using
                __isl_keep isl_aff *aff);
        const char *isl_aff_get_dim_name(__isl_keep isl_aff *aff,
                enum isl_dim_type type, unsigned pos);
+       const char *isl_pw_aff_get_dim_name(
+               __isl_keep isl_pw_aff *pa,
+               enum isl_dim_type type, unsigned pos);
+       __isl_give isl_id *isl_pw_aff_get_dim_id(
+               __isl_keep isl_pw_aff *pa,
+               enum isl_dim_type type, unsigned pos);
        int isl_aff_get_constant(__isl_keep isl_aff *aff,
                isl_int *v);
        int isl_aff_get_coefficient(__isl_keep isl_aff *aff,
@@ -2635,6 +2733,10 @@ It can be modified using
        __isl_give isl_aff *isl_aff_set_dim_id(
                __isl_take isl_aff *aff, enum isl_dim_type type,
                unsigned pos, __isl_take isl_id *id);
+       __isl_give isl_pw_aff *isl_pw_aff_set_dim_id(
+               __isl_take isl_pw_aff *pma,
+               enum isl_dim_type type, unsigned pos,
+               __isl_take isl_id *id);
        __isl_give isl_aff *isl_aff_set_constant(
                __isl_take isl_aff *aff, isl_int v);
        __isl_give isl_aff *isl_aff_set_constant_si(
@@ -2749,6 +2851,9 @@ Operations include
                __isl_take isl_pw_aff *pwaff,
                __isl_take isl_space *model);
 
+       __isl_give isl_aff *isl_aff_gist_params(
+               __isl_take isl_aff *aff,
+               __isl_take isl_set *context);
        __isl_give isl_aff *isl_aff_gist(__isl_take isl_aff *aff,
                __isl_take isl_set *context);
        __isl_give isl_pw_aff *isl_pw_aff_gist(
@@ -2760,6 +2865,9 @@ Operations include
        __isl_give isl_pw_aff *isl_pw_aff_intersect_domain(
                __isl_take isl_pw_aff *pa,
                __isl_take isl_set *set);
+       __isl_give isl_pw_aff *isl_pw_aff_intersect_params(
+               __isl_take isl_pw_aff *pa,
+               __isl_take isl_set *set);
 
        __isl_give isl_aff *isl_aff_mul(__isl_take isl_aff *aff1,
                __isl_take isl_aff *aff2);
@@ -2852,6 +2960,9 @@ not in C<cond>.
        __isl_give isl_pw_aff *isl_pw_aff_union_max(
                __isl_take isl_pw_aff *pwaff1,
                __isl_take isl_pw_aff *pwaff2);
+       __isl_give isl_pw_aff *isl_pw_aff_union_add(
+               __isl_take isl_pw_aff *pwaff1,
+               __isl_take isl_pw_aff *pwaff2);
 
 The function C<isl_pw_aff_union_max> computes a piecewise quasi-affine
 expression with a domain that is the union of those of C<pwaff1> and
@@ -2860,6 +2971,14 @@ the maximum of those of C<pwaff1> and C<pwaff2>.  If only one of
 C<pwaff1> or C<pwaff2> is defined on a given cell, then the
 associated expression is the defined one.
 
+An expression can be read from input using
+
+       #include <isl/aff.h>
+       __isl_give isl_aff *isl_aff_read_from_str(
+               isl_ctx *ctx, const char *str);
+       __isl_give isl_pw_aff *isl_pw_aff_read_from_str(
+               isl_ctx *ctx, const char *str);
+
 An expression can be printed using
 
        #include <isl/aff.h>
@@ -2870,6 +2989,159 @@ An expression can be printed using
                __isl_take isl_printer *p,
                __isl_keep isl_pw_aff *pwaff);
 
+=head2 Piecewise Multiple Quasi Affine Expressions
+
+An C<isl_multi_aff> object represents a sequence of
+zero or more affine expressions, all defined on the same domain space.
+
+An C<isl_multi_aff> can be constructed from a C<isl_aff_list> using the
+following function.
+
+       #include <isl/aff.h>
+       __isl_give isl_multi_aff *isl_multi_aff_from_aff_list(
+               __isl_take isl_space *space,
+               __isl_take isl_aff_list *list);
+
+An empty piecewise multiple quasi affine expression (one with no cells) or
+a piecewise multiple quasi affine expression with a single cell can
+be created using the following functions.
+
+       #include <isl/aff.h>
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_empty(
+               __isl_take isl_space *space);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_alloc(
+               __isl_take isl_set *set,
+               __isl_take isl_multi_aff *maff);
+
+A piecewise multiple quasi affine expression can also be initialized
+from an C<isl_set> or C<isl_map>, provided the C<isl_set> is a singleton
+and the C<isl_map> is single-valued.
+
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_set(
+               __isl_take isl_set *set);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_from_map(
+               __isl_take isl_map *map);
+
+Multiple quasi affine expressions can be copied and freed using
+
+       #include <isl/aff.h>
+       __isl_give isl_multi_aff *isl_multi_aff_copy(
+               __isl_keep isl_multi_aff *maff);
+       void *isl_multi_aff_free(__isl_take isl_multi_aff *maff);
+
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_copy(
+               __isl_keep isl_pw_multi_aff *pma);
+       void *isl_pw_multi_aff_free(
+               __isl_take isl_pw_multi_aff *pma);
+
+The expression can be inspected using
+
+       #include <isl/aff.h>
+       isl_ctx *isl_multi_aff_get_ctx(
+               __isl_keep isl_multi_aff *maff);
+       isl_ctx *isl_pw_multi_aff_get_ctx(
+               __isl_keep isl_pw_multi_aff *pma);
+       unsigned isl_multi_aff_dim(__isl_keep isl_multi_aff *maff,
+               enum isl_dim_type type);
+       unsigned isl_pw_multi_aff_dim(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type);
+       __isl_give isl_aff *isl_multi_aff_get_aff(
+               __isl_keep isl_multi_aff *multi, int pos);
+       const char *isl_pw_multi_aff_get_dim_name(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type, unsigned pos);
+       __isl_give isl_id *isl_pw_multi_aff_get_dim_id(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type, unsigned pos);
+       const char *isl_multi_aff_get_tuple_name(
+               __isl_keep isl_multi_aff *multi,
+               enum isl_dim_type type);
+       const char *isl_pw_multi_aff_get_tuple_name(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type);
+       int isl_pw_multi_aff_has_tuple_id(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type);
+       __isl_give isl_id *isl_pw_multi_aff_get_tuple_id(
+               __isl_keep isl_pw_multi_aff *pma,
+               enum isl_dim_type type);
+
+       int isl_pw_multi_aff_foreach_piece(
+               __isl_keep isl_pw_multi_aff *pma,
+               int (*fn)(__isl_take isl_set *set,
+                           __isl_take isl_multi_aff *maff,
+                           void *user), void *user);
+
+It can be modified using
+
+       #include <isl/aff.h>
+       __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);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_set_tuple_id(
+               __isl_take isl_pw_multi_aff *pma,
+               enum isl_dim_type type, __isl_take isl_id *id);
+
+To check whether two multiple affine expressions are
+obviously equal to each other, use
+
+       int isl_multi_aff_plain_is_equal(__isl_keep isl_multi_aff *maff1,
+               __isl_keep isl_multi_aff *maff2);
+       int isl_pw_multi_aff_plain_is_equal(
+               __isl_keep isl_pw_multi_aff *pma1,
+               __isl_keep isl_pw_multi_aff *pma2);
+
+Operations include
+
+       #include <isl/aff.h>
+       __isl_give isl_multi_aff *isl_multi_aff_add(
+               __isl_take isl_multi_aff *maff1,
+               __isl_take isl_multi_aff *maff2);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_add(
+               __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_add(
+               __isl_take isl_pw_multi_aff *pma1,
+               __isl_take isl_pw_multi_aff *pma2);
+       __isl_give isl_multi_aff *isl_multi_aff_scale(
+               __isl_take isl_multi_aff *maff,
+               isl_int f);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_params(
+               __isl_take isl_pw_multi_aff *pma,
+               __isl_take isl_set *set);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_intersect_domain(
+               __isl_take isl_pw_multi_aff *pma,
+               __isl_take isl_set *set);
+       __isl_give isl_multi_aff *isl_multi_aff_lift(
+               __isl_take isl_multi_aff *maff,
+               __isl_give isl_local_space **ls);
+       __isl_give isl_multi_aff *isl_multi_aff_gist(
+               __isl_take isl_multi_aff *maff,
+               __isl_take isl_set *context);
+
+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.
+
+An expression can be read from input using
+
+       #include <isl/aff.h>
+       __isl_give isl_multi_aff *isl_multi_aff_read_from_str(
+               isl_ctx *ctx, const char *str);
+       __isl_give isl_pw_multi_aff *isl_pw_multi_aff_read_from_str(
+               isl_ctx *ctx, const char *str);
+
+An expression can be printed using
+
+       #include <isl/aff.h>
+       __isl_give isl_printer *isl_printer_print_multi_aff(
+               __isl_take isl_printer *p,
+               __isl_keep isl_multi_aff *maff);
+       __isl_give isl_printer *isl_printer_print_pw_multi_aff(
+               __isl_take isl_printer *p,
+               __isl_keep isl_pw_multi_aff *pma);
+
 =head2 Points
 
 Points are elements of a set.  They can be used to construct
@@ -2882,7 +3154,7 @@ The zero point (the origin) can be created using
 The coordinates of a point can be inspected, set and changed
 using
 
-       void isl_point_get_coordinate(__isl_keep isl_point *pnt,
+       int isl_point_get_coordinate(__isl_keep isl_point *pnt,
                enum isl_dim_type type, int pos, isl_int *v);
        __isl_give isl_point *isl_point_set_coordinate(
                __isl_take isl_point *pnt,
@@ -2980,7 +3252,13 @@ the number of points in the map
 
        [n] -> { [x] -> [y] : x,y >= 0 and 0 <= x + y <= n }
 
-=head3 Printing (Piecewise) Quasipolynomials
+=head3 Input and Output
+
+Piecewise quasipolynomials can be read from input using
+
+       __isl_give isl_union_pw_qpolynomial *
+       isl_union_pw_qpolynomial_read_from_str(
+               isl_ctx *ctx, const char *str);
 
 Quasipolynomials and piecewise quasipolynomials can be printed
 using the following functions.
@@ -3235,12 +3513,19 @@ obviously equal, use
        __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_domain(
                __isl_take isl_pw_qpolynomial *pwpq,
                __isl_take isl_set *set);
+       __isl_give isl_pw_qpolynomial *isl_pw_qpolynomial_intersect_params(
+               __isl_take isl_pw_qpolynomial *pwpq,
+               __isl_take isl_set *set);
 
        __isl_give isl_union_set *isl_union_pw_qpolynomial_domain(
                __isl_take isl_union_pw_qpolynomial *upwqp);
        __isl_give isl_union_pw_qpolynomial *isl_union_pw_qpolynomial_intersect_domain(
                __isl_take isl_union_pw_qpolynomial *upwpq,
                __isl_take isl_union_set *uset);
+       __isl_give isl_union_pw_qpolynomial *
+       isl_union_pw_qpolynomial_intersect_params(
+               __isl_take isl_union_pw_qpolynomial *upwpq,
+               __isl_take isl_set *set);
 
        __isl_give isl_qpolynomial *isl_qpolynomial_align_params(
                __isl_take isl_qpolynomial *qp,
@@ -3421,11 +3706,20 @@ obviously equal, use
                __isl_take isl_union_pw_qpolynomial_fold *upwf,
                __isl_take isl_point *pnt);
 
+       __isl_give isl_pw_qpolynomial_fold *
+       sl_pw_qpolynomial_fold_intersect_params(
+               __isl_take isl_pw_qpolynomial_fold *pwf,
+               __isl_take isl_set *set);
+
        __isl_give isl_union_set *isl_union_pw_qpolynomial_fold_domain(
                __isl_take isl_union_pw_qpolynomial_fold *upwf);
        __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_intersect_domain(
                __isl_take isl_union_pw_qpolynomial_fold *upwf,
                __isl_take isl_union_set *uset);
+       __isl_give isl_union_pw_qpolynomial_fold *
+       isl_union_pw_qpolynomial_fold_intersect_params(
+               __isl_take isl_union_pw_qpolynomial_fold *upwf,
+               __isl_take isl_set *set);
 
        __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_project_domain_on_params(
                __isl_take isl_pw_qpolynomial_fold *pwf);
@@ -3436,6 +3730,10 @@ obviously equal, use
        __isl_give isl_union_pw_qpolynomial_fold *isl_union_pw_qpolynomial_fold_coalesce(
                __isl_take isl_union_pw_qpolynomial_fold *upwf);
 
+       __isl_give isl_qpolynomial_fold *isl_qpolynomial_fold_gist(
+               __isl_take isl_qpolynomial_fold *fold,
+               __isl_take isl_set *context);
+
        __isl_give isl_pw_qpolynomial_fold *isl_pw_qpolynomial_fold_gist(
                __isl_take isl_pw_qpolynomial_fold *pwf,
                __isl_take isl_set *context);
@@ -3490,11 +3788,13 @@ for each iteration of the sink access, which iteration
 of which of the source access relations was the last
 to access the same data element before the given iteration
 of the sink access.
+The resulting dependence relations map source iterations
+to the corresponding sink iterations.
 To compute standard flow dependences, the sink should be
 a read, while the sources should be writes.
 If any of the source accesses are marked as being I<may>
-accesses, then there will be a dependence to the last
-I<must> access B<and> to any I<may> access that follows
+accesses, then there will be a dependence from the last
+I<must> access B<and> from any I<may> access that follows
 this last I<must> access.
 In particular, if I<all> sources are I<may> accesses,
 then memory based dependence analysis is performed.