From ed324051794a262a7694acfb0a378724d6ba8401 Mon Sep 17 00:00:00 2001 From: James Conroy Date: Mon, 18 May 2020 15:16:42 +0100 Subject: IVGCVSW-4449 Add missing QLstm nullptr checks * Adds missing nullptr checks for peephole bias for QLstm. Signed-off-by: James Conroy Change-Id: Ib04c8352141977cc7ea11a4859f1b11d46472722 --- src/armnn/Network.cpp | 13 +++++++------ src/armnn/layers/QLstmLayer.cpp | 2 -- src/backends/backendsCommon/WorkloadFactory.cpp | 7 ++++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index c2bf27aa9b..a047297e15 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -1874,15 +1874,16 @@ IConnectableLayer* Network::AddQLstmLayer(const QLstmDescriptor& descriptor, throw InvalidArgumentException("AddQLstmLayer: Projection Weights cannot be NULL"); } - if(params.m_ProjectionBias == nullptr) + layer->m_ProjectionParameters.m_ProjectionWeights = + std::make_unique(*(params.m_ProjectionWeights)); + + // Projection bias is optional even if projection is enabled + if(params.m_ProjectionWeights != nullptr) { - throw InvalidArgumentException("AddQLstmLayer: Projection Biases cannot be NULL"); + layer->m_ProjectionParameters.m_ProjectionBias = + std::make_unique(*(params.m_ProjectionBias)); } - layer->m_ProjectionParameters.m_ProjectionWeights = - std::make_unique(*(params.m_ProjectionWeights)); - layer->m_ProjectionParameters.m_ProjectionBias = - std::make_unique(*(params.m_ProjectionBias)); } // QLstm Peephole params diff --git a/src/armnn/layers/QLstmLayer.cpp b/src/armnn/layers/QLstmLayer.cpp index 9b940c1823..7e6154817c 100644 --- a/src/armnn/layers/QLstmLayer.cpp +++ b/src/armnn/layers/QLstmLayer.cpp @@ -232,8 +232,6 @@ void QLstmLayer::ValidateTensorShapesFromInputs() { ARMNN_ASSERT_MSG(m_ProjectionParameters.m_ProjectionWeights != nullptr, "QLstmLayer: m_ProjectionParameters.m_ProjectionWeights should not be null."); - ARMNN_ASSERT_MSG(m_ProjectionParameters.m_ProjectionBias != nullptr, - "QLstmLayer: m_ProjectionParameters.m_ProjectionBias should not be null."); } if (m_Param.m_PeepholeEnabled) diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index c55c70a1f7..34bfd7cead 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -795,7 +795,12 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, if(descriptor.m_ProjectionEnabled) { paramsInfo.m_ProjectionWeights = &cLayer->m_ProjectionParameters.m_ProjectionWeights->GetTensorInfo(); - paramsInfo.m_ProjectionBias = &cLayer->m_ProjectionParameters.m_ProjectionBias->GetTensorInfo(); + + // Projection bias is optional even if projection is enabled + if (cLayer->m_ProjectionParameters.m_ProjectionBias != nullptr) + { + paramsInfo.m_ProjectionBias = &cLayer->m_ProjectionParameters.m_ProjectionBias->GetTensorInfo(); + } } if(descriptor.m_PeepholeEnabled) -- cgit v1.2.1