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

Commit c4e612c

Browse files
committed
ScheduleTreeThreadSpecificMarker: introduce (static) copy constructor
Unlike other schedule tree node types, ScheduleTreeThreadSpecificMarker did not have a custom copy constructor since it was added in e1db3a9 (insert thread specific markers, Thu Apr 19 15:07:33 2018 +0200). Introduce a private copy constructor to ScheduleTreeThreadSpecificMarker, along with the static member function that returns a copy of the given ScheduleTreeThreadSpecificMarker wrapped in a unique pointer to force the caller only keep unique pointers to schedule node trees. This commit completes the removal of public constructors from schedule node types and removes the code that became unnecessary.
1 parent b66ba3e commit c4e612c

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

tc/core/polyhedral/schedule_tree.cc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,6 @@ vector<ScheduleTree*> ancestorsInSubTree(
124124
}
125125

126126
static std::unique_ptr<ScheduleTree> makeElem(const ScheduleTree& st) {
127-
#define ELEM_MAKE_CASE(CLASS) \
128-
else if (st.type_ == CLASS::NodeType) { \
129-
return std::unique_ptr<CLASS>(new CLASS(static_cast<const CLASS&>(st))); \
130-
}
131-
132127
#define ELEM_MAKE_CASE_CSTR(CLASS) \
133128
else if (st.type_ == CLASS::NodeType) { \
134129
return CLASS::make(static_cast<const CLASS*>(&st)); \
@@ -145,10 +140,9 @@ static std::unique_ptr<ScheduleTree> makeElem(const ScheduleTree& st) {
145140
ELEM_MAKE_CASE_CSTR(ScheduleTreeMapping)
146141
ELEM_MAKE_CASE_CSTR(ScheduleTreeSequence)
147142
ELEM_MAKE_CASE_CSTR(ScheduleTreeSet)
148-
ELEM_MAKE_CASE(ScheduleTreeThreadSpecificMarker)
143+
ELEM_MAKE_CASE_CSTR(ScheduleTreeThreadSpecificMarker)
149144

150145
#undef ELEM_MAKE_CASE_CSTR
151-
#undef ELEM_MAKE_CASE
152146

153147
LOG(FATAL) << "NYI: ScheduleTree from type: " << static_cast<int>(st.type_);
154148
return nullptr;

tc/core/polyhedral/schedule_tree_elem.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,16 @@ ScheduleTreeThreadSpecificMarker::make(
271271
return res;
272272
}
273273

274+
std::unique_ptr<ScheduleTreeThreadSpecificMarker>
275+
ScheduleTreeThreadSpecificMarker::make(
276+
const ScheduleTreeThreadSpecificMarker* tree,
277+
std::vector<ScheduleTreeUPtr>&& children) {
278+
auto res = std::unique_ptr<ScheduleTreeThreadSpecificMarker>(
279+
new ScheduleTreeThreadSpecificMarker(*tree));
280+
res->appendChildren(std::move(children));
281+
return res;
282+
}
283+
274284
bool ScheduleTreeBand::operator==(const ScheduleTreeBand& other) const {
275285
if (permutable_ != other.permutable_) {
276286
return false;

tc/core/polyhedral/schedule_tree_elem.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,8 @@ struct ScheduleTreeThreadSpecificMarker : public ScheduleTree {
332332
private:
333333
explicit ScheduleTreeThreadSpecificMarker(isl::ctx ctx)
334334
: ScheduleTree(ctx, {}, NodeType) {}
335+
ScheduleTreeThreadSpecificMarker(const ScheduleTreeThreadSpecificMarker& tree)
336+
: ScheduleTree(tree) {}
335337

336338
public:
337339
virtual ~ScheduleTreeThreadSpecificMarker() override {}
@@ -346,6 +348,9 @@ struct ScheduleTreeThreadSpecificMarker : public ScheduleTree {
346348
static std::unique_ptr<ScheduleTreeThreadSpecificMarker> make(
347349
isl::ctx ctx,
348350
std::vector<ScheduleTreeUPtr>&& children = {});
351+
static std::unique_ptr<ScheduleTreeThreadSpecificMarker> make(
352+
const ScheduleTreeThreadSpecificMarker* tree,
353+
std::vector<ScheduleTreeUPtr>&& children = {});
349354

350355
virtual std::ostream& write(std::ostream& os) const override;
351356
};

0 commit comments

Comments
 (0)