[exo] Set FusedActivation for sub and div (#8405)
author남궁석/On-Device Lab(SR)/Engineer/삼성전자 <sk.namkoong@samsung.com>
Wed, 23 Oct 2019 03:11:03 +0000 (12:11 +0900)
committer박세희/On-Device Lab(SR)/Principal Engineer/삼성전자 <saehie.park@samsung.com>
Wed, 23 Oct 2019 03:11:03 +0000 (12:11 +0900)
This commit will set fusedActivationFunction for `sub` and `div`

Signed-off-by: Seok NamKoong <sk.namkoong@samsung.com>
compiler/exo/src/Conversion/EltwiseBinaryConverter.h
compiler/exo/src/Dialect/IR/TFLNodes.h
compiler/exo/src/TFLite/TFLOperationExporter.cpp

index 71447de..3dc5afa 100644 (file)
@@ -41,14 +41,14 @@ template <> inline void init_fused_act_func(locoex::TFLMul *node)
   node->fusedActivationFunction(locoex::FusedActFunc::NONE);
 }
 
-template <> inline void init_fused_act_func(locoex::TFLSub *)
+template <> inline void init_fused_act_func(locoex::TFLSub *node)
 {
-  /* TFLSub does not have fused activation function. Thus, nothing to do */
+  node->fusedActivationFunction(locoex::FusedActFunc::NONE);
 }
 
-template <> inline void init_fused_act_func(locoex::TFLDiv *)
+template <> inline void init_fused_act_func(locoex::TFLDiv *node)
 {
-  /* TFLDic does not have fused activation function. Thus, nothing to do */
+  node->fusedActivationFunction(locoex::FusedActFunc::NONE);
 }
 
 } // namespace
index d3be06c..7403d4a 100644 (file)
@@ -299,7 +299,8 @@ private:
 /**
  * @brief DIV in TensorFlow Lite
  */
-class TFLDiv final : public FixedArityNode<2, TFLNodeImpl<TFLOpcode::DIV>>
+class TFLDiv final : public FixedArityNode<2, TFLNodeImpl<TFLOpcode::DIV>>,
+                     public TFLNodeMixin<TFLNodeTrait::FusedActFunc>
 {
 public:
   TFLDiv() = default;
@@ -383,7 +384,8 @@ public:
 /**
  * @brief SUB in TensorFlow Lite
  */
-class TFLSub final : public FixedArityNode<2, TFLNodeImpl<TFLOpcode::SUB>>
+class TFLSub final : public FixedArityNode<2, TFLNodeImpl<TFLOpcode::SUB>>,
+                     public TFLNodeMixin<TFLNodeTrait::FusedActFunc>
 {
 public:
   TFLSub() = default;
index 8f1299c..8c96d13 100644 (file)
@@ -201,7 +201,7 @@ void OperationExporter::visit(locoex::TFLDiv *node)
   std::vector<int32_t> outputs_vec{get_tensor_index(static_cast<loco::Node *>(node))};
   auto inputs = builder.CreateVector(inputs_vec);
   auto outputs = builder.CreateVector(outputs_vec);
-  auto options = CreateDivOptions(builder); // dummy option
+  auto options = CreateDivOptions(builder, to_tflite_actfunc(node->fusedActivationFunction()));
   auto op_offset = CreateOperator(builder, op_idx, inputs, outputs,
                                   tflite::BuiltinOptions_DivOptions, options.Union());
   gd._operators.push_back(op_offset);
@@ -260,7 +260,7 @@ void OperationExporter::visit(locoex::TFLSub *node)
   std::vector<int32_t> outputs_vec{get_tensor_index(static_cast<loco::Node *>(node))};
   auto inputs = builder.CreateVector(inputs_vec);
   auto outputs = builder.CreateVector(outputs_vec);
-  auto options = CreateSubOptions(builder); // dummy option
+  auto options = CreateSubOptions(builder, to_tflite_actfunc(node->fusedActivationFunction()));
   auto op_offset = CreateOperator(builder, op_idx, inputs, outputs,
                                   tflite::BuiltinOptions_SubOptions, options.Union());
   gd._operators.push_back(op_offset);