From: 박세희/On-Device Lab(SR)/Principal Engineer/삼성전자 Date: Mon, 5 Aug 2019 07:35:00 +0000 (+0900) Subject: [loco] EltwiseSub IR (#6203) X-Git-Tag: submit/tizen/20190809.050447~177 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d6a7dfe253456f30693309fc42069e339d40e5a3;p=platform%2Fcore%2Fml%2Fnnfw.git [loco] EltwiseSub IR (#6203) * [loco] EltwiseSub IR This will introduce canonical EltwiseSub IR Signed-off-by: SaeHie Park * todo cmt for shape inference --- diff --git a/compiler/loco/include/loco/IR/CanonicalNodes.lst b/compiler/loco/include/loco/IR/CanonicalNodes.lst index 6ac903d..b87b2e2 100644 --- a/compiler/loco/include/loco/IR/CanonicalNodes.lst +++ b/compiler/loco/include/loco/IR/CanonicalNodes.lst @@ -15,6 +15,7 @@ CANONICAL_NODE(DepthwiseConv2D, DepthwiseConv2D) CANONICAL_NODE(DepthwiseFilterEncode, DepthwiseFilterEncode) CANONICAL_NODE(EltwiseAdd, EltwiseAdd) CANONICAL_NODE(EltwiseMul, EltwiseMul) +CANONICAL_NODE(EltwiseSub, EltwiseSub) CANONICAL_NODE(FeatureBiasAdd, BiasAdd) CANONICAL_NODE(FeatureDecode, FeatureDecode) CANONICAL_NODE(FeatureEncode, FeatureEncode) diff --git a/compiler/loco/include/loco/IR/Nodes.h b/compiler/loco/include/loco/IR/Nodes.h index df2b060..740cc0d 100644 --- a/compiler/loco/include/loco/IR/Nodes.h +++ b/compiler/loco/include/loco/IR/Nodes.h @@ -656,6 +656,22 @@ public: void rhs(Node *node) { return at(1)->node(node); } }; +/** + * @brief Elementwise Sub lhs and rhs + */ +class EltwiseSub final : public CanonicalNodeDef::Mixin> +{ +public: + EltwiseSub() = 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 add26af..025ca89 100644 --- a/compiler/loco/src/IR/Nodes.test.cpp +++ b/compiler/loco/src/IR/Nodes.test.cpp @@ -436,3 +436,10 @@ TEST(EltwiseMulTest, constructor) SUCCEED(); } + +TEST(EltwiseSubTest, constructor) +{ + loco::EltwiseSub eltwise_sub; + + SUCCEED(); +} diff --git a/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp b/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp index d76868d..348e54f 100644 --- a/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp +++ b/compiler/loco/src/Service/CanonicalShapeInferenceRule.cpp @@ -48,6 +48,7 @@ public: // TODO Support DepthwiseFilterEncode // TODO Support EltwiseAdd // TODO Support EltwiseMul + // TODO Support EltwiseSub // TODO Support Forward // TODO Support FeatureBiasAdd diff --git a/compiler/loco/src/Service/TypeInference.cpp b/compiler/loco/src/Service/TypeInference.cpp index 6eb9f6f..67e3c33 100644 --- a/compiler/loco/src/Service/TypeInference.cpp +++ b/compiler/loco/src/Service/TypeInference.cpp @@ -102,6 +102,7 @@ struct CanonicalTypeForwardAlgorithm final : public loco::CanonicalNodeVisitorlhs()); } 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 loco::DataType visit(const loco::FeatureBiasAdd *node) { return loco::dtype_get(node->value()); } loco::DataType visit(const loco::FeatureDecode *node) { return loco::dtype_get(node->input()); }