[coco] Introduce Locatable interface (#1059)
author박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Fri, 17 Aug 2018 05:12:34 +0000 (14:12 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Fri, 17 Aug 2018 05:12:34 +0000 (14:12 +0900)
This commit introduces Locatable interface, which allows us to get a
location (as an instruction) on the code; This class serves as a base
class for Bag::Read, Bag::Update, Object::Def, and Object::Use.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/coco/core/include/coco/IR/Bag.h
contrib/coco/core/include/coco/IR/Instr.h
contrib/coco/core/include/coco/IR/Locatable.h [new file with mode: 0644]
contrib/coco/core/include/coco/IR/Op.h
contrib/coco/core/src/IR/Def.mock.h
contrib/coco/core/src/IR/Instr.test.cpp
contrib/coco/core/src/IR/Use.mock.h

index 2ec9182..4eb45fc 100644 (file)
@@ -4,6 +4,7 @@
 #include "coco/IR/BagInfo.forward.h"
 
 #include "coco/IR/ObjectSet.h"
+#include "coco/IR/Locatable.h"
 
 #include <set>
 
@@ -26,14 +27,14 @@ namespace coco
 class Bag
 {
 public:
-  struct Update
+  struct Update : public Locatable
   {
     virtual ~Update() = default;
   };
 
   using UpdateSet = std::set<Update *>;
 
-  struct Read
+  struct Read : public Locatable
   {
     virtual ~Read() = default;
   };
index 5f5dde0..f061335 100644 (file)
@@ -203,6 +203,9 @@ public:
   std::set<Bag *> reads(void) const override;
   std::set<Bag *> updates(void) const override;
 
+public:
+  Instr *loc(void) override { return this; }
+
 private:
   PtrLink<Op, Instr> *const _op_link;
   const PtrLink<Instr, Block> *const _link;
diff --git a/contrib/coco/core/include/coco/IR/Locatable.h b/contrib/coco/core/include/coco/IR/Locatable.h
new file mode 100644 (file)
index 0000000..dc11a9a
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef __COCO_IR_LOCATABLE_H__
+#define __COCO_IR_LOCATABLE_H__
+
+#include "coco/IR/Instr.forward.h"
+
+namespace coco
+{
+
+struct Locatable
+{
+  virtual ~Locatable() = default;
+
+  virtual Instr *loc(void) = 0;
+};
+
+} // namespace coco
+
+#endif // __COCO_IR_LOCATABLE_H__
index bad67f9..fc032c4 100644 (file)
@@ -104,6 +104,9 @@ public:
   Conv2D *asConv2D(void) override { return this; }
   const Conv2D *asConv2D(void) const override { return this; }
 
+public:
+  Instr *loc(void) override { return parent(); }
+
 private:
   UseSlot<KernelObject> _ker;
 
index 9e522ca..0efbf48 100644 (file)
@@ -9,6 +9,7 @@ namespace mock
 {
 struct Def final : public coco::Object::Def
 {
+  coco::Instr *loc(void) override { return nullptr; }
 };
 } // namespace mock
 } // namespace
index e39ebbe..a900504 100644 (file)
@@ -52,6 +52,9 @@ private:
 public:
   std::set<coco::Bag *> reads(void) const override { return std::set<coco::Bag *>(); }
   std::set<coco::Bag *> updates(void) const override { return std::set<coco::Bag *>(); }
+
+public:
+  coco::Instr *loc(void) override { return this; }
 };
 } // namespace mock
 } // namespace
index 830ffdd..0d8e8de 100644 (file)
@@ -9,6 +9,7 @@ namespace mock
 {
 struct Use final : public coco::Object::Use
 {
+  coco::Instr *loc(void) override { return nullptr; }
 };
 } // namespace mock
 } // namespace