Transformer() = default;
~Transformer() = default;
+ void visit(mir::ops::AddOp &op) override;
void visit(mir::ops::BatchNormOp &op) override;
void visit(mir::ops::CappedReluOp &op) override;
void visit(mir::ops::ConcatOp &op) override;
void visit(mir::ops::DeConv2DOp &op) override;
void visit(mir::ops::DepthwiseConv2DOp &op) override;
void visit(mir::ops::DropoutOp &op) override;
- void visit(mir::ops::ElementwiseOp &op) override;
void visit(mir::ops::EluOp &op) override;
void visit(mir::ops::FullyConnectedOp &op) override;
void visit(mir::ops::GatherOp &op) override;
#include "mir2loco.h"
+#include "mir/ops/AddOp.h"
#include "mir/ops/ConcatOp.h"
#include "mir/ops/ConstantOp.h"
#include "mir/ops/Conv2DOp.h"
-#include "mir/ops/ElementwiseOp.h"
#include "mir/ops/PoolOp.h"
#include "mir/ops/ReluOp.h"
#include "mir/ops/ReshapeOp.h"
}
} // namespace
+void Transformer::visit(mir::ops::AddOp &op)
+{
+ // Get Input
+ auto lhs = _mir2loco_map.at(op.getInput(0)->getProducer()->getNode());
+ auto rhs = _mir2loco_map.at(op.getInput(1)->getProducer()->getNode());
+
+ auto result = _loco_graph->nodes()->create<loco::EltwiseAdd>();
+ result->lhs(lhs);
+ result->rhs(rhs);
+
+ // Not set Shape
+ // Add to map
+ _mir2loco_map.emplace(&op, result);
+}
+
void Transformer::visit(mir::ops::BatchNormOp &op) { throw std::runtime_error("NYI"); }
void Transformer::visit(mir::ops::CappedReluOp &op) { throw std::runtime_error("NYI"); }
void Transformer::visit(mir::ops::DropoutOp &op) { throw std::runtime_error("NYI"); }
-void Transformer::visit(mir::ops::ElementwiseOp &op)
-{
- // TODO Currently, MIR supports arbitrary number of inputs (>= 2).
- if (op.getNumInputs() != 2)
- throw std::runtime_error("NYI");
-
- // Get Input
- auto lhs = _mir2loco_map.at(op.getInput(0)->getProducer()->getNode());
- auto rhs = _mir2loco_map.at(op.getInput(1)->getProducer()->getNode());
- loco::Node *result = nullptr;
- switch (op.getOpType())
- {
- case mir::ops::ElementwiseOp::OpType::add:
- {
- auto add_node = _loco_graph->nodes()->create<loco::EltwiseAdd>();
- add_node->lhs(lhs);
- add_node->rhs(rhs);
- result = add_node;
- break;
- }
- default:
- {
- throw std::runtime_error("NYI");
- }
- }
- // Not set Shape
- // Add to map
- _mir2loco_map.emplace(&op, result);
-}
-
void Transformer::visit(mir::ops::EluOp &op) { throw std::runtime_error("NYI"); }
void Transformer::visit(mir::ops::FullyConnectedOp &op) { throw std::runtime_error("NYI"); }
#include "mir2loco.h"
+#include "mir/ops/AddOp.h"
#include "mir/ops/ConcatOp.h"
#include "mir/ops/ConstantOp.h"
#include "mir/ops/Conv2DOp.h"
-#include "mir/ops/ElementwiseOp.h"
#include "mir/ops/PoolOp.h"
#include "mir/ops/ReluOp.h"
#include "mir/ops/ReshapeOp.h"
auto *input1 = mir_graph.create<mir::ops::InputOp>("input1", input_shape);
auto *input2 = mir_graph.create<mir::ops::InputOp>("input2", input_shape);
- auto *add = mir_graph.create<mir::ops::ElementwiseOp>(
- "bias_add", std::vector<mir::Operation::Output *>{input1->getOutput(0), input2->getOutput(0)},
- mir::ops::ElementwiseOp::OpType::add);
+ auto *add = mir_graph.create<mir::ops::AddOp>("add", input1->getOutput(0), input2->getOutput(0));
auto *output = mir_graph.create<mir::ops::OutputOp>("output", add->getOutput(0));
mir2loco::Transformer transformer;