IVGCVSW-7830 Add backend optimizations to remove Reshapes where possible

 * Added optimization to remove reshapes for Neon and Ref Backends
   by using overridden TensorInfos
 * Added ability to delete Subgraphs during Optimization
 * Fixed naming error in NeonEndToEndTests and CLEndToEndTests
 * Added LayerNameAndTypeCheck for testing.
 * Fixed error where layers were not marked as altered when removed in
   CLBackend

Signed-off-by: Mike Kelly <mike.kelly@arm.com>
Change-Id: I1ac25cd4ec9821470d961831ae2c8d24882276cc
diff --git a/src/armnnTestUtils/TestUtils.hpp b/src/armnnTestUtils/TestUtils.hpp
index 9fea61b..acd0d1b 100644
--- a/src/armnnTestUtils/TestUtils.hpp
+++ b/src/armnnTestUtils/TestUtils.hpp
@@ -1,5 +1,5 @@
 //
-// Copyright © 2017 Arm Ltd and Contributors. All rights reserved.
+// Copyright © 2021-2023 Arm Ltd and Contributors. All rights reserved.
 // SPDX-License-Identifier: MIT
 //
 
@@ -12,6 +12,24 @@
 void Connect(armnn::IConnectableLayer* from, armnn::IConnectableLayer* to, const armnn::TensorInfo& tensorInfo,
              unsigned int fromIndex = 0, unsigned int toIndex = 0);
 
+class LayerNameAndTypeCheck
+{
+public:
+    LayerNameAndTypeCheck(armnn::LayerType layerType, const char* name)
+    : m_layerType(layerType)
+    , m_name(name)
+    {}
+
+    bool operator()(const armnn::Layer* const layer)
+    {
+        return (layer->GetNameStr() == m_name &&
+                layer->GetType() == m_layerType);
+    }
+private:
+    armnn::LayerType m_layerType;
+    const char* m_name;
+};
+
 template <typename LayerT>
 bool IsLayerOfType(const armnn::Layer* const layer)
 {