add isl_pw_aff_list_{min,max}
authorSven Verdoolaege <skimo@kotnet.org>
Mon, 25 Jul 2011 07:05:32 +0000 (09:05 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Thu, 28 Jul 2011 14:46:25 +0000 (16:46 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/aff.h
isl_aff.c

index 1df5af9..a90d8ca 100644 (file)
@@ -2531,6 +2531,11 @@ Operations include
        __isl_give isl_pw_aff *isl_pw_aff_scale_down(
                __isl_take isl_pw_aff *pwaff, isl_int f);
 
+       __isl_give isl_pw_aff *isl_pw_aff_list_min(
+               __isl_take isl_pw_aff_list *list);
+       __isl_give isl_pw_aff *isl_pw_aff_list_max(
+               __isl_take isl_pw_aff_list *list);
+
        __isl_give isl_pw_aff *isl_pw_aff_coalesce(
                __isl_take isl_pw_aff *pwqp);
 
index d981341..2490c93 100644 (file)
@@ -174,6 +174,9 @@ __isl_give isl_printer *isl_printer_print_pw_aff(__isl_take isl_printer *p,
        __isl_keep isl_pw_aff *pwaff);
 void isl_pw_aff_dump(__isl_keep isl_pw_aff *pwaff);
 
+__isl_give isl_pw_aff *isl_pw_aff_list_min(__isl_take isl_pw_aff_list *list);
+__isl_give isl_pw_aff *isl_pw_aff_list_max(__isl_take isl_pw_aff_list *list);
+
 __isl_give isl_set *isl_pw_aff_list_eq_set(__isl_take isl_pw_aff_list *list1,
        __isl_take isl_pw_aff_list *list2);
 __isl_give isl_set *isl_pw_aff_list_ne_set(__isl_take isl_pw_aff_list *list1,
index dc87ad9..de0bd22 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -1673,3 +1673,47 @@ __isl_give isl_pw_aff *isl_pw_aff_max(__isl_take isl_pw_aff *pwaff1,
 {
        return align_params_pw_pw_and(pwaff1, pwaff2, &pw_aff_max);
 }
+
+static __isl_give isl_pw_aff *pw_aff_list_reduce(
+       __isl_take isl_pw_aff_list *list,
+       __isl_give isl_pw_aff *(*fn)(__isl_take isl_pw_aff *pwaff1,
+                                       __isl_take isl_pw_aff *pwaff2))
+{
+       int i;
+       isl_ctx *ctx;
+       isl_pw_aff *res;
+
+       if (!list)
+               return NULL;
+
+       ctx = isl_pw_aff_list_get_ctx(list);
+       if (list->n < 1)
+               isl_die(ctx, isl_error_invalid,
+                       "list should contain at least one element",
+                       return isl_pw_aff_list_free(list));
+
+       res = isl_pw_aff_copy(list->p[0]);
+       for (i = 1; i < list->n; ++i)
+               res = fn(res, isl_pw_aff_copy(list->p[i]));
+
+       isl_pw_aff_list_free(list);
+       return res;
+}
+
+/* Return an isl_pw_aff that maps each element in the intersection of the
+ * domains of the elements of list to the minimal corresponding affine
+ * expression.
+ */
+__isl_give isl_pw_aff *isl_pw_aff_list_min(__isl_take isl_pw_aff_list *list)
+{
+       return pw_aff_list_reduce(list, &isl_pw_aff_min);
+}
+
+/* Return an isl_pw_aff that maps each element in the intersection of the
+ * domains of the elements of list to the maximal corresponding affine
+ * expression.
+ */
+__isl_give isl_pw_aff *isl_pw_aff_list_max(__isl_take isl_pw_aff_list *list)
+{
+       return pw_aff_list_reduce(list, &isl_pw_aff_max);
+}