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

Commit d3e3ed0

Browse files
committed
ScheduleTree::fromList: statically check for Sequence/Set node type
Statically assert that the type of node being constructed is Sequence or Set. This function is not called for other types and would have failed to compile anyway since it constructs a tree element from an isl::ctx only, which is impossible for other types. Remove the useless dynamic check before calling flattenSequenceOrSet.
1 parent 2924152 commit d3e3ed0

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

tc/core/polyhedral/schedule_tree.h

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -377,14 +377,12 @@ struct ScheduleTree {
377377

378378
template <typename... Args>
379379
static ScheduleTreeUPtr makeSet(Args&&... args) {
380-
return fromList<ScheduleTreeElemSet>(
381-
detail::ScheduleTreeType::Set, std::forward<Args>(args)...);
380+
return fromList<ScheduleTreeElemSet>(std::forward<Args>(args)...);
382381
}
383382

384383
template <typename... Args>
385384
static ScheduleTreeUPtr makeSequence(Args&&... args) {
386-
return fromList<ScheduleTreeElemSequence>(
387-
detail::ScheduleTreeType::Sequence, std::forward<Args>(args)...);
385+
return fromList<ScheduleTreeElemSequence>(std::forward<Args>(args)...);
388386
}
389387

390388
// Flatten nested nodes of the same type.
@@ -409,11 +407,11 @@ struct ScheduleTree {
409407

410408
// disallow empty lists in syntax
411409
template <typename T, typename Arg, typename... Args>
412-
static ScheduleTreeUPtr
413-
fromList(detail::ScheduleTreeType type, Arg&& arg, Args&&... args) {
410+
static ScheduleTreeUPtr fromList(Arg&& arg, Args&&... args) {
414411
static_assert(
415-
std::is_base_of<ScheduleTree, T>::value,
416-
"Can only construct elements derived from ScheduleTree");
412+
std::is_same<ScheduleTreeElemSet, T>::value ||
413+
std::is_same<ScheduleTreeElemSequence, T>::value,
414+
"Can only construct Set or Sequence elements");
417415
static_assert(
418416
std::is_same<
419417
typename std::remove_reference<Arg>::type,
@@ -424,11 +422,7 @@ struct ScheduleTree {
424422
auto res = ScheduleTreeUPtr(new T(ctx));
425423
res->appendChildren(
426424
vectorFromArgs(std::forward<Arg>(arg), std::forward<Args>(args)...));
427-
428-
if (type == detail::ScheduleTreeType::Sequence ||
429-
type == detail::ScheduleTreeType::Set) {
430-
res->flattenSequenceOrSet();
431-
}
425+
res->flattenSequenceOrSet();
432426
return res;
433427
}
434428

0 commit comments

Comments
 (0)