blob: c7cd7d7969e846befe2b35247fa58ca92b79297e [file] [log] [blame]
//
// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "ConstantOperator.hpp"
#include <layers/ConstantLayer.hpp>
TosaSerializationBasicBlock* ConvertConstantToTosaOperator(const Layer* layer,
const std::vector<const TensorInfo*>& outputs)
{
std::string outputName = std::string("constant_");
std::string blockName = std::string("Op_CONST_block_") + GetUniqueTosaMappingID();
std::vector<uint8_t> uint8Data;
// If a layer is present then the block will be used for execution, so names need to be unique.
// Also, set constant tensor data.
if(layer != nullptr)
{
outputName.append(std::to_string(layer->GetGuid()));
blockName.append(std::to_string(layer->GetGuid()));
auto constantLayer = PolymorphicDowncast<const armnn::ConstantLayer*>(layer);
auto tensorInfo = constantLayer->GetOutputSlot().GetTensorInfo();
uint8Data = ConvertConstantTensorDataToBuffer(constantLayer->m_LayerOutput);
}
auto* op = new TosaSerializationOperator(Op_CONST, Attribute_NONE, nullptr, {}, {outputName});
std::vector<int32_t> outputShape0 = GetTosaTensorShape(outputs[0]->GetShape());
DType outputDType0 = ArmNNToDType(outputs[0]->GetDataType());
// Setup output tensor with constant tensor data if available.
auto* outputTensor0 = new TosaSerializationTensor(outputName, outputShape0, outputDType0, uint8Data);
return new TosaSerializationBasicBlock(blockName, // name
mainName, // region name
{op}, // operators
{outputTensor0}, // tensors
{}, // inputs
{outputName}); // outputs
}