From: 박종현/동작제어Lab(SR)/Staff Engineer/삼성전자 Date: Thu, 11 Oct 2018 03:59:29 +0000 (+0900) Subject: [enco] Introduce PadInstrBuilder (#1825) X-Git-Tag: nncc_backup~1561 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cee952c3e427107445c94d14d5e16e3e8f7d8bcf;p=platform%2Fcore%2Fml%2Fnnfw.git [enco] Introduce PadInstrBuilder (#1825) This commit extracts PadF instruction generation routine as PadInstrBuilder class, and simplifies AvgPoolRewritePass using it. Signed-off-by: Jonghyun Park --- diff --git a/contrib/enco/core/src/Transforms/AvgPoolLowering.cpp b/contrib/enco/core/src/Transforms/AvgPoolLowering.cpp index afbad10..cb20aeb 100644 --- a/contrib/enco/core/src/Transforms/AvgPoolLowering.cpp +++ b/contrib/enco/core/src/Transforms/AvgPoolLowering.cpp @@ -74,6 +74,48 @@ ShapeTransform::Pad shape_xform(const coco::Padding2D *pad) { return ShapeTransf } // namespace +namespace +{ + +class PadInstrBuilder final +{ +public: + PadInstrBuilder(const coco::Padding2D *pad) : _pad{pad} + { + // DO NOTHING + } + +public: + coco::Instr *build(coco::FeatureObject *ifm_obj, coco::FeatureObject *ofm_obj) const + { + assert(ifm_obj->module() == ofm_obj->module()); + auto m = ifm_obj->module(); + assert(m != nullptr); + + auto pad_op = m->entity()->op()->create(); + + pad_op->pad()->top(_pad->top()); + pad_op->pad()->bottom(_pad->bottom()); + pad_op->pad()->left(_pad->left()); + pad_op->pad()->right(_pad->right()); + + auto pad_instr = m->entity()->instr()->create(); + + pad_instr->ifm(ifm_obj); + pad_instr->ofm(ofm_obj); + pad_instr->op(pad_op); + + return pad_instr; + } + +private: + const coco::Padding2D *_pad; +}; + +PadInstrBuilder pad_instr_builder(const coco::Padding2D *pad) { return PadInstrBuilder{pad}; } + +} // namespace + namespace enco { @@ -111,18 +153,7 @@ void AvgPoolRewritePass::runOnModule(coco::Module *m) const pad_obj->bag(pad_bag); pad_obj->layout(coco::FeatureLayouts::BHWC::create(pad_shape)); - auto pad_op = m->entity()->op()->create(); - - pad_op->pad()->top(avgpool->pad()->top()); - pad_op->pad()->bottom(avgpool->pad()->bottom()); - pad_op->pad()->left(avgpool->pad()->left()); - pad_op->pad()->right(avgpool->pad()->right()); - - auto pad_instr = m->entity()->instr()->create(); - - pad_instr->ifm(ifm_obj); - pad_instr->ofm(pad_obj); - pad_instr->op(pad_op); + auto pad_instr = pad_instr_builder(avgpool->pad()).build(ifm_obj, pad_obj); // Insert PadF before AvgPool2D pad_instr->insertBefore(unit);