2 * Copyright 2018 Cerebras Systems
4 * Use of this software is governed by the MIT license
6 * Written by Sven Verdoolaege,
7 * Cerebras Systems, 175 S San Antonio Rd, Los Altos, CA, USA
10 #include "isl_multi_macro.h"
12 #define TYPE CAT(isl_,BASE)
14 /* Check that "map" and "multi" live in the same space, ignoring parameters.
16 static isl_stat
FN(check_map_equal_tuples_multi
,BASE
)(__isl_keep isl_map
*map
,
17 __isl_keep
MULTI(BASE
) *multi
)
19 isl_space
*map_space
, *multi_space
;
21 map_space
= isl_map_peek_space(map
);
22 multi_space
= FN(MULTI(BASE
),peek_space
)(multi
);
23 return isl_space_check_equal_tuples(map_space
, multi_space
);
26 /* Apply "map_bound" to "map" with the corresponding value in "bound"
27 * for each output dimension.
28 * If "bound" has an explicit domain (which implies that "bound"
29 * is zero-dimensional), then intersect the domain of "map"
30 * with this explicit domain instead.
32 static __isl_give isl_map
*FN(map_bound_multi
,BASE
)(__isl_take isl_map
*map
,
33 __isl_take
MULTI(BASE
) *bound
,
34 __isl_give isl_map
*map_bound(__isl_take isl_map
*map
,
35 unsigned pos
, __isl_take TYPE
*value
))
40 dim
= isl_map_dim(map
, isl_dim_out
);
41 if (dim
< 0 || FN(check_map_equal_tuples_multi
,BASE
)(map
, bound
) < 0)
44 for (i
= 0; i
< dim
; ++i
) {
47 el
= FN(MULTI(BASE
),get_at
)(bound
, i
);
48 map
= map_bound(map
, i
, el
);
50 map
= FN(FN(isl_map_intersect_multi
,BASE
),explicit_domain
)(map
, bound
);
51 FN(MULTI(BASE
),free
)(bound
);
55 FN(MULTI(BASE
),free
)(bound
);