@@ -451,11 +451,12 @@ isl::Set<Tensor> tensorElementsSet(const Scop& scop, isl::id tensorId) {
451451 * Note that this function drops the name of the target space of "schedule",
452452 * but this space is irrelevant for the caller.
453453 */
454- isl::multi_aff dropDummyTensorDimensions (
455- isl::multi_aff schedule,
454+ template <typename Domain>
455+ isl::MultiAff<Domain, Domain> dropDummyTensorDimensions (
456+ isl::MultiAff<Domain, Domain> schedule,
456457 const Scop::PromotedDecl& decl) {
457458 auto list = schedule.get_aff_list ();
458- auto space = schedule.get_space ().domain ();
459+ auto domainSpace = schedule.get_space ().domain ();
459460
460461 auto n = list.size ();
461462 for (int i = n - 1 ; i >= 0 ; --i) {
@@ -464,8 +465,8 @@ isl::multi_aff dropDummyTensorDimensions(
464465 }
465466 }
466467
467- space = space. add_unnamed_tuple_ui (list.size ());
468- return isl::multi_aff (space, list);
468+ auto space = domainSpace. template add_unnamed_tuple_ui <Domain> (list.size ());
469+ return isl::MultiAff<Domain, Domain> (space, list);
469470}
470471
471472inline void unrollAllMembers (detail::ScheduleTreeBand* band) {
@@ -489,20 +490,25 @@ ScheduleTree* insertCopiesUnder(
489490 // Take the set of all tensor elements.
490491 auto tensorElements = tensorElementsSet (scop, tensorId);
491492
492- auto promotion = isl::map (group.promotion ()).set_range_tuple_id (groupId);
493+ auto promotion =
494+ group.promotion ().asMap ().set_range_tuple_id <Promoted>(groupId);
493495 auto promotionSpace = promotion.get_space ();
494496
495- auto identityCopySchedule =
496- isl::multi_aff::identity ( promotionSpace.range ().map_from_set ());
497+ auto identityCopySchedule = isl::MultiAff<Promoted, Promoted>:: identity (
498+ promotionSpace.range ().map_from_set ());
497499 // Only iterate over significant tensor dimensions.
498500 auto decl = scop.promotedDecl (groupId);
499501 identityCopySchedule = dropDummyTensorDimensions (identityCopySchedule, decl);
500- auto readSpace = promotionSpace.wrap ().set_set_tuple_id (readId);
501- auto writeSpace = promotionSpace.wrap ().set_set_tuple_id (writeId);
502+ auto readSpace = promotionSpace.wrap ().set_set_tuple_id <Statement> (readId);
503+ auto writeSpace = promotionSpace.wrap ().set_set_tuple_id <Statement> (writeId);
502504 auto readSchedule = isl::multi_union_pw_aff (identityCopySchedule.pullback (
503- isl::multi_aff::wrapped_range_map (readSpace)));
505+ isl::MultiAff<
506+ isl::NamedPair<Statement, isl::Pair<Prefix, Tensor>, Promoted>,
507+ Promoted>::wrapped_range_map (readSpace)));
504508 auto writeSchedule = isl::multi_union_pw_aff (identityCopySchedule.pullback (
505- isl::multi_aff::wrapped_range_map (writeSpace)));
509+ isl::MultiAff<
510+ isl::NamedPair<Statement, isl::Pair<Prefix, Tensor>, Promoted>,
511+ Promoted>::wrapped_range_map (writeSpace)));
506512
507513 auto readBandNode = ScheduleTree::makeBand (
508514 isl::MultiUnionPwAff<Statement, Band>(readSchedule));
@@ -524,19 +530,19 @@ ScheduleTree* insertCopiesUnder(
524530 auto promotedFootprint =
525531 group.promotedFootprint ().set_tuple_id <Promoted>(groupId);
526532 auto scheduleUniverse =
527- isl::set ::universe (promotionSpace.domain ().unwrap ().domain ());
533+ isl::Set<Prefix> ::universe (promotionSpace.domain ().unwrap ().domain ());
528534 auto arrayId = promotionSpace.domain ().unwrap ().get_map_range_tuple_id ();
529535 auto approximatedRead =
530536 group.approximateScopedAccesses ().intersect_range (tensorElements).wrap ();
531537 auto product = approximatedRead.product (promotedFootprint);
532538 auto readExtension =
533- extension.intersect_range (product).set_range_tuple_id (readId);
539+ extension.intersect_range (product).set_range_tuple_id <Statement> (readId);
534540 auto writtenElements = group.scopedWrites ()
535541 .intersect_range (tensorElements)
536542 .wrap ()
537543 .product (promotedFootprint);
538- auto writeExtension =
539- extension. intersect_range (writtenElements). set_range_tuple_id (writeId);
544+ auto writeExtension = extension. intersect_range (writtenElements)
545+ . set_range_tuple_id <Statement> (writeId);
540546
541547 auto readFilterNode = ScheduleTree::makeFilter (
542548 isl::set::universe (readExtension.get_space ().range ()),
@@ -557,18 +563,14 @@ ScheduleTree* insertCopiesUnder(
557563
558564 if (reads) {
559565 insertExtensionBefore (
560- root,
561- tree,
562- tree->child ({0 }),
563- isl::UnionMap<Prefix, Statement>(readExtension),
564- std::move (readFilterNode));
566+ root, tree, tree->child ({0 }), readExtension, std::move (readFilterNode));
565567 }
566568 if (writes) {
567569 insertExtensionAfter (
568570 root,
569571 tree,
570572 tree->child ({0 }),
571- isl::UnionMap<Prefix, Statement>( writeExtension) ,
573+ writeExtension,
572574 std::move (writeFilterNode));
573575 }
574576
0 commit comments