add isl_aff_neg_basic_set
[platform/upstream/isl.git] / isl_aff.c
index b316a31..85e4953 100644 (file)
--- a/isl_aff.c
+++ b/isl_aff.c
@@ -433,6 +433,43 @@ __isl_give isl_aff *isl_aff_add_constant_si(__isl_take isl_aff *aff, int v)
        return aff;
 }
 
+/* Add "v" to the numerator of the constant term of "aff".
+ */
+__isl_give isl_aff *isl_aff_add_constant_num(__isl_take isl_aff *aff, isl_int v)
+{
+       if (isl_int_is_zero(v))
+               return aff;
+
+       aff = isl_aff_cow(aff);
+       if (!aff)
+               return NULL;
+
+       aff->v = isl_vec_cow(aff->v);
+       if (!aff->v)
+               return isl_aff_free(aff);
+
+       isl_int_add(aff->v->el[1], aff->v->el[1], v);
+
+       return aff;
+}
+
+/* Add "v" to the numerator of the constant term of "aff".
+ */
+__isl_give isl_aff *isl_aff_add_constant_num_si(__isl_take isl_aff *aff, int v)
+{
+       isl_int t;
+
+       if (v == 0)
+               return aff;
+
+       isl_int_init(t);
+       isl_int_set_si(t, v);
+       aff = isl_aff_add_constant_num(aff, t);
+       isl_int_clear(t);
+
+       return aff;
+}
+
 __isl_give isl_aff *isl_aff_set_constant_si(__isl_take isl_aff *aff, int v)
 {
        aff = isl_aff_cow(aff);
@@ -1099,6 +1136,16 @@ __isl_give isl_basic_set *isl_aff_nonneg_basic_set(__isl_take isl_aff *aff)
        return bset;
 }
 
+/* Return a basic set containing those elements in the domain space
+ * of aff where it is negative.
+ */
+__isl_give isl_basic_set *isl_aff_neg_basic_set(__isl_take isl_aff *aff)
+{
+       aff = isl_aff_neg(aff);
+       aff = isl_aff_add_constant_num_si(aff, -1);
+       return isl_aff_nonneg_basic_set(aff);
+}
+
 /* Return a basic set containing those elements in the space
  * of aff where it is zero.
  */
@@ -2262,6 +2309,9 @@ __isl_give isl_multi_aff *isl_multi_aff_set_dim_name(
        maff->space = isl_space_set_dim_name(maff->space, type, pos, s);
        if (!maff->space)
                return isl_multi_aff_free(maff);
+
+       if (type == isl_dim_out)
+               return maff;
        for (i = 0; i < maff->n; ++i) {
                maff->p[i] = isl_aff_set_dim_name(maff->p[i], type, pos, s);
                if (!maff->p[i])