{
isl_aff *aff;
isl_set *set;
- isl_int stride;
+ isl_val *stride;
int pos;
if (!build)
if (!isl_ast_build_has_stride(build, pos))
return isl_set_universe(isl_ast_build_get_space(build, 1));
- isl_int_init(stride);
-
- isl_ast_build_get_stride(build, pos, &stride);
+ stride = isl_ast_build_get_stride(build, pos);
aff = isl_ast_build_get_offset(build, pos);
aff = isl_aff_add_coefficient_si(aff, isl_dim_in, pos, -1);
- aff = isl_aff_mod(aff, stride);
+ aff = isl_aff_mod_val(aff, stride);
set = isl_set_from_basic_set(isl_aff_zero_basic_set(aff));
- isl_int_clear(stride);
-
return set;
}
isl_multi_aff *ma;
int pos;
isl_aff *aff, *offset;
- isl_int stride;
+ isl_val *stride;
if (!build)
return NULL;
if (!isl_ast_build_has_stride(build, pos))
return ma;
- isl_int_init(stride);
offset = isl_ast_build_get_offset(build, pos);
- isl_ast_build_get_stride(build, pos, &stride);
+ stride = isl_ast_build_get_stride(build, pos);
aff = isl_multi_aff_get_aff(ma, pos);
- aff = isl_aff_scale(aff, stride);
+ aff = isl_aff_scale_val(aff, stride);
aff = isl_aff_add(aff, offset);
ma = isl_multi_aff_set_aff(ma, pos, aff);
- isl_int_clear(stride);
return ma;
}
* We therefore only need to update stride, offset and the options.
*/
__isl_give isl_ast_build *isl_ast_build_scale_down(
- __isl_take isl_ast_build *build, isl_int m,
+ __isl_take isl_ast_build *build, __isl_take isl_val *m,
__isl_take isl_union_map *umap)
{
isl_aff *aff;
- isl_int v;
+ isl_val *v;
int depth;
build = isl_ast_build_cow(build);
- if (!build || !umap)
+ if (!build || !umap || !m)
goto error;
depth = build->depth;
- isl_int_init(v);
- if (isl_vec_get_element(build->strides, depth, &v) < 0)
- build->strides = isl_vec_free(build->strides);
- isl_int_divexact(v, v, m);
- build->strides = isl_vec_set_element(build->strides, depth, v);
- isl_int_clear(v);
+ v = isl_vec_get_element_val(build->strides, depth);
+ v = isl_val_div(v, isl_val_copy(m));
+ build->strides = isl_vec_set_element_val(build->strides, depth, v);
aff = isl_multi_aff_get_aff(build->offsets, depth);
- aff = isl_aff_scale_down(aff, m);
+ aff = isl_aff_scale_down_val(aff, m);
build->offsets = isl_multi_aff_set_aff(build->offsets, depth, aff);
build->options = isl_union_map_apply_domain(build->options, umap);
if (!build->strides || !build->offsets || !build->options)
return build;
error:
+ isl_val_free(m);
isl_union_map_free(umap);
return isl_ast_build_free(build);
}
*
* with a an integer, return s through *stride.
*/
-int isl_ast_build_get_stride(__isl_keep isl_ast_build *build, int pos,
- isl_int *stride)
+__isl_give isl_val *isl_ast_build_get_stride(__isl_keep isl_ast_build *build,
+ int pos)
{
if (!build)
- return -1;
-
- isl_vec_get_element(build->strides, pos, stride);
+ return NULL;
- return 0;
+ return isl_vec_get_element_val(build->strides, pos);
}
/* Given that the dimension at position "pos" takes on values