Skip to content
This repository was archived by the owner on Apr 28, 2023. It is now read-only.

Commit 08bc1a2

Browse files
author
Sven Verdoolaege
committed
use templated isl types in schedule tree
1 parent 5b18188 commit 08bc1a2

14 files changed

+94
-69
lines changed

tc/core/polyhedral/cuda/mapped_scop.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ bool MappedScop::detectReductions(ScheduleTree* tree) {
288288
// a single reduction for now.
289289
// Support for multiple reductions would require a check
290290
// that these reductions do not interfere with each other.
291-
auto domain = isl::UnionSet<Statement>(band->mupa_.domain());
291+
auto domain = band->mupa_.domain();
292292
auto updates = reductionUpdates(domain, scop());
293293
if (updates.n_set() != 1) {
294294
return false;

tc/core/polyhedral/memory_promotion.cc

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -501,8 +501,10 @@ ScheduleTree* insertCopiesUnder(
501501
auto writeSchedule = isl::multi_union_pw_aff(identityCopySchedule.pullback(
502502
isl::multi_aff::wrapped_range_map(writeSpace)));
503503

504-
auto readBandNode = ScheduleTree::makeBand(readSchedule);
505-
auto writeBandNode = ScheduleTree::makeBand(writeSchedule);
504+
auto readBandNode = ScheduleTree::makeBand(
505+
isl::MultiUnionPwAff<Statement, Band>(readSchedule));
506+
auto writeBandNode = ScheduleTree::makeBand(
507+
isl::MultiUnionPwAff<Statement, Band>(writeSchedule));
506508

507509
if (unrollAllCopies) {
508510
unrollAllMembers(readBandNode->as<detail::ScheduleTreeBand>());
@@ -552,14 +554,18 @@ ScheduleTree* insertCopiesUnder(
552554

553555
if (reads) {
554556
insertExtensionBefore(
555-
root, tree, tree->child({0}), readExtension, std::move(readFilterNode));
557+
root,
558+
tree,
559+
tree->child({0}),
560+
isl::UnionMap<Prefix, Statement>(readExtension),
561+
std::move(readFilterNode));
556562
}
557563
if (writes) {
558564
insertExtensionAfter(
559565
root,
560566
tree,
561567
tree->child({0}),
562-
writeExtension,
568+
isl::UnionMap<Prefix, Statement>(writeExtension),
563569
std::move(writeFilterNode));
564570
}
565571

tc/core/polyhedral/schedule_isl_conversion.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,16 +243,16 @@ std::unique_ptr<ScheduleTreeBand> fromIslScheduleNodeBand(
243243
for (size_t i = 0; i < n; ++i) {
244244
coincident[i] = b.member_get_coincident(i);
245245
}
246-
return ScheduleTreeBand::make(
247-
b.get_partial_schedule(), b.get_permutable(), coincident, unroll);
246+
auto mupa = isl::MultiUnionPwAff<Statement, Band>(b.get_partial_schedule());
247+
return ScheduleTreeBand::make(mupa, b.get_permutable(), coincident, unroll);
248248
}
249249

250250
std::unique_ptr<ScheduleTree> elemFromIslScheduleNode(isl::schedule_node node) {
251251
auto ctx = node.get_ctx();
252252
if (auto band = node.as<isl::schedule_node_band>()) {
253253
return fromIslScheduleNodeBand(band);
254254
} else if (auto context = node.as<isl::schedule_node_context>()) {
255-
auto c = context.get_context();
255+
auto c = isl::Set<Prefix>(context.get_context());
256256
return ScheduleTreeContext::make(c);
257257
} else if (auto domain = node.as<isl::schedule_node_domain>()) {
258258
auto c = domain.get_domain();

tc/core/polyhedral/schedule_transforms.cc

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,8 @@ ScheduleTree* joinBandsHelper(ScheduleTree* st, bool& moveChildren) {
8989

9090
auto& partialSchedule = eb->mupa_;
9191
auto& partialScheduleChild = ebChild->mupa_;
92-
partialSchedule = partialSchedule.flat_range_product(partialScheduleChild);
92+
partialSchedule =
93+
partialSchedule.flat_range_product<Band>(partialScheduleChild);
9394
eb->coincident_.resize(
9495
eb->coincident_.size() + ebChild->coincident_.size(), false);
9596
eb->unroll_.insert(
@@ -285,7 +286,9 @@ ScheduleTree* insertTopLevelEmptyBand(ScheduleTree* root) {
285286
return insertNodeBelow(node, ScheduleTree::makeEmptyBand(root));
286287
}
287288

288-
void updateTopLevelContext(detail::ScheduleTree* root, isl::set context) {
289+
void updateTopLevelContext(
290+
detail::ScheduleTree* root,
291+
isl::Set<Prefix> context) {
289292
if (!matchOne(tc::polyhedral::domain(tc::polyhedral::context(any())), root)) {
290293
root->appendChild(
291294
ScheduleTree::makeContext(context, root->detachChildren()));
@@ -394,7 +397,7 @@ void insertExtensionAt(
394397
ScheduleTree* relativeRoot,
395398
ScheduleTree* seqNode,
396399
size_t pos,
397-
isl::union_map extension,
400+
isl::UnionMap<Prefix, Statement> extension,
398401
ScheduleTreeUPtr&& filterNode) {
399402
auto extensionTree = seqNode->ancestor(relativeRoot, 1);
400403
auto extensionNode = extensionTree->as<detail::ScheduleTreeExtension>();
@@ -413,7 +416,7 @@ void insertExtensionBefore(
413416
const ScheduleTree* root,
414417
ScheduleTree* relativeRoot,
415418
ScheduleTree* tree,
416-
isl::union_map extension,
419+
isl::UnionMap<Prefix, Statement> extension,
417420
ScheduleTreeUPtr&& filterNode) {
418421
size_t pos;
419422
auto parent = tree->ancestor(relativeRoot, 1);
@@ -442,7 +445,7 @@ void insertExtensionAfter(
442445
const ScheduleTree* root,
443446
ScheduleTree* relativeRoot,
444447
ScheduleTree* tree,
445-
isl::union_map extension,
448+
isl::UnionMap<Prefix, Statement> extension,
446449
ScheduleTreeUPtr&& filterNode) {
447450
size_t pos;
448451
auto parent = tree->ancestor(relativeRoot, 1);
@@ -504,7 +507,7 @@ namespace {
504507
* of band node partial schedules.
505508
* Elements of a sequence that end up with an empty filter are removed.
506509
*/
507-
void gist(ScheduleTree* tree, isl::union_set context) {
510+
void gist(ScheduleTree* tree, isl::UnionSet<Statement> context) {
508511
if (auto bandElem = tree->as<ScheduleTreeBand>()) {
509512
bandElem->mupa_ = bandElem->mupa_.gist(context);
510513
} else if (auto filterElem = tree->as<ScheduleTreeMapping>()) {
@@ -534,7 +537,9 @@ void gist(ScheduleTree* tree, isl::union_set context) {
534537
* Create a filter node with the given filter and single child node,
535538
* after simplifying the child node in the context of the filter.
536539
*/
537-
ScheduleTreeUPtr gistedFilter(isl::union_set filter, ScheduleTreeUPtr child) {
540+
ScheduleTreeUPtr gistedFilter(
541+
isl::UnionSet<Statement> filter,
542+
ScheduleTreeUPtr child) {
538543
gist(child.get(), filter);
539544
return ScheduleTree::makeFilter(filter, std::move(child));
540545
}

tc/core/polyhedral/schedule_transforms.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ detail::ScheduleTree* insertTopLevelEmptyBand(detail::ScheduleTree* root);
111111
// Update the top-level context node by intersecting it with "context". The
112112
// top-level context node must be located directly under the root of the tree.
113113
// If there is no such node, insert one first.
114-
void updateTopLevelContext(detail::ScheduleTree* root, isl::set context);
114+
void updateTopLevelContext(
115+
detail::ScheduleTree* root,
116+
isl::Set<Prefix> context);
115117

116118
// In a tree starting at "root", insert a sequence node with
117119
// as only child the node identified by "tree".
@@ -175,7 +177,7 @@ void insertExtensionBefore(
175177
const detail::ScheduleTree* root,
176178
detail::ScheduleTree* relativeRoot,
177179
detail::ScheduleTree* tree,
178-
isl::union_map extension,
180+
isl::UnionMap<Prefix, Statement> extension,
179181
ScheduleTreeUPtr&& filterNode);
180182

181183
// Insert an extension with the given extension map and extension filter node
@@ -190,7 +192,7 @@ void insertExtensionAfter(
190192
const detail::ScheduleTree* root,
191193
detail::ScheduleTree* relativeRoot,
192194
detail::ScheduleTree* tree,
193-
isl::union_map extension,
195+
isl::UnionMap<Prefix, Statement> extension,
194196
ScheduleTreeUPtr&& filterNode);
195197

196198
// Given a sequence node in the schedule tree, insert

tc/core/polyhedral/schedule_tree.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ size_t ScheduleTree::scheduleDepth(const ScheduleTree* relativeRoot) const {
200200
}
201201

202202
std::unique_ptr<ScheduleTree> ScheduleTree::makeBand(
203-
isl::multi_union_pw_aff mupa,
203+
isl::MultiUnionPwAff<Statement, Band> mupa,
204204
std::vector<ScheduleTreeUPtr>&& children) {
205205
std::vector<bool> coincident(mupa.size(), false);
206206
std::vector<bool> unroll(mupa.size(), false);
@@ -212,9 +212,9 @@ std::unique_ptr<ScheduleTree> ScheduleTree::makeBand(
212212
ScheduleTreeUPtr ScheduleTree::makeEmptyBand(const ScheduleTree* root) {
213213
auto domain = root->as<ScheduleTreeDomain>();
214214
TC_CHECK(domain);
215-
auto space = domain->domain_.get_space().set_from_params();
216-
auto mv = isl::multi_val::zero(space);
217-
auto zero = isl::multi_union_pw_aff(domain->domain_, mv);
215+
auto space = domain->domain_.get_space().add_unnamed_tuple_ui<Band>(0);
216+
auto mv = isl::MultiVal<Band>::zero(space);
217+
auto zero = isl::MultiUnionPwAff<Statement, Band>(domain->domain_, mv);
218218
return ScheduleTree::makeBand(zero);
219219
}
220220

@@ -225,7 +225,7 @@ std::unique_ptr<ScheduleTree> ScheduleTree::makeDomain(
225225
}
226226

227227
std::unique_ptr<ScheduleTree> ScheduleTree::makeContext(
228-
isl::set context,
228+
isl::Set<Prefix> context,
229229
std::vector<ScheduleTreeUPtr>&& children) {
230230
return ScheduleTreeContext::make(context, std::move(children));
231231
}

tc/core/polyhedral/schedule_tree.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include <vector>
2222

2323
#include "tc/core/check.h"
24+
#include "tc/core/polyhedral/domain_types.h"
2425
#include "tc/core/polyhedral/mapping_types.h"
2526
#include "tc/core/polyhedral/options.h"
2627
#include "tc/core/utils/vararg.h"
@@ -280,7 +281,7 @@ struct ScheduleTree {
280281
// Factory functions
281282
//
282283
static ScheduleTreeUPtr makeBand(
283-
isl::multi_union_pw_aff mupa,
284+
isl::MultiUnionPwAff<Statement, Band> mupa,
284285
std::vector<ScheduleTreeUPtr>&& children = {});
285286

286287
// Return a zero-dimensional band for use in a tree with the given root.
@@ -291,7 +292,7 @@ struct ScheduleTree {
291292
std::vector<ScheduleTreeUPtr>&& children = {});
292293

293294
static ScheduleTreeUPtr makeContext(
294-
isl::set context,
295+
isl::Set<Prefix> context,
295296
std::vector<ScheduleTreeUPtr>&& children = {});
296297

297298
static ScheduleTreeUPtr makeFilter(
@@ -332,7 +333,7 @@ struct ScheduleTree {
332333

333334
template <typename... Args>
334335
static ScheduleTreeUPtr makeBand(
335-
isl::multi_union_pw_aff mupa,
336+
isl::MultiUnionPwAff<Statement, Band> mupa,
336337
Args&&... args) {
337338
return makeBand(
338339
mupa, vectorFromArgs<ScheduleTreeUPtr>(std::forward<Args>(args)...));
@@ -345,7 +346,7 @@ struct ScheduleTree {
345346
}
346347

347348
template <typename... Args>
348-
static ScheduleTreeUPtr makeContext(isl::set context, Args&&... args) {
349+
static ScheduleTreeUPtr makeContext(isl::Set<> context, Args&&... args) {
349350
return makeContext(
350351
context, vectorFromArgs<ScheduleTreeUPtr>(std::forward<Args>(args)...));
351352
}

tc/core/polyhedral/schedule_tree_elem.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "tc/core/check.h"
2727
#include "tc/core/constants.h"
2828
#include "tc/core/flags.h"
29+
#include "tc/core/polyhedral/domain_types.h"
2930
#include "tc/core/polyhedral/schedule_isl_conversion.h"
3031
#include "tc/core/polyhedral/schedule_tree.h"
3132
#include "tc/core/scope_guard.h"
@@ -185,7 +186,7 @@ std::unique_ptr<ScheduleTreeSet> ScheduleTreeSet::make(
185186
}
186187

187188
std::unique_ptr<ScheduleTreeBand> ScheduleTreeBand::make(
188-
isl::multi_union_pw_aff mupa,
189+
isl::MultiUnionPwAff<Statement, Band> mupa,
189190
bool permutable,
190191
std::vector<bool> coincident,
191192
std::vector<bool> unroll,
@@ -238,8 +239,8 @@ void ScheduleTreeBand::drop(size_t pos, size_t n) {
238239
auto list = mupa_.get_union_pw_aff_list();
239240
auto space = mupa_.get_space().params();
240241
list = list.drop(pos, n);
241-
space = space.add_unnamed_tuple_ui(list.size());
242-
mupa_ = isl::multi_union_pw_aff(space, list);
242+
auto spaceBand = space.add_unnamed_tuple_ui<Band>(list.size());
243+
mupa_ = isl::MultiUnionPwAff<Statement, Band>(spaceBand, list);
243244

244245
std::copy(
245246
coincident_.begin() + pos + n,

tc/core/polyhedral/schedule_tree_elem.h

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ struct ScheduleTreeContext : public ScheduleTree {
6464
}
6565

6666
public:
67-
isl::set context_;
67+
isl::Set<Prefix> context_;
6868
};
6969

7070
struct ScheduleTreeDomain : public ScheduleTree {
@@ -100,7 +100,7 @@ struct ScheduleTreeDomain : public ScheduleTree {
100100
}
101101

102102
public:
103-
isl::union_set domain_;
103+
isl::UnionSet<Statement> domain_;
104104
};
105105

106106
struct ScheduleTreeExtension : public ScheduleTree {
@@ -136,7 +136,7 @@ struct ScheduleTreeExtension : public ScheduleTree {
136136
}
137137

138138
public:
139-
isl::union_map extension_;
139+
isl::UnionMap<Prefix, Statement> extension_;
140140
};
141141

142142
struct ScheduleTreeFilter : public ScheduleTree {
@@ -172,7 +172,7 @@ struct ScheduleTreeFilter : public ScheduleTree {
172172
}
173173

174174
public:
175-
isl::union_set filter_;
175+
isl::UnionSet<Statement> filter_;
176176
};
177177

178178
struct ScheduleTreeMapping : public ScheduleTree {
@@ -216,7 +216,7 @@ struct ScheduleTreeMapping : public ScheduleTree {
216216
// Mapping from identifiers to affine functions on domain elements.
217217
const Mapping mapping;
218218
// Assignment of the affine functions to the identifiers as parameters.
219-
isl::union_set filter_;
219+
isl::UnionSet<Statement> filter_;
220220
};
221221

222222
struct ScheduleTreeSequence : public ScheduleTree {
@@ -310,7 +310,7 @@ struct ScheduleTreeBand : public ScheduleTree {
310310
// Replace "mupa" by its greatest integer part to ensure that the
311311
// schedule is always integral.
312312
static std::unique_ptr<ScheduleTreeBand> make(
313-
isl::multi_union_pw_aff mupa,
313+
isl::MultiUnionPwAff<Statement, Band> mupa,
314314
bool permutable,
315315
std::vector<bool> coincident,
316316
std::vector<bool> unroll,
@@ -336,18 +336,17 @@ struct ScheduleTreeBand : public ScheduleTree {
336336
isl::MultiUnionPwAff<Statement, Range> memberRange(size_t first, size_t n)
337337
const {
338338
auto list = mupa_.get_union_pw_aff_list();
339-
auto space = mupa_.get_space().params().add_unnamed_tuple_ui(n);
339+
auto space = mupa_.get_space().params().add_unnamed_tuple_ui<Range>(n);
340340
auto end = first + n;
341341
TC_CHECK_LE(end, nMember());
342342
list = list.drop(end, nMember() - end);
343343
list = list.drop(0, first);
344-
return isl::MultiUnionPwAff<Statement, Range>(
345-
isl::multi_union_pw_aff(space, list));
344+
return isl::MultiUnionPwAff<Statement, Range>(space, list);
346345
}
347346

348347
public:
349348
bool permutable_{false};
350-
isl::multi_union_pw_aff mupa_;
349+
isl::MultiUnionPwAff<Statement, Band> mupa_;
351350

352351
std::vector<bool> coincident_;
353352
// For each member, should the corresponding loop in the generated code

0 commit comments

Comments
 (0)