IVGCVSW-4472 Yolo v3 ExecuteNetwork failing

 * Add Debug workload for QAsymmS8/U8
 * Change Dequantize tests to test AsymmS8 instead of SymmS8
 * Fix incorrect supportedness within RefLayerSupport

Signed-off-by: Keith Davis <keith.davis@arm.com>
Change-Id: Ie51f1e33c564d46c86bf0150b1addda3fc093d13
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index 593f3eb..f5c01f2 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -316,7 +316,7 @@
             type = armnn::DataType::Float32;
             break;
         case tflite::TensorType_INT8:
-            if (tensorPtr->quantization->zero_point.size() == 1 && tensorPtr->quantization->zero_point[0] != 0)
+            if (tensorPtr->quantization->zero_point.size() == 1)
             {
                 // Per-tensor
                 type = armnn::DataType::QAsymmS8;
@@ -398,7 +398,6 @@
                               quantizationScales,
                               dimensionMappings[boost::numeric_cast<unsigned int>(
                               tensorPtr->quantization->quantized_dimension)]);
-
             return result;
         }
     }
@@ -2900,6 +2899,11 @@
                                                          tensorPtr,
                                                          tensorInfo,
                                                          permutationVector);
+        case armnn::DataType::QAsymmS8:
+            return CreateConstTensorAndStoreData<int8_t>(bufferPtr,
+                                                         tensorPtr,
+                                                         tensorInfo,
+                                                         permutationVector);
         case armnn::DataType::Signed32:
             return CreateConstTensorAndStoreData<int32_t>(bufferPtr,
                                                           tensorPtr,
diff --git a/src/armnnTfLiteParser/test/Dequantize.cpp b/src/armnnTfLiteParser/test/Dequantize.cpp
index 79dfe2e..663f2ca 100644
--- a/src/armnnTfLiteParser/test/Dequantize.cpp
+++ b/src/armnnTfLiteParser/test/Dequantize.cpp
@@ -103,16 +103,16 @@
                 {{"outputTensor", { 0.0f, 1.5f, 7.5f, 49150.5f, -1.5f,-49152.0f }}});
     }
 
-    struct SimpleDequantizeFixtureQSymmS8 : DequantizeFixture
+    struct SimpleDequantizeFixtureQAsymmS8 : DequantizeFixture
     {
-        SimpleDequantizeFixtureQSymmS8() : DequantizeFixture("[ 1, 6 ]",
+        SimpleDequantizeFixtureQAsymmS8() : DequantizeFixture("[ 1, 6 ]",
                                                              "[ 1, 6 ]",
                                                              "INT8") {}
     };
 
-    BOOST_FIXTURE_TEST_CASE(SimpleDequantizeQSymmS8, SimpleDequantizeFixtureQSymmS8)
+    BOOST_FIXTURE_TEST_CASE(SimpleDequantizeQAsymmS8, SimpleDequantizeFixtureQAsymmS8)
     {
-        RunTest<2, armnn::DataType::QSymmS8 , armnn::DataType::Float32>(
+        RunTest<2, armnn::DataType::QAsymmS8 , armnn::DataType::Float32>(
                 0,
                 {{"inputTensor",  { 0,    1,    5,    127,    -128,   -1 }}},
                 {{"outputTensor", { 0.0f, 1.5f, 7.5f, 190.5f, -192.0f, -1.5f }}});
diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp
index fea7225..410469e 100644
--- a/src/backends/backendsCommon/WorkloadData.cpp
+++ b/src/backends/backendsCommon/WorkloadData.cpp
@@ -1045,8 +1045,7 @@
         DataType::Float16,
         DataType::QAsymmS8,
         DataType::QAsymmU8,
-        DataType::QSymmS16,
-        DataType::QSymmS8
+        DataType::QSymmS16
     };
 
     ValidateDataTypes(inputTensorInfo0, supportedTypes, descriptorName);
@@ -1079,7 +1078,7 @@
     {
         DataType::Float32,
         DataType::QAsymmU8,
-        DataType::QSymmS8,
+        DataType::QAsymmS8,
         DataType::QSymmS16,
         DataType::Float16
     };
@@ -1389,8 +1388,8 @@
     {
         DataType::Float16,
         DataType::Float32,
+        DataType::QAsymmS8,
         DataType::QAsymmU8,
-        DataType::QSymmS8,
         DataType::QSymmS16
     };
 
@@ -1543,6 +1542,7 @@
         DataType::Float16,
         DataType::Signed32,
         DataType::QAsymmU8,
+        DataType::QAsymmS8,
         DataType::QSymmS8,
         DataType::QSymmS16
     };
@@ -1570,8 +1570,7 @@
         DataType::Signed32,
         DataType::QSymmS16,
         DataType::QAsymmS8,
-        DataType::QAsymmU8,
-        DataType::QSymmS8
+        DataType::QAsymmU8
     };
 
     ValidateDataTypes(inputTensorInfo, supportedTypes, descriptorName);
@@ -2114,8 +2113,8 @@
         DataType::Float16,
         DataType::Float32,
         DataType::Signed32,
+        DataType::QAsymmS8,
         DataType::QAsymmU8,
-        DataType::QSymmS8,
         DataType::QSymmS16
     };
 
diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp
index bba83e2..5cb36c4 100644
--- a/src/backends/reference/RefLayerSupport.cpp
+++ b/src/backends/reference/RefLayerSupport.cpp
@@ -82,7 +82,6 @@
     std::array<DataType,6> supportedTypes = {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
         DataType::QAsymmS8,
         DataType::QAsymmU8,
         DataType::QSymmS16
@@ -147,7 +146,6 @@
     std::array<DataType,6> supportedTypes = {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
         DataType::QAsymmS8,
         DataType::QAsymmU8,
         DataType::QSymmS16
@@ -332,8 +330,8 @@
     {
             DataType::Float32,
             DataType::Float16,
-            DataType::QSymmS8,
             DataType::QAsymmU8,
+            DataType::QAsymmS8,
             DataType::QSymmS16
     };
 
@@ -355,11 +353,12 @@
 bool RefLayerSupport::IsConstantSupported(const TensorInfo& output,
                                           Optional<std::string&> reasonIfUnsupported) const
 {
-    std::array<DataType,5> supportedTypes =
+    std::array<DataType,6> supportedTypes =
     {
         DataType::Float32,
         DataType::Signed32,
         DataType::QAsymmU8,
+        DataType::QAsymmS8,
         DataType::QSymmS8,
         DataType::QSymmS16
     };
@@ -1120,7 +1119,7 @@
     std::array<DataType,5> supportedTypes = {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
+        DataType::QAsymmS8,
         DataType::QAsymmU8,
         DataType::QSymmS16
     };
@@ -1284,11 +1283,11 @@
 {
     bool supported = true;
 
-    std::array<DataType,5> supportedTypes = {
+    std::array<DataType,6> supportedTypes = {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
         DataType::QAsymmU8,
+        DataType::QAsymmS8,
         DataType::QSymmS16
     };
 
@@ -1416,11 +1415,10 @@
     bool supported = true;
 
     // Define supported output and inputs types.
-    std::array<DataType,6> supportedTypes =
+    std::array<DataType,5> supportedTypes =
     {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
         DataType::QAsymmS8,
         DataType::QAsymmU8,
         DataType::QSymmS16
@@ -1488,7 +1486,6 @@
         DataType::Signed32,
         DataType::QAsymmS8,
         DataType::QAsymmU8,
-        DataType::QSymmS8,
         DataType::QSymmS16
     };
 
@@ -1532,8 +1529,8 @@
     {
         DataType::Float32,
         DataType::Float16,
-        DataType::QSymmS8,
         DataType::QAsymmU8,
+        DataType::QAsymmS8,
         DataType::QSymmS16
     };
 
diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp
index dadb456..02dbbab 100644
--- a/src/backends/reference/RefWorkloadFactory.cpp
+++ b/src/backends/reference/RefWorkloadFactory.cpp
@@ -65,6 +65,16 @@
     return IsDataType<DataType::QSymmS8>(info);
 }
 
+bool IsQAsymmS8(const WorkloadInfo& info)
+{
+    return IsDataType<DataType::QAsymmS8>(info);
+}
+
+bool IsQAsymmU8(const WorkloadInfo& info)
+{
+    return IsDataType<DataType::QAsymmU8>(info);
+}
+
 RefWorkloadFactory::RefWorkloadFactory(const std::shared_ptr<RefMemoryManager>& memoryManager)
     : m_MemoryManager(memoryManager)
 {
@@ -200,6 +210,14 @@
     {
         return std::make_unique<RefDebugQSymmS8Workload>(descriptor, info);
     }
+    if (IsQAsymmU8(info))
+    {
+        return std::make_unique<RefDebugQAsymmU8Workload>(descriptor, info);
+    }
+    if (IsQAsymmS8(info))
+    {
+        return std::make_unique<RefDebugQAsymmS8Workload>(descriptor, info);
+    }
     if (IsSigned32(info))
     {
         return std::make_unique<RefDebugSigned32Workload>(descriptor, info);
diff --git a/src/backends/reference/workloads/RefDebugWorkload.cpp b/src/backends/reference/workloads/RefDebugWorkload.cpp
index 2f0b427..af714a3 100644
--- a/src/backends/reference/workloads/RefDebugWorkload.cpp
+++ b/src/backends/reference/workloads/RefDebugWorkload.cpp
@@ -47,6 +47,7 @@
 template class RefDebugWorkload<DataType::Float16>;
 template class RefDebugWorkload<DataType::Float32>;
 template class RefDebugWorkload<DataType::QAsymmU8>;
+template class RefDebugWorkload<DataType::QAsymmS8>;
 template class RefDebugWorkload<DataType::QSymmS16>;
 template class RefDebugWorkload<DataType::QSymmS8>;
 template class RefDebugWorkload<DataType::Signed32>;
diff --git a/src/backends/reference/workloads/RefDebugWorkload.hpp b/src/backends/reference/workloads/RefDebugWorkload.hpp
index 4966ca3..5a2a1cd 100644
--- a/src/backends/reference/workloads/RefDebugWorkload.hpp
+++ b/src/backends/reference/workloads/RefDebugWorkload.hpp
@@ -40,6 +40,7 @@
 using RefDebugFloat16Workload   = RefDebugWorkload<DataType::Float16>;
 using RefDebugFloat32Workload   = RefDebugWorkload<DataType::Float32>;
 using RefDebugQAsymmU8Workload  = RefDebugWorkload<DataType::QAsymmU8>;
+using RefDebugQAsymmS8Workload  = RefDebugWorkload<DataType::QAsymmS8>;
 using RefDebugQSymmS16Workload  = RefDebugWorkload<DataType::QSymmS16>;
 using RefDebugQSymmS8Workload   = RefDebugWorkload<DataType::QSymmS8>;
 using RefDebugSigned32Workload  = RefDebugWorkload<DataType::Signed32>;