+
+ map = isl_map_read_from_str(ctx,
+ "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
+ "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
+ "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
+ "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and "
+ "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and "
+ "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and "
+ "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and "
+ "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);"
+ "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
+ "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
+ "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
+ "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and "
+ "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and "
+ "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and "
+ "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and "
+ "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and "
+ "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and "
+ "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }", -1);
+ map = isl_map_coalesce(map);
+ map2 = isl_map_read_from_str(ctx,
+ "[n] -> { [i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
+ "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
+ "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
+ "4e4 = -2 + o0 and i0 >= 8 + 2n and o0 >= 2 + i0 and "
+ "o0 <= 56 + 2n and o0 <= -12 + 4n and i0 <= 57 + 2n and "
+ "i0 <= -11 + 4n and o0 >= 6 + 2n and 4e0 <= i0 and "
+ "4e0 >= -3 + i0 and 4e1 <= o0 and 4e1 >= -3 + o0 and "
+ "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0);"
+ "[i0] -> [o0] : exists (e0 = [(i0)/4], e1 = [(o0)/4], "
+ "e2 = [(n)/2], e3 = [(-2 + i0)/4], e4 = [(-2 + o0)/4], "
+ "e5 = [(-2n + i0)/4]: 2e2 = n and 4e3 = -2 + i0 and "
+ "4e4 = -2 + o0 and 2e0 >= 3 + n and e0 <= -4 + n and "
+ "2e0 <= 27 + n and e1 <= -4 + n and 2e1 <= 27 + n and "
+ "2e1 >= 2 + n and e1 >= 1 + e0 and i0 >= 7 + 2n and "
+ "i0 <= -11 + 4n and i0 <= 57 + 2n and 4e0 <= -2 + i0 and "
+ "4e0 >= -3 + i0 and o0 >= 6 + 2n and o0 <= -11 + 4n and "
+ "o0 <= 57 + 2n and 4e1 <= -2 + o0 and 4e1 >= -3 + o0 and "
+ "4e5 <= -2n + i0 and 4e5 >= -3 - 2n + i0 ) }", -1);
+ assert(isl_map_is_equal(map, map2));
+ isl_map_free(map);
+ isl_map_free(map2);
+
+ str = "[n, m] -> { [] -> [o0, o2, o3] : (o3 = 1 and o0 >= 1 + m and "
+ "o0 <= n + m and o2 <= m and o0 >= 2 + n and o2 >= 3) or "
+ "(o0 >= 2 + n and o0 >= 1 + m and o0 <= n + m and n >= 1 and "
+ "o3 <= -1 + o2 and o3 >= 1 - m + o2 and o3 >= 2 and o3 <= n) }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ map = isl_map_coalesce(map);
+ map2 = isl_map_read_from_str(ctx, str, -1);
+ assert(isl_map_is_equal(map, map2));
+ isl_map_free(map);
+ isl_map_free(map2);
+
+ str = "[M, N] -> { [i0, i1, i2, i3, i4, i5, i6] -> "
+ "[o0, o1, o2, o3, o4, o5, o6] : "
+ "(o6 <= -4 + 2M - 2N + i0 + i1 - i2 + i6 - o0 - o1 + o2 and "
+ "o3 <= -2 + i3 and o6 >= 2 + i0 + i3 + i6 - o0 - o3 and "
+ "o6 >= 2 - M + N + i3 + i4 + i6 - o3 - o4 and o0 <= -1 + i0 and "
+ "o4 >= 4 - 3M + 3N - i0 - i1 + i2 + 2i3 + i4 + o0 + o1 - o2 - 2o3 "
+ "and o6 <= -3 + 2M - 2N + i3 + i4 - i5 + i6 - o3 - o4 + o5 and "
+ "2o6 <= -5 + 5M - 5N + 2i0 + i1 - i2 - i5 + 2i6 - 2o0 - o1 + o2 + o5 "
+ "and o6 >= 2i0 + i1 + i6 - 2o0 - o1 and "
+ "3o6 <= -5 + 4M - 4N + 2i0 + i1 - i2 + 2i3 + i4 - i5 + 3i6 "
+ "- 2o0 - o1 + o2 - 2o3 - o4 + o5) or "
+ "(N >= 2 and o3 <= -1 + i3 and o0 <= -1 + i0 and "
+ "o6 >= i3 + i6 - o3 and M >= 0 and "
+ "2o6 >= 1 + i0 + i3 + 2i6 - o0 - o3 and "
+ "o6 >= 1 - M + i0 + i6 - o0 and N >= 2M and o6 >= i0 + i6 - o0) }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ map = isl_map_coalesce(map);
+ map2 = isl_map_read_from_str(ctx, str, -1);
+ assert(isl_map_is_equal(map, map2));
+ isl_map_free(map);
+ isl_map_free(map2);
+
+ str = "[M, N] -> { [] -> [o0] : (o0 = 0 and M >= 1 and N >= 2) or "
+ "(o0 = 0 and M >= 1 and N >= 2M and N >= 2 + M) or "
+ "(o0 = 0 and M >= 2 and N >= 3) or "
+ "(M = 0 and o0 = 0 and N >= 3) }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ map = isl_map_coalesce(map);
+ map2 = isl_map_read_from_str(ctx, str, -1);
+ assert(isl_map_is_equal(map, map2));
+ isl_map_free(map);
+ isl_map_free(map2);
+
+ str = "{ [i0, i1, i2, i3] : (i1 = 10i0 and i0 >= 1 and 10i0 <= 100 and "
+ "i3 <= 9 + 10 i2 and i3 >= 1 + 10i2 and i3 >= 0) or "
+ "(i1 <= 9 + 10i0 and i1 >= 1 + 10i0 and i2 >= 0 and "
+ "i0 >= 0 and i1 <= 100 and i3 <= 9 + 10i2 and i3 >= 1 + 10i2) }";
+ map = isl_map_read_from_str(ctx, str, -1);
+ map = isl_map_coalesce(map);
+ map2 = isl_map_read_from_str(ctx, str, -1);
+ assert(isl_map_is_equal(map, map2));
+ isl_map_free(map);
+ isl_map_free(map2);