@@ -296,11 +296,12 @@ isl::UnionSet<Statement> collectMappingsTo(const Scop& scop) {
296
296
* different references may have different values, but all of them remain
297
297
* independent of non-unrolled loop iterators.
298
298
*/
299
+ template <typename Outer>
299
300
bool accessSubscriptsAreUnrolledLoops (
300
301
const TensorReferenceGroup& group,
301
302
const detail::ScheduleTree* root,
302
303
const detail::ScheduleTree* scope,
303
- isl::multi_union_pw_aff outerSchedule) {
304
+ isl::MultiUnionPwAff<Statement, Outer> outerSchedule) {
304
305
using namespace detail ;
305
306
306
307
auto nodes = ScheduleTree::collect (scope);
@@ -315,16 +316,16 @@ bool accessSubscriptsAreUnrolledLoops(
315
316
for (auto leaf : leaves) {
316
317
auto ancestors = leaf->ancestors (root);
317
318
ancestors.push_back (leaf);
318
- isl::union_set subdomain = activeDomainPointsBelow (root, leaf);
319
+ auto subdomain = activeDomainPointsBelow (root, leaf);
319
320
320
- auto unrolledDims = isl::union_pw_aff_list (leaf->ctx_ , 1 );
321
+ auto unrolledDims = isl::UnionPwAffListOn<Statement> (leaf->ctx_ , 1 );
321
322
for (auto node : ancestors) {
322
- auto band = node->as <detail::ScheduleTreeBand>();
323
+ auto band = node->template as <detail::ScheduleTreeBand>();
323
324
if (!band) {
324
325
continue ;
325
326
}
326
327
327
- isl::multi_union_pw_aff schedule = band->mupa_ ;
328
+ auto schedule = band->mupa_ ;
328
329
schedule = schedule.intersect_domain (subdomain);
329
330
for (size_t i = 0 , e = band->nMember (); i < e; ++i) {
330
331
if (!band->unroll_ [i]) {
@@ -334,21 +335,23 @@ bool accessSubscriptsAreUnrolledLoops(
334
335
}
335
336
}
336
337
337
- auto space =
338
- subdomain.get_space ().add_unnamed_tuple_ui (unrolledDims.size ());
339
- auto unrolledDimsMupa = isl::multi_union_pw_aff (space, unrolledDims);
338
+ auto space = subdomain.get_space ().template add_unnamed_tuple_ui <Unrolled>(
339
+ unrolledDims.size ());
340
+ auto unrolledDimsMupa =
341
+ isl::MultiUnionPwAff<Statement, Unrolled>(space, unrolledDims);
340
342
341
343
// It is possible that no loops are unrolled, in which case
342
344
// unrolledDimsMupa is zero-dimensional and needs an explicit domain
343
345
// to be convertible to a union_map.
344
346
unrolledDimsMupa =
345
347
unrolledDimsMupa.intersect_domain (group.originalAccesses ().domain ());
346
348
347
- isl::union_map accesses = group.originalAccesses ();
348
- auto schedule = outerSchedule.flat_range_product (unrolledDimsMupa);
349
- accesses = accesses.apply_domain (isl::union_map::from (schedule));
349
+ auto accesses = group.originalAccesses ();
350
+ auto schedule = outerSchedule.range_product (unrolledDimsMupa);
351
+ auto scheduleMap = schedule.toUnionMap ();
352
+ auto scheduledAccesses = accesses.apply_domain (scheduleMap);
350
353
351
- if (!accesses .is_single_valued ()) {
354
+ if (!scheduledAccesses .is_single_valued ()) {
352
355
return false ;
353
356
}
354
357
}
0 commit comments