IVGCVSW-5012 Enable zero copy for Neon

 * Allow memory import if padding is not required in Neon
 * AddMockImportBackend for fallback tests
 * Refactor GraphUtils
 * Memory import unit tests
 * Fallback unit tests

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Ic2e141e12774bf6d915e77745b6f6d2d83d9b82d
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 132924a..94a9961 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -912,7 +912,15 @@
 
             if ((dstFactory->GetImportFlags() & srcFactory->GetExportFlags()) != 0)
             {
-                return EdgeStrategy::ExportToTarget;
+                auto srcCapability = srcFactory->GetCapabilities(&layer, &layer, CapabilityClass::PaddingRequired);
+                auto dstCapability = dstFactory->GetCapabilities(&connectedLayer,
+                                                                 &connectedLayer,
+                                                                 CapabilityClass::PaddingRequired);
+                // Do not require memory copy if the source and destination do not require padding.
+                if (srcCapability.empty() && dstCapability.empty())
+                {
+                    return EdgeStrategy::ExportToTarget;
+                }
             }
         }
     }