aboutsummaryrefslogtreecommitdiff
path: root/delegate/src/Control.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'delegate/src/Control.hpp')
-rw-r--r--delegate/src/Control.hpp24
1 files changed, 20 insertions, 4 deletions
diff --git a/delegate/src/Control.hpp b/delegate/src/Control.hpp
index 02426a5616..fd1fdee940 100644
--- a/delegate/src/Control.hpp
+++ b/delegate/src/Control.hpp
@@ -1,5 +1,5 @@
//
-// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2022-2023 Arm Ltd and Contributors. All rights reserved.
// SPDX-License-Identifier: MIT
//
@@ -99,6 +99,12 @@ TfLiteStatus VisitConcatenationOperator(DelegateData& delegateData,
uint32_t inputRank = tfLiteTensors[tfLiteNode->inputs->data[0]].dims->size;
auto* concatenationParameters = reinterpret_cast<TfLiteConcatenationParams*>(tfLiteNode->builtin_data);
+
+ if(!concatenationParameters)
+ {
+ throw armnn::Exception(&"TfLiteArmnnDelegate: Concat parameters are null in: " [ nodeIndex]);
+ }
+
const unsigned int concatDimInput = static_cast<unsigned int>(
(static_cast<int>(inputRank) + concatenationParameters->axis) % static_cast<int>(inputRank));
@@ -117,6 +123,17 @@ TfLiteStatus VisitConcatenationOperator(DelegateData& delegateData,
const armnn::TensorInfo& outputTensorInfo = GetTensorInfoForTfLiteTensor(tfLiteOutputTensor, true);
+ // Verify we support the fused activation before attempting to create a layer
+ TfLiteFusedActivation activationType = concatenationParameters->activation;
+
+ const armnn::TensorInfo& activationOutputInfo = GetTensorInfoForTfLiteTensor(tfLiteOutputTensor, true);
+ TfLiteStatus activationStatus = ValidateFusedActivationOperator(delegateData, tfLiteContext, outputTensorInfo,
+ outputTensorInfo, activationType);
+ if(activationStatus != kTfLiteOk)
+ {
+ return kTfLiteError;
+ }
+
// Check if supported
bool isSupported = false;
armnn::BackendId setBackend;
@@ -158,14 +175,13 @@ TfLiteStatus VisitConcatenationOperator(DelegateData& delegateData,
outputSlot.SetTensorInfo(outputTensorInfo);
Connect(concatenationLayer, tfLiteNode, delegateData);
- if (!concatenationParameters)
+ if (activationType == kTfLiteActNone)
{
// No Activation
return kTfLiteOk;
}
- // Check activation
- TfLiteFusedActivation activationType = concatenationParameters->activation;
+ // Check and Create activation
return FusedActivation(tfLiteContext, tfLiteNode, activationType, concatenationLayer, 0, delegateData);
}