From a14e1306e224d3d4a4cd9f196597e7a7bbdbe1ca Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/=EB=8F=99=EC=9E=91=EC=A0=9C?= =?utf8?q?=EC=96=B4Lab=28SR=29/Staff=20Engineer/=EC=82=BC=EC=84=B1?= =?utf8?q?=EC=A0=84=EC=9E=90?= Date: Wed, 8 Aug 2018 17:32:58 +0900 Subject: [PATCH] [coco] Pass OpLink to Op/Instr Manager (#935) This commit revises Op/Instr Manager to take OpLink on construction. Note that OpLink passed ot Op/Instr Managers is not used, yet. Signed-off-by: Jonghyun Park --- contrib/coco/core/include/coco/IR/InstrManager.h | 6 +++++- contrib/coco/core/include/coco/IR/OpManager.h | 9 +++++++++ contrib/coco/core/src/IR/InstrManager.test.cpp | 3 ++- contrib/coco/core/src/IR/Module.cpp | 7 +++++-- contrib/coco/core/src/IR/OpManager.cpp | 5 +++++ contrib/coco/core/src/IR/OpManager.test.cpp | 3 ++- 6 files changed, 28 insertions(+), 5 deletions(-) diff --git a/contrib/coco/core/include/coco/IR/InstrManager.h b/contrib/coco/core/include/coco/IR/InstrManager.h index 1efafb7..50d2a84 100644 --- a/contrib/coco/core/include/coco/IR/InstrManager.h +++ b/contrib/coco/core/include/coco/IR/InstrManager.h @@ -2,8 +2,10 @@ #define __COCO_IR_INSTR_MANAGER_H__ #include "coco/IR/Instr.h" +#include "coco/IR/Op.forward.h" #include "coco/ADT/PtrManager.h" +#include "coco/ADT/PtrLink.h" namespace coco { @@ -11,7 +13,8 @@ namespace coco class InstrManager final : public PtrManager { public: - InstrManager(const PtrLink *instr_link) : _instr_link{instr_link} + InstrManager(PtrLink *op_link, const PtrLink *instr_link) + : _op_link{op_link}, _instr_link{instr_link} { // DO NOTHING } @@ -20,6 +23,7 @@ public: template Ins *create(void); private: + PtrLink *const _op_link; const PtrLink *const _instr_link; }; diff --git a/contrib/coco/core/include/coco/IR/OpManager.h b/contrib/coco/core/include/coco/IR/OpManager.h index d430398..bd6f1b4 100644 --- a/contrib/coco/core/include/coco/IR/OpManager.h +++ b/contrib/coco/core/include/coco/IR/OpManager.h @@ -2,15 +2,24 @@ #define __COCO_IR_OP_MANAGER_H__ #include "coco/IR/Op.h" +#include "coco/IR/Instr.forward.h" #include "coco/ADT/PtrManager.h" +#include "coco/ADT/PtrLink.h" namespace coco { struct OpManager : public PtrManager { +public: + OpManager(const PtrLink *op_link); + +public: Conv2D *create(const Conv2D::Param &); + +private: + const PtrLink *const _op_link; }; } // namespace coco diff --git a/contrib/coco/core/src/IR/InstrManager.test.cpp b/contrib/coco/core/src/IR/InstrManager.test.cpp index 70968c2..63befd0 100644 --- a/contrib/coco/core/src/IR/InstrManager.test.cpp +++ b/contrib/coco/core/src/IR/InstrManager.test.cpp @@ -5,8 +5,9 @@ TEST(IR_INSTR_MANAGER, create_UnitF) { + coco::PtrLink op_link; coco::PtrLink link; - coco::InstrManager mgr{&link}; + coco::InstrManager mgr{&op_link, &link}; // Conv2D { diff --git a/contrib/coco/core/src/IR/Module.cpp b/contrib/coco/core/src/IR/Module.cpp index 742e455..b486549 100644 --- a/contrib/coco/core/src/IR/Module.cpp +++ b/contrib/coco/core/src/IR/Module.cpp @@ -66,6 +66,7 @@ class ModuleImpl final : public coco::Module { public: std::unique_ptr> _bag_link; + std::unique_ptr> _op_link; std::unique_ptr> _instr_link; std::unique_ptr> _block_link; @@ -106,6 +107,7 @@ namespace coco std::unique_ptr Module::create(void) { auto bag_link = nncc::foundation::make_unique>(); + auto op_link = nncc::foundation::make_unique>(); auto ins_link = nncc::foundation::make_unique>(); auto blk_link = nncc::foundation::make_unique>(); @@ -115,8 +117,8 @@ std::unique_ptr Module::create(void) { mgr->_bag = nncc::foundation::make_unique(bag_link.get()); mgr->_object = nncc::foundation::make_unique(bag_link.get()); - mgr->_op = nncc::foundation::make_unique(); - mgr->_instr = nncc::foundation::make_unique(ins_link.get()); + mgr->_op = nncc::foundation::make_unique(op_link.get()); + mgr->_instr = nncc::foundation::make_unique(op_link.get(), ins_link.get()); mgr->_block = nncc::foundation::make_unique(blk_link.get(), ins_link.get()); mgr->_input = nncc::foundation::make_unique(bag_link.get()); mgr->_output = nncc::foundation::make_unique(bag_link.get()); @@ -129,6 +131,7 @@ std::unique_ptr Module::create(void) m->_output = nncc::foundation::make_unique(); m->_bag_link = std::move(bag_link); + m->_op_link = std::move(op_link); m->_instr_link = std::move(ins_link); m->_block_link = std::move(blk_link); diff --git a/contrib/coco/core/src/IR/OpManager.cpp b/contrib/coco/core/src/IR/OpManager.cpp index 8f19fb2..6c3b02c 100644 --- a/contrib/coco/core/src/IR/OpManager.cpp +++ b/contrib/coco/core/src/IR/OpManager.cpp @@ -7,6 +7,11 @@ using nncc::foundation::make_unique; namespace coco { +OpManager::OpManager(const PtrLink *op_link) : _op_link{op_link} +{ + // DO NOTHING +} + Conv2D *OpManager::create(const Conv2D::Param ¶m) { return take(make_unique(param)); } } // namespace coco diff --git a/contrib/coco/core/src/IR/OpManager.test.cpp b/contrib/coco/core/src/IR/OpManager.test.cpp index 9d4316b..74c14bd 100644 --- a/contrib/coco/core/src/IR/OpManager.test.cpp +++ b/contrib/coco/core/src/IR/OpManager.test.cpp @@ -4,7 +4,8 @@ TEST(IR_OP_MANAGER, create_Conv2D) { - coco::OpManager mgr; + coco::PtrLink op_link; + coco::OpManager mgr{&op_link}; coco::Conv2D::Param param; auto obj = mgr.create(param); -- 2.7.4