IVGCVSW-3993 Add frontend and reference workload for ComparisonLayer

* Added frontend for ComparisonLayer
* Added RefComparisonWorkload
* Deprecated and removed Equal and Greater layers and workloads
* Updated tests to ensure backward compatibility

Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com>
Change-Id: Id50c880be1b567c531efff919c0c366d0a71cbe9
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 11f833c..5c9855f 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -240,6 +240,13 @@
     CreateAnyLayer(fbBatchNormalizationLayer.o, serializer::Layer::Layer_BatchNormalizationLayer);
 }
 
+void SerializerVisitor::VisitComparisonLayer(const armnn::IConnectableLayer* layer,
+                                             const armnn::ComparisonDescriptor& descriptor,
+                                             const char* name)
+{
+    throw armnn::UnimplementedException("SerializerVisitor::VisitComparisonLayer() is not implemented");
+}
+
 // Build FlatBuffer for Constant Layer
 void SerializerVisitor::VisitConstantLayer(const armnn::IConnectableLayer* layer,
                                            const armnn::ConstTensor& input,
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 8c13245..79dc17b 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -68,6 +68,10 @@
                                       const armnn::ConstTensor& gamma,
                                       const char* name = nullptr) override;
 
+    void VisitComparisonLayer(const armnn::IConnectableLayer* layer,
+                              const armnn::ComparisonDescriptor& descriptor,
+                              const char* name = nullptr) override;
+
     void VisitConcatLayer(const armnn::IConnectableLayer* layer,
                           const armnn::ConcatDescriptor& concatDescriptor,
                           const char* name = nullptr) override;
@@ -103,6 +107,7 @@
     void VisitDivisionLayer(const armnn::IConnectableLayer* layer,
                             const char* name = nullptr) override;
 
+    ARMNN_DEPRECATED_MSG("Use VisitComparisonLayer instead")
     void VisitEqualLayer(const armnn::IConnectableLayer* layer,
                          const char* name = nullptr) override;
 
@@ -118,6 +123,7 @@
     void VisitGatherLayer(const armnn::IConnectableLayer* layer,
                           const char* name = nullptr) override;
 
+    ARMNN_DEPRECATED_MSG("Use VisitComparisonLayer instead")
     void VisitGreaterLayer(const armnn::IConnectableLayer* layer,
                            const char* name = nullptr) override;
 
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index a70c891..58f56f4 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -1009,48 +1009,6 @@
     deserializedNetwork->Accept(verifier);
 }
 
-BOOST_AUTO_TEST_CASE(SerializeEqual)
-{
-    class EqualLayerVerifier : public LayerVerifierBase
-    {
-    public:
-        EqualLayerVerifier(const std::string& layerName,
-                           const std::vector<armnn::TensorInfo>& inputInfos,
-                           const std::vector<armnn::TensorInfo>& outputInfos)
-        : LayerVerifierBase(layerName, inputInfos, outputInfos) {}
-
-        void VisitEqualLayer(const armnn::IConnectableLayer* layer, const char* name) override
-        {
-            VerifyNameAndConnections(layer, name);
-        }
-    };
-
-    const std::string layerName("equal");
-    const armnn::TensorInfo inputTensorInfo1 = armnn::TensorInfo({2, 1, 2, 4}, armnn::DataType::Float32);
-    const armnn::TensorInfo inputTensorInfo2 = armnn::TensorInfo({2, 1, 2, 4}, armnn::DataType::Float32);
-    const armnn::TensorInfo outputTensorInfo = armnn::TensorInfo({2, 1, 2, 4}, armnn::DataType::Boolean);
-
-    armnn::INetworkPtr network = armnn::INetwork::Create();
-    armnn::IConnectableLayer* const inputLayer1 = network->AddInputLayer(0);
-    armnn::IConnectableLayer* const inputLayer2 = network->AddInputLayer(1);
-    armnn::IConnectableLayer* const equalLayer = network->AddEqualLayer(layerName.c_str());
-    armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
-    inputLayer1->GetOutputSlot(0).Connect(equalLayer->GetInputSlot(0));
-    inputLayer2->GetOutputSlot(0).Connect(equalLayer->GetInputSlot(1));
-    equalLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
-    inputLayer1->GetOutputSlot(0).SetTensorInfo(inputTensorInfo1);
-    inputLayer2->GetOutputSlot(0).SetTensorInfo(inputTensorInfo2);
-    equalLayer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
-
-    armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
-    BOOST_CHECK(deserializedNetwork);
-
-    EqualLayerVerifier verifier(layerName, {inputTensorInfo1, inputTensorInfo2}, {outputTensorInfo});
-    deserializedNetwork->Accept(verifier);
-}
-
 BOOST_AUTO_TEST_CASE(SerializeFloor)
 {
     class FloorLayerVerifier : public LayerVerifierBase
@@ -1225,48 +1183,6 @@
     deserializedNetwork->Accept(verifier);
 }
 
-BOOST_AUTO_TEST_CASE(SerializeGreater)
-{
-    class GreaterLayerVerifier : public LayerVerifierBase
-    {
-    public:
-        GreaterLayerVerifier(const std::string& layerName,
-                             const std::vector<armnn::TensorInfo>& inputInfos,
-                             const std::vector<armnn::TensorInfo>& outputInfos)
-        : LayerVerifierBase(layerName, inputInfos, outputInfos) {}
-
-        void VisitGreaterLayer(const armnn::IConnectableLayer* layer, const char* name) override
-        {
-            VerifyNameAndConnections(layer, name);
-        }
-    };
-
-    const std::string layerName("greater");
-    const armnn::TensorInfo inputTensorInfo1({ 1, 2, 2, 2 }, armnn::DataType::Float32);
-    const armnn::TensorInfo inputTensorInfo2({ 1, 2, 2, 2 }, armnn::DataType::Float32);
-    const armnn::TensorInfo outputTensorInfo({ 1, 2, 2, 2 }, armnn::DataType::Boolean);
-
-    armnn::INetworkPtr network = armnn::INetwork::Create();
-    armnn::IConnectableLayer* const inputLayer1 = network->AddInputLayer(0);
-    armnn::IConnectableLayer* const inputLayer2 = network->AddInputLayer(1);
-    armnn::IConnectableLayer* const greaterLayer = network->AddGreaterLayer(layerName.c_str());
-    armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
-    inputLayer1->GetOutputSlot(0).Connect(greaterLayer->GetInputSlot(0));
-    inputLayer2->GetOutputSlot(0).Connect(greaterLayer->GetInputSlot(1));
-    greaterLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
-    inputLayer1->GetOutputSlot(0).SetTensorInfo(inputTensorInfo1);
-    inputLayer2->GetOutputSlot(0).SetTensorInfo(inputTensorInfo2);
-    greaterLayer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
-
-    armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
-    BOOST_CHECK(deserializedNetwork);
-
-    GreaterLayerVerifier verifier(layerName, {inputTensorInfo1, inputTensorInfo2}, {outputTensorInfo});
-    deserializedNetwork->Accept(verifier);
-}
-
 BOOST_AUTO_TEST_CASE(SerializeInstanceNormalization)
 {
     class InstanceNormalizationLayerVerifier : public LayerVerifierBase