IVGCVSW-7735 Opaque Delegate Cleanup
* Move TFL_TheStableDelegate to opaque/armnn_delegate_external.cpp
* Change TFL_TheStableDelegate to extern variable
* Remove duplicated opaque test sources
* Add support for missing Fill operator
* Enable support for Mirror Pad
* Fix failing Split tests
Signed-off-by: Ryan OShea <ryan.oshea3@arm.com>
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: I7f8d8b4269bb4fbe27b6f47709cbd828554d37d8
diff --git a/delegate/opaque/src/Split.hpp b/delegate/opaque/src/Split.hpp
index 3840ed9..d3d00e4 100644
--- a/delegate/opaque/src/Split.hpp
+++ b/delegate/opaque/src/Split.hpp
@@ -81,7 +81,8 @@
// -1 == 3, -2 == 2, -3 == 1, -4 == 0
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
tfLiteContext,
- "TfLiteArmnnDelegate: Operation has invalid axis: #%d. Axis must be in range [-n, n) in node #%d:",
+ "TfLiteOpaqueArmnnDelegate: Operation has invalid axis: #%d. "
+ "Axis must be in range [-n, n) in node #%d:",
axis, nodeIndex);
}
const unsigned int splitDim = ComputeWrappedIndex(axis, inputTensorInfo.GetNumDimensions());
@@ -104,8 +105,9 @@
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
tfLiteContext,
- "TfLiteArmnnDelegate: The number of dimensions: #%d for input tensors of the split op cannot be "
- "greater than #%d in node #%d: ", inputDimSize, MaxNumOfTensorDimensions, nodeIndex);
+ "TfLiteOpaqueArmnnDelegate: The number of dimensions: #%d for input tensors of the split op cannot be "
+ "greater than #%d in node #%d: ",
+ inputDimSize, MaxNumOfTensorDimensions, nodeIndex);
return kTfLiteError;
}
@@ -121,7 +123,7 @@
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
tfLiteContext,
- "TfLiteArmnnDelegate: Number of splits #%d must evenly divide the dimension #%d in node #%d: ",
+ "TfLiteOpaqueArmnnDelegate: Number of splits #%d must evenly divide the dimension #%d in node #%d: ",
numSplits, splitterDimSizes[splitDim], nodeIndex);
return kTfLiteError;
}
@@ -165,10 +167,25 @@
}
// Connect the input slots
- if(Connect(layer, tfLiteContext, tfLiteNode, delegateData) != kTfLiteOk)
+ delegateData.m_OutputSlotForNode[inputTensors[1]]->Connect(layer->GetInputSlot(0));
+
+ if(numSplits != static_cast<int>(layer->GetNumOutputSlots()))
{
+ TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
+ tfLiteContext,
+ "TfLiteOpaqueArmnnDelegate: Expected number of splits #%d does not "
+ "match the number of output slots #%d in node #%d: ",
+ numSplits, layer->GetNumOutputSlots(), nodeIndex);
return kTfLiteError;
}
+
+ // Prepare output slots
+ for (unsigned int outputIndex = 0; outputIndex < layer->GetNumOutputSlots(); ++outputIndex)
+ {
+ armnn::IOutputSlot& outputSlot = layer->GetOutputSlot(outputIndex);
+ delegateData.m_OutputSlotForNode[
+ static_cast<unsigned long>(outputTensors[outputIndex])] = &outputSlot;
+ }
return kTfLiteOk;
}
@@ -224,7 +241,8 @@
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
tfLiteContext,
- "TfLiteArmnnDelegate: Operation has invalid axis: #%d. Axis must be in range [-n, n) in node #%d:",
+ "TfLiteOpaqueArmnnDelegate: Operation has invalid axis: #%d. "
+ "Axis must be in range [-n, n) in node #%d:",
axis, nodeIndex);
}
const unsigned int splitDim = ComputeWrappedIndex(axisTensorData[0], inputTensorInfo.GetNumDimensions());
@@ -243,7 +261,8 @@
if (numSplits <= 0)
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
- tfLiteContext, "TfLiteArmnnDelegate: Invalid number of splits %d in node #%d",
+ tfLiteContext,
+ "TfLiteOpaqueArmnnDelegate: Invalid number of splits %d in node #%d",
numSplits, nodeIndex);
return kTfLiteError;
}
@@ -278,8 +297,9 @@
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
tfLiteContext,
- "TfLiteArmnnDelegate: The number of dimensions: #%d for input tensors of the split op cannot be "
- "greater than #%d in node #%d: ", inputDimSize, MaxNumOfTensorDimensions, nodeIndex);
+ "TfLiteOpaqueArmnnDelegate: The number of dimensions: #%d for input tensors of the split op cannot be "
+ "greater than #%d in node #%d: ",
+ inputDimSize, MaxNumOfTensorDimensions, nodeIndex);
return kTfLiteError;
}
@@ -312,8 +332,10 @@
if (splitSum != armnn::numeric_cast<int>(inputTensorInfo.GetShape()[splitDim]))
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
- tfLiteContext, "TfLiteArmnnDelegate: SplitV split_sizes does not sum to the dimension of value "
- "along split_dim in node #%d", nodeIndex);
+ tfLiteContext,
+ "TfLiteOpaqueArmnnDelegate: SplitV split_sizes does not sum to the dimension "
+ "of value along split_dim in node #%d",
+ nodeIndex);
return kTfLiteError;
}
}
@@ -324,8 +346,9 @@
else
{
TF_LITE_OPAQUE_MAYBE_KERNEL_LOG(
- tfLiteContext, "TfLiteArmnnDelegate: SplitV cannot infer split size for "
- "more than one split in node #%d",
+ tfLiteContext,
+ "TfLiteOpaqueArmnnDelegate: SplitV cannot infer split size for "
+ "more than one split in node #%d",
nodeIndex);
return kTfLiteError;
}