diff options
Diffstat (limited to 'compiler/luci/export/src/CircleExporterImpl.cpp')
-rw-r--r-- | compiler/luci/export/src/CircleExporterImpl.cpp | 61 |
1 files changed, 17 insertions, 44 deletions
diff --git a/compiler/luci/export/src/CircleExporterImpl.cpp b/compiler/luci/export/src/CircleExporterImpl.cpp index df7542797..7e218191c 100644 --- a/compiler/luci/export/src/CircleExporterImpl.cpp +++ b/compiler/luci/export/src/CircleExporterImpl.cpp @@ -16,10 +16,13 @@ #include "CircleExporterImpl.h" #include "Optimize.h" +#include "CircleExportMetadata.h" #include "CircleTensorExporter.h" #include "CircleOperationExporter.h" #include "CircleExporterUtils.h" +#include <luci/IR/CircleNodes.h> + #include <oops/InternalExn.h> #include <mio/circle/schema_generated.h> #include <flatbuffers/flatbuffers.h> @@ -27,46 +30,16 @@ #include <cassert> #include <unordered_map> #include <string> -#include <stdexcept> +#include <vector> namespace { -luci::CircleInput *input_node(loco::Graph *g, const loco::GraphInputIndex &index) -{ - for (uint32_t n = 0; n < g->nodes()->size(); ++n) - { - if (auto input = dynamic_cast<luci::CircleInput *>(g->nodes()->at(n))) - { - if (input->indexed() && input->index() == index) - { - return input; - } - } - } - return nullptr; -} - -luci::CircleOutput *output_node(loco::Graph *g, const loco::GraphOutputIndex &index) -{ - for (uint32_t n = 0; n < g->nodes()->size(); ++n) - { - if (auto output = dynamic_cast<luci::CircleOutput *>(g->nodes()->at(n))) - { - if (output->indexed() && output->index() == index) - { - return output; - } - } - } - return nullptr; -} - void registerGraphInputTensors(loco::Graph *graph, luci::SubGraphContext &ctx) { for (uint32_t n = 0; n < graph->inputs()->size(); ++n) { - auto node = input_node(graph, n); + auto node = luci::input_node(graph, n); assert(node != nullptr); ctx._inputs.push_back(luci::get_tensor_index(node)); } @@ -76,7 +49,7 @@ void registerGraphOutputTensors(loco::Graph *graph, luci::SubGraphContext &ctx) { for (uint32_t n = 0; n < graph->outputs()->size(); ++n) { - auto push = output_node(graph, n); + auto push = luci::output_node(graph, n); assert(push != nullptr); auto node = push->from(); assert(node != nullptr); @@ -113,7 +86,7 @@ encodeOperatorCodes(FlatBufferBuilder &builder, std::unordered_map<luci::OpCode, else { operator_codes_vec[idx] = - CreateOperatorCode(builder, it.first.opcode, builder.CreateString(it.first.custom_code)); + CreateOperatorCode(builder, it.first.opcode, builder.CreateString(it.first.custom_code)); } } @@ -186,16 +159,16 @@ void CircleExporterImpl::exportGraph(loco::Graph *graph) std::string description_str = "nnpackage"; auto description = _builder.CreateString(description_str); + // Metadata + auto metadata_vec = createCircleMetadataVector(_builder, md); + auto metadata = _builder.CreateVector(std::vector<Offset<Metadata>>(metadata_vec)); + // create array of buffers auto buffers = _builder.CreateVector(md._buffers); - // empty metadata - std::vector<int> metadata_buffer_vec; - auto metadata_buffer = _builder.CreateVector(metadata_buffer_vec); - // Model auto model_offset = CreateModel(_builder, version, operator_codes, subgraphs, description, - buffers, metadata_buffer); + buffers, 0 /* metadata_buffer */, metadata); FinishModelBuffer(_builder, model_offset); } @@ -250,19 +223,19 @@ void CircleExporterImpl::exportModule(Module *module) std::string description_str = "nnpackage"; auto description = _builder.CreateString(description_str); + // Metadata + auto metadata_vec = createCircleMetadataVector(_builder, md); + auto metadata = _builder.CreateVector(std::vector<Offset<Metadata>>(metadata_vec)); + // create array of buffers auto buffers = _builder.CreateVector(md._buffers); - // empty metadata - std::vector<int> metadata_buffer_vec; - auto metadata_buffer = _builder.CreateVector(metadata_buffer_vec); - // This version is taken from comment in fbs constexpr uint32_t version = 0; // Model auto model_offset = CreateModel(_builder, version, operator_codes, subgraphs, description, - buffers, metadata_buffer); + buffers, 0 /* metadata_buffer */, metadata); FinishModelBuffer(_builder, model_offset); } |