mirror of
https://review.haiku-os.org/buildtools
synced 2024-11-23 15:29:11 +01:00
c8db99d323
GCC had a horrible .gitignore, untracked files were not applied
66 lines
1.6 KiB
C
66 lines
1.6 KiB
C
/*
|
|
* Copyright 2018 Cerebras Systems
|
|
*
|
|
* Use of this software is governed by the MIT license
|
|
*
|
|
* Written by Sven Verdoolaege,
|
|
* Cerebras Systems, 175 S San Antonio Rd, Los Altos, CA, USA
|
|
*/
|
|
|
|
/* Bind the expressions of "multi" to parameters with identifiers
|
|
* specified by "tuple", living in the same space as
|
|
* (the target space of) "multi",
|
|
* returning the elements in the domain where the expressions
|
|
* are equal to the parameters.
|
|
*/
|
|
__isl_give DOM *FN(MULTI(BASE),bind)(__isl_take MULTI(BASE) *multi,
|
|
__isl_take isl_multi_id *tuple)
|
|
{
|
|
int i;
|
|
isl_id *id;
|
|
isl_stat r;
|
|
isl_size n;
|
|
isl_space *multi_space, *tuple_space;
|
|
EL *el;
|
|
DOM *bnd;
|
|
|
|
multi_space = isl_space_range(FN(MULTI(BASE),get_space)(multi));
|
|
tuple_space = isl_multi_id_peek_space(tuple);
|
|
r = isl_space_check_equal_tuples(multi_space, tuple_space);
|
|
isl_space_free(multi_space);
|
|
if (r < 0)
|
|
goto error;
|
|
n = FN(MULTI(BASE),dim)(multi, isl_dim_set);
|
|
if (n < 0)
|
|
goto error;
|
|
|
|
if (n == 0) {
|
|
isl_multi_id_free(tuple);
|
|
return FN(MULTI(BASE),domain)(multi);
|
|
}
|
|
|
|
el = FN(MULTI(BASE),get_at)(multi, 0);
|
|
id = isl_multi_id_get_at(tuple, 0);
|
|
bnd = FN(EL,bind_id)(el, id);
|
|
|
|
for (i = 1; i < n; ++i) {
|
|
DOM *bnd_i;
|
|
|
|
el = FN(MULTI(BASE),get_at)(multi, i);
|
|
id = isl_multi_id_get_at(tuple, i);
|
|
bnd_i = FN(EL,bind_id)(el, id);
|
|
|
|
bnd_i = FN(DOM,align_params)(bnd_i, FN(DOM,get_space)(bnd));
|
|
bnd = FN(DOM,align_params)(bnd, FN(DOM,get_space)(bnd_i));
|
|
bnd = FN(DOM,intersect)(bnd, bnd_i);
|
|
}
|
|
|
|
FN(MULTI(BASE),free)(multi);
|
|
isl_multi_id_free(tuple);
|
|
return bnd;
|
|
error:
|
|
FN(MULTI(BASE),free)(multi);
|
|
isl_multi_id_free(tuple);
|
|
return NULL;
|
|
}
|