From c3486e9cba0db20cfaa7bec65704d56050a3b076 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=84=B8=ED=9D=AC/On-Device=20Lab=28SR=29/Princip?= =?utf8?q?al=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Tue, 6 Aug 2019 08:21:59 +0900 Subject: [PATCH] [loco] EltwiseDiv IR (#6229) This will introduce canonical EltwiseDiv IR Signed-off-by: SaeHie Park --- compiler/loco/include/loco/IR/CanonicalNodes.lst | 1 + compiler/loco/include/loco/IR/Nodes.h | 16 ++++++++++++++++ compiler/loco/src/IR/Nodes.test.cpp | 7 +++++++ .../loco/src/Service/CanonicalShapeInferenceRule.cpp | 1 + compiler/loco/src/Service/TypeInference.cpp | 1 + 5 files changed, 26 insertions(+) diff --git a/compiler/loco/include/loco/IR/CanonicalNodes.lst b/compiler/loco/include/loco/IR/CanonicalNodes.lst index b87b2e2..771dc35 100644 --- a/compiler/loco/include/loco/IR/CanonicalNodes.lst +++ b/compiler/loco/include/loco/IR/CanonicalNodes.lst @@ -14,6 +14,7 @@ CANONICAL_NODE(Conv2D, Conv2D) CANONICAL_NODE(DepthwiseConv2D, DepthwiseConv2D) CANONICAL_NODE(DepthwiseFilterEncode, DepthwiseFilterEncode) CANONICAL_NODE(EltwiseAdd, EltwiseAdd) +CANONICAL_NODE(EltwiseDiv, EltwiseDiv) CANONICAL_NODE(EltwiseMul, EltwiseMul) CANONICAL_NODE(EltwiseSub, EltwiseSub) CANONICAL_NODE(FeatureBiasAdd, BiasAdd) diff --git a/compiler/loco/include/loco/IR/Nodes.h b/compiler/loco/include/loco/IR/Nodes.h index 740cc0d..fd7c051 100644 --- a/compiler/loco/include/loco/IR/Nodes.h +++ b/compiler/loco/include/loco/IR/Nodes.h @@ -672,6 +672,22 @@ public: void rhs(Node *node) { return at(1)->node(node); } }; +/** + * @brief Elementwise Div lhs and rhs + */ +class EltwiseDiv final : public CanonicalNodeDef::Mixin> +{ +public: + EltwiseDiv() = default; + +public: + Node *lhs(void) const { return at(0)->node(); } + void lhs(Node *node) { return at(0)->node(node); } + + Node *rhs(void) const { return at(1)->node(); } + void rhs(Node *node) { return at(1)->node(node); } +}; + } // namespace loco #endif // __LOCO_IR_NODES_H__ diff --git a/compiler/loco/src/IR/Nodes.test.cpp b/compiler/loco/src/IR/Nodes.test.cpp index 025ca89..06be67f 100644 --- a/compiler/loco/src/IR/Nodes.test.cpp +++ b/compiler/loco/src/IR/Nodes.test.cpp @@ -443,3 +443,10 @@ TEST(EltwiseSubTest, constructor) SUCCEED(); } + +TEST(EltwiseDivTest, constructor) +{ + loco::EltwiseDiv eltwise_div; + + SUCCEED(); +} diff --git a/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp b/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp index ae1df7b..98d4d75 100644 --- a/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp +++ b/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp @@ -47,6 +47,7 @@ public: // TODO Support DepthwiseConv2D // TODO Support DepthwiseFilterEncode // TODO Support EltwiseAdd + // TODO Support EltwiseDiv // TODO Support EltwiseMul // TODO Support EltwiseSub // TODO Support Forward diff --git a/compiler/loco/src/Service/TypeInference.cpp b/compiler/loco/src/Service/TypeInference.cpp index 67e3c33..7e70f48 100644 --- a/compiler/loco/src/Service/TypeInference.cpp +++ b/compiler/loco/src/Service/TypeInference.cpp @@ -101,6 +101,7 @@ struct CanonicalTypeForwardAlgorithm final : public loco::CanonicalNodeVisitorlhs()); } + loco::DataType visit(const loco::EltwiseDiv *node) { return loco::dtype_get(node->lhs()); } loco::DataType visit(const loco::EltwiseMul *node) { return loco::dtype_get(node->lhs()); } loco::DataType visit(const loco::EltwiseSub *node) { return loco::dtype_get(node->lhs()); } // TODO Support Forward -- 2.7.4