[loco] Introduce Node.opnum API (#4004)
author박종현/On-Device Lab(SR)/Staff Engineer/삼성전자 <jh1302.park@samsung.com>
Thu, 27 Jun 2019 07:14:49 +0000 (16:14 +0900)
committerGitHub Enterprise <noreply-CODE@samsung.com>
Thu, 27 Jun 2019 07:14:49 +0000 (16:14 +0900)
This opnum API allows us to check the type of nodes without using
dynamic_cast.

Signed-off-by: Jonghyun Park <jh1302.park@samsung.com>
contrib/loco/include/loco/IR/CanonicalNode.h
contrib/loco/include/loco/IR/Node.h
contrib/loco/src/IR/MockupNode.h
contrib/loco/src/IR/Node.test.cpp

index 99a13e9..38a24a2 100644 (file)
@@ -40,6 +40,7 @@ template <CanonicalOpcode Code> struct CanonicalNodeImpl : public CanonicalNode
 {
   virtual ~CanonicalNodeImpl() = default;
 
+  uint32_t opnum(void) const final { return static_cast<uint32_t>(Code); }
   CanonicalOpcode opcode(void) const final { return Code; }
 };
 
index f8219e3..c436478 100644 (file)
@@ -70,6 +70,8 @@ public:
    */
   virtual const Dialect *dialect(void) const = 0;
 
+  virtual uint32_t opnum(void) const = 0;
+
 public:
   /// @brief Return the number of arguments
   virtual uint32_t arity(void) const = 0;
index 184c30f..ec56c90 100644 (file)
@@ -40,6 +40,7 @@ public:
 
 public:
   const loco::Dialect *dialect(void) const final { return MockDialect::get(); }
+  uint32_t opnum(void) const final { return 0; }
 
   uint32_t arity(void) const final { return 1; }
   Node *arg(uint32_t N) const final { return _arg.node(); }
index cc879e7..61d0931 100644 (file)
@@ -81,6 +81,7 @@ TEST(FixedArityNodeTest, constructor)
   struct DerivedNode final : public loco::FixedArityNode<1, loco::Node>
   {
     loco::Dialect *dialect(void) const final { return MockDialect::get(); }
+    uint32_t opnum(void) const final { return 0; }
   };
 
   DerivedNode node;