IVGCVSW-4712 Fill layer datatype adjustments
* Input layer to be int32 instead of same type as output
* Enable float16 end to end tests
* Neon and Cl layer support check for backend

Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com>
Change-Id: I6bc889077c8da63eeff66bd45730ce5d8783c419
diff --git a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
index f734a94..5d7601b 100644
--- a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
+++ b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp
@@ -39,27 +39,31 @@
     FillDescriptor descriptor;
     descriptor.m_Value = 9;
 
-    std::vector<T> inputData{
+    std::vector<int32_t> inputData {
             1, 1, 5, 3
     };
 
-    std::vector<T> expectedOutputData{
+    std::vector<float> floatExpectedOutputData {
             9, 9, 9, 9, 9,
             9, 9, 9, 9, 9,
             9, 9, 9, 9, 9
     };
+    std::vector<T> expectedOutputData = armnnUtils::QuantizedVector<T>(floatExpectedOutputData);
 
-    TensorInfo inputInfo ({ 4 }, ArmnnType);
+    TensorInfo inputInfo ({ 4 }, DataType::Signed32);
     TensorInfo outputInfo({ 1, 1, 5, 3 }, ArmnnType);
 
     armnn::INetworkPtr network = CreateFillNetwork(inputInfo, outputInfo, descriptor);
 
     BOOST_TEST_CHECKPOINT("create a network");
 
-    std::map<int, std::vector<T>> inputTensorData          = {{ 0, inputData }};
+    std::map<int, std::vector<int32_t>> inputTensorData    = {{ 0, inputData }};
     std::map<int, std::vector<T>> expectedOutputTensorData = {{ 0, expectedOutputData }};
 
-    EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(network), inputTensorData, expectedOutputTensorData, backends);
+    EndToEndLayerTestImpl<DataType::Signed32, ArmnnType>(move(network),
+                                                         inputTensorData,
+                                                         expectedOutputTensorData,
+                                                         backends);
 }
 
 } // anonymous namespace
\ No newline at end of file
diff --git a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
index 64970fe..040a988 100644
--- a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
+++ b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp
@@ -17,13 +17,10 @@
     const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
 {
     IgnoreUnused(memoryManager);
-    armnn::TensorInfo inputTensorInfo({4}, ArmnnType);
-    inputTensorInfo.SetQuantizationScale(0.0f);
-
+    armnn::TensorInfo inputTensorInfo({4}, armnn::DataType::Signed32);
     armnn::TensorInfo outputTensorInfo({2, 2, 3, 2}, ArmnnType);
-    outputTensorInfo.SetQuantizationScale(0.0f);
 
-    auto input = MakeTensor<T, 1>(inputTensorInfo, ConvertToDataType<ArmnnType>(
+    auto input = MakeTensor<int32_t, 1>(inputTensorInfo, ConvertToDataType<armnn::DataType::Signed32>(
         {2, 2, 3, 2},
         inputTensorInfo));
 
diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp
index 74b5aad..1af5c91 100644
--- a/src/backends/cl/ClLayerSupport.cpp
+++ b/src/backends/cl/ClLayerSupport.cpp
@@ -430,12 +430,16 @@
     }
 }
 
-bool ClLayerSupport::IsFillSupported(const TensorInfo&,
-                                     const TensorInfo&,
-                                     const FillDescriptor&,
-                                     Optional<std::string&>) const
+bool ClLayerSupport::IsFillSupported(const TensorInfo& input,
+                                     const TensorInfo& output,
+                                     const FillDescriptor& descriptor,
+                                     Optional<std::string&> reasonIfUnsupported) const
 {
-    return true;
+    armnn::IgnoreUnused(input);
+    armnn::IgnoreUnused(output);
+    armnn::IgnoreUnused(descriptor);
+
+    return IsClBackendSupported(reasonIfUnsupported);
 }
 
 bool ClLayerSupport::IsFloorSupported(const TensorInfo& input,
diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp
index 0ac1b2a..edee368 100644
--- a/src/backends/cl/test/ClEndToEndTests.cpp
+++ b/src/backends/cl/test/ClEndToEndTests.cpp
@@ -237,6 +237,11 @@
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
 BOOST_AUTO_TEST_CASE(ClFillEndToEndTestInt32)
 {
     FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp
index b848f0c..9dc8a01 100644
--- a/src/backends/neon/NeonLayerSupport.cpp
+++ b/src/backends/neon/NeonLayerSupport.cpp
@@ -406,12 +406,16 @@
     }
 }
 
-bool NeonLayerSupport::IsFillSupported(const TensorInfo&,
-                                       const TensorInfo&,
-                                       const FillDescriptor&,
-                                       Optional<std::string&>) const
+bool NeonLayerSupport::IsFillSupported(const TensorInfo& input,
+                                       const TensorInfo& output,
+                                       const FillDescriptor& descriptor,
+                                       Optional<std::string&> reasonIfUnsupported) const
 {
-    return true;
+    armnn::IgnoreUnused(input);
+    armnn::IgnoreUnused(output);
+    armnn::IgnoreUnused(descriptor);
+
+    return IsNeonBackendSupported(reasonIfUnsupported);
 }
 
 bool NeonLayerSupport::IsFloorSupported(const TensorInfo& input,
diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp
index e89718a..ffbae51 100644
--- a/src/backends/neon/test/NeonEndToEndTests.cpp
+++ b/src/backends/neon/test/NeonEndToEndTests.cpp
@@ -452,6 +452,11 @@
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
 BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
 {
     FillEndToEnd<armnn::DataType::Signed32>(defaultBackends);
diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp
index 80527bd..f6c214e 100644
--- a/src/backends/reference/RefLayerSupport.cpp
+++ b/src/backends/reference/RefLayerSupport.cpp
@@ -874,7 +874,7 @@
         DataType::Signed32
     };
 
-    supported &= CheckSupportRule(TypeAnyOf(input, supportedTypes), reasonIfUnsupported,
+    supported &= CheckSupportRule(TypeIs(input, DataType::Signed32), reasonIfUnsupported,
                                   "Reference Fill: input type not supported.");
 
     supported &= CheckSupportRule(TypeAnyOf(output, supportedTypes), reasonIfUnsupported,
diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp
index 027b621..4598568 100644
--- a/src/backends/reference/test/RefEndToEndTests.cpp
+++ b/src/backends/reference/test/RefEndToEndTests.cpp
@@ -589,10 +589,10 @@
     FillEndToEnd<armnn::DataType::Float32>(defaultBackends);
 }
 
-//BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
-//{
-//    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
-//}
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+    FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
 
 BOOST_AUTO_TEST_CASE(RefFillEndToEndTestInt32)
 {