diff options
author | Sadik Armagan <sadik.armagan@arm.com> | 2022-07-19 12:37:20 +0100 |
---|---|---|
committer | Nikhil Raj <nikhil.raj@arm.com> | 2022-07-27 15:57:46 +0100 |
commit | 1e276f38e67af7505a25010eee579034ee83d12b (patch) | |
tree | 48607813d793d4142c0a2e4bc0b0b4cf15cf8285 /shim/sl/canonical/ConversionUtils.cpp | |
parent | 07389192266eedac50a64c7d66ef62c1532e06f2 (diff) | |
download | armnn-1e276f38e67af7505a25010eee579034ee83d12b.tar.gz |
IVGCVSW-6954 'Arm NN Support Library Implementation'
* Fixed model converting issue
* Fixed import memory issue
Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: Ied61810b308e0c5d5754f122a6ea2bac1d0725f1
Diffstat (limited to 'shim/sl/canonical/ConversionUtils.cpp')
-rw-r--r-- | shim/sl/canonical/ConversionUtils.cpp | 39 |
1 files changed, 32 insertions, 7 deletions
diff --git a/shim/sl/canonical/ConversionUtils.cpp b/shim/sl/canonical/ConversionUtils.cpp index 020410d30e..96a8ddca6a 100644 --- a/shim/sl/canonical/ConversionUtils.cpp +++ b/shim/sl/canonical/ConversionUtils.cpp @@ -151,7 +151,8 @@ ConstTensorPin ConvertOperandToConstTensorPin(const Operand& operand, const ConversionData& data, const armnn::PermutationVector& dimensionMappings, const armnn::TensorShape* overrideTensorShape, - bool optional) + bool optional, + const armnn::DataType* overrideDataType) { if (!IsOperandTypeSupportedForTensors(operand.type)) { @@ -180,13 +181,18 @@ ConstTensorPin ConvertOperandToConstTensorPin(const Operand& operand, armnn::TensorInfo tensorInfo = GetTensorInfoForOperand(operand); - // Make sure isConstant flag is set. - tensorInfo.SetConstant(); - - if (overrideTensorShape != nullptr) + if (overrideTensorShape) { tensorInfo.SetShape(*overrideTensorShape); } + + if (overrideDataType) + { + tensorInfo.SetDataType(*overrideDataType); + } + + // Make sure isConstant flag is set. + tensorInfo.SetConstant(); return ConstTensorPin(tensorInfo, valueStart, operand.location.length, dimensionMappings); } @@ -194,7 +200,8 @@ LayerInputHandle ConvertToLayerInputHandle(const Operation& operation, uint32_t inputIndex, const Model& model, ConversionData& data, - const armnn::PermutationVector& dimensionMappings) + const armnn::PermutationVector& dimensionMappings, + const LayerInputHandle* inputHandle) { const Operand* operand = GetInputOperand(operation, inputIndex, model); @@ -268,8 +275,26 @@ LayerInputHandle ConvertToLayerInputHandle(const Operation& operation, case OperandLifeTime::POINTER: case OperandLifeTime::CONSTANT_REFERENCE: { + auto constantTensorDataType = operandTensorInfo.GetDataType(); + if (inputHandle) + { + if ((inputHandle->GetTensorInfo().GetDataType() == armnn::DataType::Float32 + || inputHandle->GetTensorInfo().GetDataType() == armnn::DataType::Float16) + && (operandTensorInfo.GetDataType() == armnn::DataType::QAsymmU8 + || operandTensorInfo.GetDataType() == armnn::DataType::QAsymmS8)) + { + constantTensorDataType = inputHandle->GetTensorInfo().GetDataType(); + } + } + // The tensor has an already known constant value, and can be converted into an ArmNN Constant layer. - ConstTensorPin tensorPin = ConvertOperandToConstTensorPin(*operand, model, data, dimensionMappings); + ConstTensorPin tensorPin = ConvertOperandToConstTensorPin(*operand, + model, + data, + dimensionMappings, + nullptr, + false, + &constantTensorDataType); if (tensorPin.IsValid()) { bool isSupported = false; |