From a9b8cd6d913ba83b2651f9a404ed54b65fd10832 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=EB=B0=95=EC=A2=85=ED=98=84/On-Device=20Lab=28SR=29/Staff?= =?utf8?q?=20Engineer/=EC=82=BC=EC=84=B1=EC=A0=84=EC=9E=90?= Date: Mon, 26 Aug 2019 13:48:04 +0900 Subject: [PATCH] [moco-tf] Introduce FixedArityNode (#6907) This commit introduces moco-tf internal FixedArityNode class as the first step to remove FixedArityNode from loco. Signed-off-by: Jonghyun Park --- compiler/moco-tf/src/Dialect/TFNodeDecl.h | 39 +++++++++++++++++++++++ compiler/moco-tf/src/IR/TFAdd.h | 2 +- compiler/moco-tf/src/IR/TFAvgPool.h | 2 +- compiler/moco-tf/src/IR/TFBiasAdd.h | 2 +- compiler/moco-tf/src/IR/TFConst.h | 2 +- compiler/moco-tf/src/IR/TFConv2D.h | 2 +- compiler/moco-tf/src/IR/TFDepthwiseConv2dNative.h | 2 +- compiler/moco-tf/src/IR/TFFusedBatchNorm.h | 2 +- compiler/moco-tf/src/IR/TFIdentity.h | 2 +- compiler/moco-tf/src/IR/TFMaxPool.h | 2 +- compiler/moco-tf/src/IR/TFMul.h | 2 +- compiler/moco-tf/src/IR/TFRealDiv.h | 2 +- compiler/moco-tf/src/IR/TFRelu.h | 2 +- compiler/moco-tf/src/IR/TFRelu6.h | 2 +- compiler/moco-tf/src/IR/TFReshape.h | 2 +- compiler/moco-tf/src/IR/TFRsqrt.h | 2 +- compiler/moco-tf/src/IR/TFShape.h | 2 +- compiler/moco-tf/src/IR/TFSoftmax.h | 2 +- compiler/moco-tf/src/IR/TFSqrt.h | 2 +- compiler/moco-tf/src/IR/TFSquaredDifference.h | 3 +- compiler/moco-tf/src/IR/TFSqueeze.h | 2 +- compiler/moco-tf/src/IR/TFStopGradient.h | 2 +- compiler/moco-tf/src/IR/TFSub.h | 2 +- compiler/moco-tf/src/IR/TFTanh.h | 2 +- 24 files changed, 62 insertions(+), 24 deletions(-) diff --git a/compiler/moco-tf/src/Dialect/TFNodeDecl.h b/compiler/moco-tf/src/Dialect/TFNodeDecl.h index 0e9ba0c..922165b 100644 --- a/compiler/moco-tf/src/Dialect/TFNodeDecl.h +++ b/compiler/moco-tf/src/Dialect/TFNodeDecl.h @@ -23,6 +23,8 @@ #include "TFOpcode.h" #include "TFNodeVisitor.forward.h" +#include + namespace moco { namespace tf @@ -51,6 +53,43 @@ template struct TFNodeImpl : public TFNode TFOpcode opcode(void) const final { return Code; } }; +/** + * @brief Nodes with the fixed number of inputs + */ +template class FixedArityNode : public Base +{ +public: + FixedArityNode() + { + for (uint32_t n = 0; n < N; ++n) + { + _args[n] = std::unique_ptr{new loco::Use{this}}; + } + } + + virtual ~FixedArityNode() = default; + +public: + unsigned arity(void) const final { return N; } + + loco::Node *arg(uint32_t n) const final { return _args.at(n)->node(); } + + void drop(void) final + { + for (uint32_t n = 0; n < N; ++n) + { + _args.at(n)->node(nullptr); + } + } + +protected: + // This API allows inherited classes to access "_args" field. + loco::Use *at(unsigned n) const { return _args.at(n).get(); } + +private: + std::array, N> _args; +}; + } // namespace tf } // namespace moco diff --git a/compiler/moco-tf/src/IR/TFAdd.h b/compiler/moco-tf/src/IR/TFAdd.h index 7042630..d2489fb 100644 --- a/compiler/moco-tf/src/IR/TFAdd.h +++ b/compiler/moco-tf/src/IR/TFAdd.h @@ -40,7 +40,7 @@ node { } */ -class TFAdd final : public loco::FixedArityNode<2, TFNodeImpl> +class TFAdd final : public FixedArityNode<2, TFNodeImpl> { public: TFAdd() = default; diff --git a/compiler/moco-tf/src/IR/TFAvgPool.h b/compiler/moco-tf/src/IR/TFAvgPool.h index a562594..93a72bb 100644 --- a/compiler/moco-tf/src/IR/TFAvgPool.h +++ b/compiler/moco-tf/src/IR/TFAvgPool.h @@ -69,7 +69,7 @@ node { } */ -class TFAvgPool final : public loco::FixedArityNode<1, TFNodeImpl> +class TFAvgPool final : public FixedArityNode<1, TFNodeImpl> { public: TFAvgPool() = default; diff --git a/compiler/moco-tf/src/IR/TFBiasAdd.h b/compiler/moco-tf/src/IR/TFBiasAdd.h index 58f47e2..468e02d 100644 --- a/compiler/moco-tf/src/IR/TFBiasAdd.h +++ b/compiler/moco-tf/src/IR/TFBiasAdd.h @@ -46,7 +46,7 @@ node { } */ -class TFBiasAdd final : public loco::FixedArityNode<2, TFNodeImpl> +class TFBiasAdd final : public FixedArityNode<2, TFNodeImpl> { public: TFBiasAdd() = default; diff --git a/compiler/moco-tf/src/IR/TFConst.h b/compiler/moco-tf/src/IR/TFConst.h index a44ecad..b63d37d 100644 --- a/compiler/moco-tf/src/IR/TFConst.h +++ b/compiler/moco-tf/src/IR/TFConst.h @@ -62,7 +62,7 @@ node { * @note Implementation for this class came from Canonical ConstGen * Read comments in loco::ConstGen for details */ -class TFConst final : public loco::FixedArityNode<0, TFNodeImpl>, +class TFConst final : public FixedArityNode<0, TFNodeImpl>, public loco::NodeMixin, public loco::NodeMixin { diff --git a/compiler/moco-tf/src/IR/TFConv2D.h b/compiler/moco-tf/src/IR/TFConv2D.h index a433ff6..e061d2b 100644 --- a/compiler/moco-tf/src/IR/TFConv2D.h +++ b/compiler/moco-tf/src/IR/TFConv2D.h @@ -30,7 +30,7 @@ namespace moco namespace tf { -class TFConv2D final : public loco::FixedArityNode<2, TFNodeImpl> +class TFConv2D final : public FixedArityNode<2, TFNodeImpl> { public: loco::Node *ifm(void) const { return at(0)->node(); } diff --git a/compiler/moco-tf/src/IR/TFDepthwiseConv2dNative.h b/compiler/moco-tf/src/IR/TFDepthwiseConv2dNative.h index 6eadaa8..2e9c7c9 100644 --- a/compiler/moco-tf/src/IR/TFDepthwiseConv2dNative.h +++ b/compiler/moco-tf/src/IR/TFDepthwiseConv2dNative.h @@ -33,7 +33,7 @@ namespace tf { class TFDepthwiseConv2dNative final - : public loco::FixedArityNode<2, TFNodeImpl> + : public FixedArityNode<2, TFNodeImpl> { public: loco::Node *ifm(void) const { return at(0)->node(); } diff --git a/compiler/moco-tf/src/IR/TFFusedBatchNorm.h b/compiler/moco-tf/src/IR/TFFusedBatchNorm.h index 6a9e0c5..297f439 100644 --- a/compiler/moco-tf/src/IR/TFFusedBatchNorm.h +++ b/compiler/moco-tf/src/IR/TFFusedBatchNorm.h @@ -24,7 +24,7 @@ namespace moco namespace tf { -class TFFusedBatchNorm final : public loco::FixedArityNode<5, TFNodeImpl> +class TFFusedBatchNorm final : public FixedArityNode<5, TFNodeImpl> { public: TFFusedBatchNorm() = default; diff --git a/compiler/moco-tf/src/IR/TFIdentity.h b/compiler/moco-tf/src/IR/TFIdentity.h index a1ef1c8..9eeab8d 100644 --- a/compiler/moco-tf/src/IR/TFIdentity.h +++ b/compiler/moco-tf/src/IR/TFIdentity.h @@ -39,7 +39,7 @@ node { } */ -class TFIdentity final : public loco::FixedArityNode<1, TFNodeImpl> +class TFIdentity final : public FixedArityNode<1, TFNodeImpl> { public: TFIdentity() = default; diff --git a/compiler/moco-tf/src/IR/TFMaxPool.h b/compiler/moco-tf/src/IR/TFMaxPool.h index 847e85d..14dae70 100644 --- a/compiler/moco-tf/src/IR/TFMaxPool.h +++ b/compiler/moco-tf/src/IR/TFMaxPool.h @@ -69,7 +69,7 @@ node { } */ -class TFMaxPool final : public loco::FixedArityNode<1, TFNodeImpl> +class TFMaxPool final : public FixedArityNode<1, TFNodeImpl> { public: TFMaxPool() = default; diff --git a/compiler/moco-tf/src/IR/TFMul.h b/compiler/moco-tf/src/IR/TFMul.h index 5390612..95826f0 100644 --- a/compiler/moco-tf/src/IR/TFMul.h +++ b/compiler/moco-tf/src/IR/TFMul.h @@ -40,7 +40,7 @@ node { } */ -class TFMul final : public loco::FixedArityNode<2, TFNodeImpl> +class TFMul final : public FixedArityNode<2, TFNodeImpl> { public: TFMul() = default; diff --git a/compiler/moco-tf/src/IR/TFRealDiv.h b/compiler/moco-tf/src/IR/TFRealDiv.h index 16bbb10..8ef3786 100644 --- a/compiler/moco-tf/src/IR/TFRealDiv.h +++ b/compiler/moco-tf/src/IR/TFRealDiv.h @@ -40,7 +40,7 @@ node { } */ -class TFRealDiv final : public loco::FixedArityNode<2, TFNodeImpl> +class TFRealDiv final : public FixedArityNode<2, TFNodeImpl> { public: TFRealDiv() = default; diff --git a/compiler/moco-tf/src/IR/TFRelu.h b/compiler/moco-tf/src/IR/TFRelu.h index cbcc227..7df958b 100644 --- a/compiler/moco-tf/src/IR/TFRelu.h +++ b/compiler/moco-tf/src/IR/TFRelu.h @@ -24,7 +24,7 @@ namespace moco namespace tf { -class TFRelu final : public loco::FixedArityNode<1, TFNodeImpl> +class TFRelu final : public FixedArityNode<1, TFNodeImpl> { public: TFRelu() = default; diff --git a/compiler/moco-tf/src/IR/TFRelu6.h b/compiler/moco-tf/src/IR/TFRelu6.h index 360c2de..eba83a9 100644 --- a/compiler/moco-tf/src/IR/TFRelu6.h +++ b/compiler/moco-tf/src/IR/TFRelu6.h @@ -24,7 +24,7 @@ namespace moco namespace tf { -class TFRelu6 final : public loco::FixedArityNode<1, TFNodeImpl> +class TFRelu6 final : public FixedArityNode<1, TFNodeImpl> { public: TFRelu6() = default; diff --git a/compiler/moco-tf/src/IR/TFReshape.h b/compiler/moco-tf/src/IR/TFReshape.h index 7b8fb4a..4359a49 100644 --- a/compiler/moco-tf/src/IR/TFReshape.h +++ b/compiler/moco-tf/src/IR/TFReshape.h @@ -38,7 +38,7 @@ node { } */ -class TFReshape final : public loco::FixedArityNode<2, TFNodeImpl> +class TFReshape final : public FixedArityNode<2, TFNodeImpl> { public: TFReshape() = default; diff --git a/compiler/moco-tf/src/IR/TFRsqrt.h b/compiler/moco-tf/src/IR/TFRsqrt.h index f03f36d..f371e39 100644 --- a/compiler/moco-tf/src/IR/TFRsqrt.h +++ b/compiler/moco-tf/src/IR/TFRsqrt.h @@ -39,7 +39,7 @@ node { } */ -class TFRsqrt final : public loco::FixedArityNode<1, TFNodeImpl> +class TFRsqrt final : public FixedArityNode<1, TFNodeImpl> { public: TFRsqrt() = default; diff --git a/compiler/moco-tf/src/IR/TFShape.h b/compiler/moco-tf/src/IR/TFShape.h index a932cd2..d50cabf 100644 --- a/compiler/moco-tf/src/IR/TFShape.h +++ b/compiler/moco-tf/src/IR/TFShape.h @@ -46,7 +46,7 @@ node { */ /// @note Mixed in dtype() is for 'out_type' attribute -class TFShape final : public loco::FixedArityNode<1, TFNodeImpl>, +class TFShape final : public FixedArityNode<1, TFNodeImpl>, public loco::NodeMixin { public: diff --git a/compiler/moco-tf/src/IR/TFSoftmax.h b/compiler/moco-tf/src/IR/TFSoftmax.h index 15e3ef0..22b7b9e 100644 --- a/compiler/moco-tf/src/IR/TFSoftmax.h +++ b/compiler/moco-tf/src/IR/TFSoftmax.h @@ -24,7 +24,7 @@ namespace moco namespace tf { -class TFSoftmax final : public loco::FixedArityNode<1, TFNodeImpl> +class TFSoftmax final : public FixedArityNode<1, TFNodeImpl> { public: TFSoftmax() = default; diff --git a/compiler/moco-tf/src/IR/TFSqrt.h b/compiler/moco-tf/src/IR/TFSqrt.h index a95ff16..fda032e 100644 --- a/compiler/moco-tf/src/IR/TFSqrt.h +++ b/compiler/moco-tf/src/IR/TFSqrt.h @@ -39,7 +39,7 @@ node { } */ -class TFSqrt final : public loco::FixedArityNode<1, TFNodeImpl> +class TFSqrt final : public FixedArityNode<1, TFNodeImpl> { public: TFSqrt() = default; diff --git a/compiler/moco-tf/src/IR/TFSquaredDifference.h b/compiler/moco-tf/src/IR/TFSquaredDifference.h index b0d8051..83ecdb8 100644 --- a/compiler/moco-tf/src/IR/TFSquaredDifference.h +++ b/compiler/moco-tf/src/IR/TFSquaredDifference.h @@ -40,8 +40,7 @@ node { } */ -class TFSquaredDifference final - : public loco::FixedArityNode<2, TFNodeImpl> +class TFSquaredDifference final : public FixedArityNode<2, TFNodeImpl> { public: TFSquaredDifference() = default; diff --git a/compiler/moco-tf/src/IR/TFSqueeze.h b/compiler/moco-tf/src/IR/TFSqueeze.h index 5f30ea5..e986441 100644 --- a/compiler/moco-tf/src/IR/TFSqueeze.h +++ b/compiler/moco-tf/src/IR/TFSqueeze.h @@ -51,7 +51,7 @@ node { } */ -class TFSqueeze final : public loco::FixedArityNode<1, TFNodeImpl> +class TFSqueeze final : public FixedArityNode<1, TFNodeImpl> { public: TFSqueeze() = default; diff --git a/compiler/moco-tf/src/IR/TFStopGradient.h b/compiler/moco-tf/src/IR/TFStopGradient.h index d39f14e..4b8f1b8 100644 --- a/compiler/moco-tf/src/IR/TFStopGradient.h +++ b/compiler/moco-tf/src/IR/TFStopGradient.h @@ -39,7 +39,7 @@ node { } */ -class TFStopGradient final : public loco::FixedArityNode<1, TFNodeImpl> +class TFStopGradient final : public FixedArityNode<1, TFNodeImpl> { public: TFStopGradient() = default; diff --git a/compiler/moco-tf/src/IR/TFSub.h b/compiler/moco-tf/src/IR/TFSub.h index 00ebf44..5f4e48b 100644 --- a/compiler/moco-tf/src/IR/TFSub.h +++ b/compiler/moco-tf/src/IR/TFSub.h @@ -40,7 +40,7 @@ node { } */ -class TFSub final : public loco::FixedArityNode<2, TFNodeImpl> +class TFSub final : public FixedArityNode<2, TFNodeImpl> { public: TFSub() = default; diff --git a/compiler/moco-tf/src/IR/TFTanh.h b/compiler/moco-tf/src/IR/TFTanh.h index eebee4b..c85663e 100644 --- a/compiler/moco-tf/src/IR/TFTanh.h +++ b/compiler/moco-tf/src/IR/TFTanh.h @@ -24,7 +24,7 @@ namespace moco namespace tf { -class TFTanh final : public loco::FixedArityNode<1, TFNodeImpl> +class TFTanh final : public FixedArityNode<1, TFNodeImpl> { public: TFTanh() = default; -- 2.7.4