MLCE-1022 Fix failure on UnidirectionalSequenceLstm Operator

 * Fix failure to parse UnidirectionalSequenceLstm Operator on CpuAcc
 * Fix failure to parse UnidirectionalSequenceLstm Operator on GpuAcc
 * Fix IsLayerSupported tests when there are multiple otutputs

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Ia690f34d3c7fae87bd36c97056a3ff71baa865f6
diff --git a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
index 5475762..182fab9 100644
--- a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
+++ b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp
@@ -819,16 +819,16 @@
     armnn::TensorInfo output = MakeDummyTensorInfo<DataType>();
     previousLayer.m_Layer->GetOutputSlot(0).SetTensorInfo(output);
     // Connect all outputs of the previous layer to inputs of tested layer.
-    for (unsigned int i = 0; i < numIn; i++)
+    for (unsigned int i = 0; i < numIn; ++i)
     {
         armnn::IOutputSlot& previousLayerOutputSlot = previousLayer.m_Layer->GetOutputSlot(0);
         armnn::IInputSlot& layerInputSlot = layer.m_Layer->GetInputSlot(i);
         previousLayerOutputSlot.Connect(layerInputSlot);
     }
     // Set outputs of tested layer to a dummy tensor.
-    for (unsigned int i = 0; i < numOut; i++)
+    for (unsigned int i = 0; i < numOut; ++i)
     {
-        layer.m_Layer->GetOutputSlot(0).SetTensorInfo(output);
+        layer.m_Layer->GetOutputSlot(i).SetTensorInfo(output);
     }
 
     std::string layerName = LayerPolicy::NameStr;
diff --git a/src/backends/cl/workloads/ClUnidirectionalSequenceLstmFloatWorkload.cpp b/src/backends/cl/workloads/ClUnidirectionalSequenceLstmFloatWorkload.cpp
index ac24120..289442e 100644
--- a/src/backends/cl/workloads/ClUnidirectionalSequenceLstmFloatWorkload.cpp
+++ b/src/backends/cl/workloads/ClUnidirectionalSequenceLstmFloatWorkload.cpp
@@ -517,7 +517,7 @@
     IgnoreUnused(hiddenStateOutput, cellStateOutput);
 
     TensorShape inputLayerShape  = input.GetShape();
-    TensorShape outputLayerShape = outputStateIn.GetShape();
+    TensorShape outputLayerShape = output.GetShape();
 
     unsigned int maxTime    = descriptor.m_TimeMajor?inputLayerShape[0]:inputLayerShape[1];
     unsigned int batchSize  = descriptor.m_TimeMajor?inputLayerShape[1]:inputLayerShape[0];
diff --git a/src/backends/neon/workloads/NeonUnidirectionalSequenceLstmFloatWorkload.cpp b/src/backends/neon/workloads/NeonUnidirectionalSequenceLstmFloatWorkload.cpp
index 8dba719..7bdb2d5 100644
--- a/src/backends/neon/workloads/NeonUnidirectionalSequenceLstmFloatWorkload.cpp
+++ b/src/backends/neon/workloads/NeonUnidirectionalSequenceLstmFloatWorkload.cpp
@@ -517,7 +517,7 @@
                                                     const LstmInputParamsInfo& paramsInfo)
 {
     TensorShape inputLayerShape = input.GetShape();
-    TensorShape outputLayerShape = outputStateIn.GetShape();
+    TensorShape outputLayerShape = output.GetShape();
 
     unsigned int maxTime = descriptor.m_TimeMajor ? inputLayerShape[0] : inputLayerShape[1];
     unsigned int batchSize = descriptor.m_TimeMajor ? inputLayerShape[1] : inputLayerShape[0];