add isl_aff_from_div
authorSven Verdoolaege <skimo@kotnet.org>
Fri, 1 Jul 2011 12:47:29 +0000 (14:47 +0200)
committerSven Verdoolaege <skimo@kotnet.org>
Sat, 2 Jul 2011 10:29:11 +0000 (12:29 +0200)
Signed-off-by: Sven Verdoolaege <skimo@kotnet.org>
doc/user.pod
include/isl/div.h
isl_div.c

index 5fed4a9..ae76778 100644 (file)
@@ -2189,6 +2189,11 @@ The zero quasi affine expression can be created using
        __isl_give isl_aff *isl_aff_zero(
                __isl_take isl_local_space *ls);
 
+A quasi affine expression can also be initialized from an C<isl_div>:
+
+       #include <isl/div.h>
+       __isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div);
+
 An empty piecewise quasi affine expression (one with no cells)
 or a piecewise quasi affine expression with a single cell can
 be created using the following functions.
index 86ac0ca..398c7be 100644 (file)
@@ -11,6 +11,7 @@
 #define ISL_DIV_H
 
 #include <isl/dim.h>
+#include <isl/aff_type.h>
 
 #if defined(__cplusplus)
 extern "C" {
@@ -37,6 +38,8 @@ void isl_div_set_coefficient(struct isl_div *div,
 unsigned isl_div_dim(__isl_keep isl_div *div, enum isl_dim_type type);
 __isl_give isl_div *isl_div_div(__isl_take isl_div *div, int pos);
 
+__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div);
+
 #if defined(__cplusplus)
 }
 #endif
index d7ca68f..a04646f 100644 (file)
--- a/isl_div.c
+++ b/isl_div.c
@@ -12,6 +12,7 @@
 #include <isl/map.h>
 #include <isl_dim_private.h>
 #include <isl/seq.h>
+#include <isl/aff.h>
 
 isl_ctx *isl_div_get_ctx(__isl_keep isl_div *div)
 {
@@ -172,3 +173,19 @@ void isl_div_set_coefficient(struct isl_div *div,
        isl_assert(div->ctx, pos < n(div, type), return);
        isl_int_set(div->line[0][offset(div, type) + pos], v);
 }
+
+__isl_give isl_aff *isl_aff_from_div(__isl_take isl_div *div)
+{
+       isl_aff *aff;
+       int pos;
+
+       if (!div)
+               return NULL;
+
+       pos = div->line - div->bmap->div;
+       aff = isl_aff_zero(isl_basic_map_get_local_space(div->bmap));
+       aff = isl_aff_set_coefficient_si(aff, isl_dim_div, pos, 1);
+
+       isl_div_free(div);
+       return aff;
+}