/* A structure containing the output of dependence analysis:
* - n_source dependences
- * - a subset of the sink for which definitely no source could be found
- * - a subset of the sink for which possibly no source could be found
+ * - a wrapped subset of the sink for which definitely no source could be found
+ * - a wrapped subset of the sink for which possibly no source could be found
*/
struct isl_flow {
isl_set *must_no_source;
h1 = isl_map_get_hash(i1->source_map);
h2 = isl_map_get_hash(i2->source_map);
- return h1 - h2;
+ return h1 > h2 ? 1 : h1 < h2 ? -1 : 0;
}
/* Sort the must source accesses in order of increasing number of shared
return -1;
for (i = 0; i < deps->n_source; ++i) {
- if (isl_map_fast_is_empty(deps->dep[i].map))
+ if (isl_map_plain_is_empty(deps->dep[i].map))
continue;
if (fn(isl_map_copy(deps->dep[i].map), deps->dep[i].must,
deps->dep[i].data, user) < 0)
/* Return a copy of the subset of the sink for which no source could be found.
*/
-__isl_give isl_set *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must)
+__isl_give isl_map *isl_flow_get_no_source(__isl_keep isl_flow *deps, int must)
{
if (!deps)
return NULL;
if (must)
- return isl_set_copy(deps->must_no_source);
+ return isl_set_unwrap(isl_set_copy(deps->must_no_source));
else
- return isl_set_copy(deps->may_no_source);
+ return isl_set_unwrap(isl_set_copy(deps->may_no_source));
}
void isl_flow_free(__isl_take isl_flow *deps)
int k, level;
int depth = 2 * isl_map_dim(acc->source[j].map, isl_dim_in) + 1;
- if (isl_map_fast_is_empty(temp_rel[j]))
+ if (isl_map_plain_is_empty(temp_rel[j]))
return 0;
for (k = j - 1; k >= 0; --k) {
copy = isl_map_copy(temp_rel[j]);
T = last_later_source(acc, copy, j, sink_level, k,
level, &trest);
- if (isl_map_fast_is_empty(T)) {
+ if (isl_map_plain_is_empty(T)) {
isl_set_free(trest);
isl_map_free(T);
continue;
for (k = 0; k < acc->n_must; ++k) {
int plevel;
- if (isl_map_fast_is_empty(may_rel[k]) &&
- isl_map_fast_is_empty(must_rel[k]))
+ if (isl_map_plain_is_empty(may_rel[k]) &&
+ isl_map_plain_is_empty(must_rel[k]))
continue;
plevel = acc->level_before(acc->source[k].data,
maydo = isl_set_empty_like(mustdo);
if (!mustdo || !maydo)
goto error;
- if (isl_set_fast_is_empty(mustdo))
+ if (isl_set_plain_is_empty(mustdo))
goto done;
must_rel = isl_alloc_array(ctx, struct isl_map *, acc->n_must);
intermediate_sources(acc, may_rel, j, level);
- if (isl_set_fast_is_empty(mustdo) &&
- isl_set_fast_is_empty(maydo))
+ if (isl_set_plain_is_empty(mustdo) &&
+ isl_set_plain_is_empty(maydo))
break;
}
for (j = j - 1; j >= 0; --j) {
may_rel[j]);
}
- if (isl_set_fast_is_empty(mustdo) &&
- isl_set_fast_is_empty(maydo))
+ if (isl_set_plain_is_empty(mustdo) &&
+ isl_set_plain_is_empty(maydo))
break;
}
if (!res->dep[j].map)
goto error2;
}
- res->must_no_source = isl_set_apply(res->must_no_source,
- isl_map_copy(domain_map));
- res->may_no_source = isl_set_apply(res->may_no_source,
- isl_map_copy(domain_map));
if (!res->must_no_source || !res->may_no_source)
goto error2;
*
* [S -> D] -> A
*
- * wiht S the schedule domain, D the iteration domain and A the data domain.
+ * with S the schedule domain, D the iteration domain and A the data domain.
*/
static __isl_give struct isl_sched_info *sched_info_alloc(
__isl_keep isl_map *map)
goto error;
for (i = 0; i < n; ++i)
- info->is_cst[i] = isl_map_fast_is_fixed(map, isl_dim_in, i,
+ info->is_cst[i] = isl_map_plain_is_fixed(map, isl_dim_in, i,
&info->cst->el[i]);
return info;
isl_union_map *may_source;
isl_union_map *must_dep;
isl_union_map *may_dep;
- isl_union_set *must_no_source;
- isl_union_set *may_no_source;
+ isl_union_map *must_no_source;
+ isl_union_map *may_no_source;
int count;
int must;
* value and if moreover those values are different, then the previous
* dimension is the last shared nesting level and the textual order
* is determined based on the order of the fixed values.
- * If no such fixed values can be found, then we seet the shared
+ * If no such fixed values can be found, then we set the shared
* nesting level to the minimal schedule dimension, with no textual ordering.
*/
static int before(void *first, void *second)
if (!flow)
goto error;
- data->must_no_source = isl_union_set_union(data->must_no_source,
- isl_union_set_from_set(isl_set_copy(flow->must_no_source)));
- data->may_no_source = isl_union_set_union(data->may_no_source,
- isl_union_set_from_set(isl_set_copy(flow->may_no_source)));
+ data->must_no_source = isl_union_map_union(data->must_no_source,
+ isl_union_map_from_map(isl_flow_get_no_source(flow, 1)));
+ data->may_no_source = isl_union_map_union(data->may_no_source,
+ isl_union_map_from_map(isl_flow_get_no_source(flow, 0)));
for (i = 0; i < flow->n_source; ++i) {
isl_union_map *dep;
__isl_take isl_union_map *may_source,
__isl_take isl_union_map *schedule,
__isl_give isl_union_map **must_dep, __isl_give isl_union_map **may_dep,
- __isl_give isl_union_set **must_no_source,
- __isl_give isl_union_set **may_no_source)
+ __isl_give isl_union_map **must_no_source,
+ __isl_give isl_union_map **may_no_source)
{
isl_dim *dim;
isl_union_map *range_map = NULL;
isl_union_map_empty(isl_dim_copy(dim)) : NULL;
data.may_dep = may_dep ? isl_union_map_empty(isl_dim_copy(dim)) : NULL;
data.must_no_source = must_no_source ?
- isl_union_set_empty(isl_dim_copy(dim)) : NULL;
+ isl_union_map_empty(isl_dim_copy(dim)) : NULL;
data.may_no_source = may_no_source ?
- isl_union_set_empty(isl_dim_copy(dim)) : NULL;
+ isl_union_map_empty(isl_dim_copy(dim)) : NULL;
isl_dim_free(dim);
*may_dep = data.may_dep;
}
if (must_no_source) {
- data.must_no_source = isl_union_set_apply(data.must_no_source,
- isl_union_map_copy(range_map));
+ data.must_no_source = isl_union_map_apply_domain(
+ data.must_no_source, isl_union_map_copy(range_map));
*must_no_source = data.must_no_source;
}
if (may_no_source) {
- data.may_no_source = isl_union_set_apply(data.may_no_source,
- isl_union_map_copy(range_map));
+ data.may_no_source = isl_union_map_apply_domain(
+ data.may_no_source, isl_union_map_copy(range_map));
*may_no_source = data.may_no_source;
}
isl_union_map_free(may_source);
isl_union_map_free(data.must_dep);
isl_union_map_free(data.may_dep);
- isl_union_set_free(data.must_no_source);
- isl_union_set_free(data.may_no_source);
+ isl_union_map_free(data.must_no_source);
+ isl_union_map_free(data.may_no_source);
if (must_dep)
*must_dep = NULL;