isl_constraint.c \
isl_convex_hull.c \
isl_ctx.c \
+ isl_dim_private.h \
isl_dim.c \
isl_div.c \
isl_equalities.c \
enum isl_dim_type type, unsigned n);
__isl_give isl_map *isl_map_add(__isl_take isl_map *map,
enum isl_dim_type type, unsigned n);
+__isl_give isl_map *isl_map_move(__isl_take isl_map *map,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n);
__isl_give isl_basic_map *isl_basic_map_project_out(
__isl_take isl_basic_map *bmap,
enum isl_dim_type type, unsigned first, unsigned n);
enum isl_dim_type type, unsigned n);
__isl_give isl_set *isl_set_add(__isl_take isl_set *set,
enum isl_dim_type type, unsigned n);
+__isl_give isl_set *isl_set_move(__isl_take isl_set *set,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n);
__isl_give isl_basic_set *isl_basic_set_project_out(
__isl_take isl_basic_set *bset,
enum isl_dim_type type, unsigned first, unsigned n);
* Computerwetenschappen, Celestijnenlaan 200A, B-3001 Leuven, Belgium
*/
-#include "isl_dim.h"
+#include <isl_dim_private.h>
#include "isl_name.h"
struct isl_dim *isl_dim_alloc(struct isl_ctx *ctx,
return dim;
}
+__isl_give isl_dim *isl_dim_move(__isl_take isl_dim *dim,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n)
+{
+ if (!dim)
+ return NULL;
+ if (n == 0)
+ return dim;
+
+ isl_assert(dim->ctx, src_pos + n <= isl_dim_size(dim, src_type),
+ goto error);
+
+ /* just the simple case for now */
+ isl_assert(dim->ctx,
+ offset(dim, dst_type) + dst_pos ==
+ offset(dim, src_type) + src_pos + ((src_type < dst_type) ? n : 0),
+ goto error);
+
+ if (dst_type == src_type)
+ return dim;
+
+ dim = isl_dim_cow(dim);
+ if (!dim)
+ return NULL;
+
+ switch (dst_type) {
+ case isl_dim_param: dim->nparam += n; break;
+ case isl_dim_in: dim->n_in += n; break;
+ case isl_dim_out: dim->n_out += n; break;
+ }
+
+ switch (src_type) {
+ case isl_dim_param: dim->nparam -= n; break;
+ case isl_dim_in: dim->n_in -= n; break;
+ case isl_dim_out: dim->n_out -= n; break;
+ }
+
+ return dim;
+error:
+ isl_dim_free(dim);
+ return NULL;
+}
+
struct isl_dim *isl_dim_join(struct isl_dim *left, struct isl_dim *right)
{
struct isl_dim *dim;
--- /dev/null
+#include <isl_dim.h>
+
+__isl_give isl_dim *isl_dim_move(__isl_take isl_dim *dim,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n);
#include "isl_sample.h"
#include "isl_tab.h"
#include "isl_vec.h"
+#include <isl_dim_private.h>
/* Maps dst positions to src positions */
struct isl_dim_map {
return NULL;
}
+__isl_give isl_basic_map *isl_basic_map_move(__isl_take isl_basic_map *bmap,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n)
+{
+ int i;
+
+ if (!bmap)
+ return NULL;
+ if (n == 0)
+ return bmap;
+
+ isl_assert(bmap->ctx, src_pos + n <= isl_basic_map_dim(bmap, src_type),
+ goto error);
+
+ /* just the simple case for now */
+ isl_assert(bmap->ctx,
+ pos(bmap->dim, dst_type) + dst_pos ==
+ pos(bmap->dim, src_type) + src_pos + ((src_type < dst_type) ? n : 0),
+ goto error);
+
+ if (dst_type == src_type)
+ return bmap;
+
+ bmap = isl_basic_map_cow(bmap);
+ if (!bmap)
+ return NULL;
+
+ bmap->dim = isl_dim_move(bmap->dim, dst_type, dst_pos, src_type, src_pos, n);
+ if (!bmap->dim)
+ goto error;
+
+ return bmap;
+error:
+ isl_basic_map_free(bmap);
+ return NULL;
+}
+
+__isl_give isl_set *isl_set_move(__isl_take isl_set *set,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n)
+{
+ if (!set)
+ return NULL;
+ isl_assert(set->ctx, dst_type != isl_dim_in, goto error);
+ return (isl_set *)isl_map_move((isl_map *)set, dst_type, dst_pos,
+ src_type, src_pos, n);
+error:
+ isl_set_free(set);
+ return NULL;
+}
+
+__isl_give isl_map *isl_map_move(__isl_take isl_map *map,
+ enum isl_dim_type dst_type, unsigned dst_pos,
+ enum isl_dim_type src_type, unsigned src_pos, unsigned n)
+{
+ int i;
+
+ if (!map)
+ return NULL;
+ if (n == 0)
+ return map;
+
+ isl_assert(map->ctx, src_pos + n <= isl_map_dim(map, src_type),
+ goto error);
+
+ /* just the simple case for now */
+ isl_assert(map->ctx,
+ map_offset(map, dst_type) + dst_pos ==
+ map_offset(map, src_type) + src_pos + ((src_type < dst_type) ? n : 0),
+ goto error);
+
+ if (dst_type == src_type)
+ return map;
+
+ map = isl_map_cow(map);
+ if (!map)
+ return NULL;
+
+ map->dim = isl_dim_move(map->dim, dst_type, dst_pos, src_type, src_pos, n);
+ if (!map->dim)
+ goto error;
+
+ for (i = 0; i < map->n; ++i) {
+ map->p[i] = isl_basic_map_move(map->p[i], dst_type, dst_pos,
+ src_type, src_pos, n);
+ if (!map->p[i])
+ goto error;
+ }
+
+ return map;
+error:
+ isl_map_free(map);
+ return NULL;
+}
+
/* Move the specified dimensions to the last columns right before
* the divs. Don't change the dimension specification of bmap.
* That's the responsibility of the caller.