unsigned isl_map_n_in(const struct isl_map *map)
{
- return map->dim->n_in;
+ return map ? map->dim->n_in : 0;
}
unsigned isl_map_n_out(const struct isl_map *map)
{
- return map->dim->n_out;
+ return map ? map->dim->n_out : 0;
}
unsigned isl_map_n_param(const struct isl_map *map)
{
- return map->dim->nparam;
+ return map ? map->dim->nparam : 0;
}
int isl_map_compatible_domain(struct isl_map *map, struct isl_set *set)
__isl_give isl_basic_map *isl_basic_map_remove_divs(
__isl_take isl_basic_map *bmap)
{
+ if (!bmap)
+ return NULL;
bmap = isl_basic_map_eliminate_vars(bmap, isl_dim_total(bmap->dim),
bmap->n_div);
if (!bmap)
return NULL;
isl_assert(bmap->ctx, first + n <= isl_basic_map_dim(bmap, type),
goto error);
- if (n == 0)
+ if (n == 0 && !isl_dim_is_named_or_nested(bmap->dim, type))
return bmap;
bmap = isl_basic_map_eliminate_vars(bmap,
isl_basic_map_offset(bmap, type) - 1 + first, n);
if (!map1 || !map2)
goto error;
- if (isl_map_plain_is_empty(map1)) {
+ if (isl_map_plain_is_empty(map1) &&
+ isl_dim_equal(map1->dim, map2->dim)) {
isl_map_free(map2);
return map1;
}
- if (isl_map_plain_is_empty(map2)) {
+ if (isl_map_plain_is_empty(map2) &&
+ isl_dim_equal(map1->dim, map2->dim)) {
isl_map_free(map1);
return map2;
}
(struct isl_map *)set2);
}
+/* The current implementation of isl_map_intersect accepts intersections
+ * with parameter domains, so we can just call that for now.
+ */
+__isl_give isl_map *isl_map_intersect_params(__isl_take isl_map *map,
+ __isl_take isl_set *params)
+{
+ return isl_map_intersect(map, params);
+}
+
+__isl_give isl_set *isl_set_intersect_params(__isl_take isl_set *set,
+ __isl_take isl_set *params)
+{
+ return isl_map_intersect_params(set, params);
+}
+
struct isl_basic_map *isl_basic_map_reverse(struct isl_basic_map *bmap)
{
struct isl_dim *dim;
*/
struct isl_set *isl_set_product(struct isl_set *set1, struct isl_set *set2)
{
- return (struct isl_set *)isl_map_product((struct isl_map *)set1,
- (struct isl_map *)set2);
+ return isl_map_range_product(set1, set2);
}
__isl_give isl_set *isl_set_flat_product(__isl_take isl_set *set1,