[coco] BlockList in Module (#769)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Tue, 24 Jul 2018 00:47:28 +0000 (09:47 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Tue, 24 Jul 2018 00:47:28 +0000 (09:47 +0900)
This commit revises Module interface to provide the head of a doubly
linked Block list.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/Module.h
contrib/coco/core/src/IR/Module.cpp
contrib/coco/core/src/IR/Module.test.cpp

index 980a0f6..5240e60 100644 (file)
@@ -2,6 +2,7 @@
 #define __COCO_IR_MODULE_H__
 
 #include  "coco/IR/EntityManager.h"
+#include "coco/IR/Block.h"
 #include "coco/IR/InputList.h"
 
 #include <memory>
@@ -29,6 +30,10 @@ public:
   virtual const EntityManager *entity(void) const = 0;
 
 public:
+  virtual BlockList *block(void) = 0;
+  virtual const BlockList *block(void) const = 0;
+
+public:
   virtual InputList *input(void) = 0;
   virtual const InputList *input(void) const = 0;
 
index d042749..2c96c56 100644 (file)
@@ -48,6 +48,13 @@ public:
   const coco::EntityManager *entity(void) const override { return _entity.get(); }
 
 public:
+  std::unique_ptr<coco::BlockList> _block;
+
+public:
+  coco::BlockList *block(void) override { return _block.get(); }
+  const coco::BlockList *block(void) const override { return _block.get(); }
+
+public:
   std::unique_ptr<coco::InputList> _input;
 
 public:
@@ -75,6 +82,8 @@ std::unique_ptr<Module> Module::create(void)
   }
   m->_entity = std::move(mgr);
 
+  // NOTE BlockManager and BlockList SHOULD share 'blk_link'
+  m->_block = nncc::foundation::make_unique<coco::BlockList>(m.get(), blk_link.get());
   m->_input = nncc::foundation::make_unique<coco::InputList>();
 
   m->_instr_link = std::move(ins_link);
index 4650292..c5eb505 100644 (file)
@@ -23,6 +23,9 @@ TEST(IR_MODULE, create)
   ASSERT_NE(mutable_m->entity()->input(), nullptr);
   ASSERT_EQ(immutable_m->entity()->input(), mutable_m->entity()->input());
 
+  ASSERT_NE(mutable_m->block(), nullptr);
+  ASSERT_EQ(immutable_m->block(), mutable_m->block());
+
   ASSERT_NE(mutable_m->input(), nullptr);
   ASSERT_EQ(immutable_m->input(), mutable_m->input());
 }