// // IfTorch.cpp // MNNConverter // // Created by MNN on 2021/05/10. // Copyright © 2018, Alibaba Group Holding Limited // #include #include "torchOpConverter.hpp" DECLARE_OP_CONVERTER(IfTorch); MNN::OpType IfTorch::opType() { return MNN::OpType_If; } MNN::OpParameter IfTorch::type() { return MNN::OpParameter_IfParam; } std::vector IfTorch::inputTensorIdx() { return {0}; } void IfTorch::run(MNN::OpT* dstOp, const torch::jit::Node* node, TorchScope* scope) { auto param = new MNN::IfParamT; const auto blocks = node->blocks(); param->then_graph = dstOp->name + "/then"; param->else_graph = dstOp->name + "/else"; // then scope->buildSubGraph(blocks[0], param->then_graph); // else scope->buildSubGraph(blocks[1], param->else_graph); scope->dealSubgraphDepsForOp(dstOp); for (int idx : dstOp->inputIndexes) { std::unique_ptr inputT(new MNN::StringVecT); inputT->data.emplace_back(scope->lookupTensorByIdx(idx)); param->aliases_inputs.emplace_back(std::move(inputT)); } std::unique_ptr outputPari(new MNN::StringVecT); outputPari->data.emplace_back(blocks[0]->outputs()[0]->debugName()); outputPari->data.emplace_back(blocks[1]->outputs()[0]->debugName()); param->aliases_outputs.emplace_back(std::move(outputPari)); dstOp->main.value = param; } REGISTER_CONVERTER(IfTorch, If);