3 struct isl_dim *isl_dim_alloc(struct isl_ctx *ctx,
4 unsigned nparam, unsigned n_in, unsigned n_out)
8 dim = isl_alloc_type(ctx, struct isl_dim);
22 struct isl_dim *isl_dim_dup(struct isl_dim *dim)
24 return isl_dim_alloc(dim->ctx, dim->nparam, dim->n_in, dim->n_out);
27 struct isl_dim *isl_dim_cow(struct isl_dim *dim)
35 return isl_dim_dup(dim);
38 struct isl_dim *isl_dim_copy(struct isl_dim *dim)
47 void isl_dim_free(struct isl_dim *dim)
55 isl_ctx_deref(dim->ctx);
60 struct isl_dim *isl_dim_join(struct isl_dim *left, struct isl_dim *right)
67 isl_assert(left->ctx, left->nparam == right->nparam, goto error);
68 isl_assert(left->ctx, left->n_out == right->n_in, goto error);
70 dim = isl_dim_alloc(left->ctx, left->nparam, left->n_in, right->n_out);
84 struct isl_dim *isl_dim_reverse(struct isl_dim *dim)
90 if (dim->n_in == dim->n_out)
93 dim = isl_dim_cow(dim);
98 dim->n_in = dim->n_out;
107 unsigned isl_dim_total(struct isl_dim *dim)
109 return dim->nparam + dim->n_in + dim->n_out;
112 int isl_dim_equal(struct isl_dim *dim1, struct isl_dim *dim2)
114 return dim1->nparam == dim2->nparam &&
115 dim1->n_in == dim2->n_in &&
116 dim1->n_out == dim2->n_out;
119 int isl_dim_compatible(struct isl_dim *dim1, struct isl_dim *dim2)
121 return dim1->nparam == dim2->nparam &&
122 dim1->n_in + dim1->n_out == dim2->n_in + dim2->n_out;