IVGCVSW-3962 Return 0 for Neon GetExportFlags()

* Fixes issue where MemImport workload was being
  inserted into a graph when changing from a NEON
  to Ref workload. A MemCopy will now be performed
  instead.
* Improves existing ImportAlignedPointerTest by
  adding check for expected output.

Signed-off-by: James Conroy <james.conroy@arm.com>
Change-Id: I606dbbe0166731c62fbe4cc1966c558ade66d6bb
diff --git a/src/backends/backendsCommon/test/EndToEndTestImpl.hpp b/src/backends/backendsCommon/test/EndToEndTestImpl.hpp
index efaffb9..ee9d2bc 100644
--- a/src/backends/backendsCommon/test/EndToEndTestImpl.hpp
+++ b/src/backends/backendsCommon/test/EndToEndTestImpl.hpp
@@ -369,6 +369,11 @@
 
     std::vector<float> outputData(4);
 
+    std::vector<float> expectedOutput
+    {
+        1.0f, 4.0f, 9.0f, 16.0f
+    };
+
     InputTensors inputTensors
     {
         {0,armnn::ConstTensor(runtime->GetInputTensorInfo(netId, 0), inputData.data())},
@@ -378,8 +383,6 @@
         {0,armnn::Tensor(runtime->GetOutputTensorInfo(netId, 0), outputData.data())}
     };
 
-    // The result of the inference is not important, just the fact that there
-    // should not be CopyMemGeneric workloads.
     runtime->GetProfiler(netId)->EnableProfiling(true);
 
     // Do the inference
@@ -394,12 +397,17 @@
     // Contains ActivationWorkload
     std::size_t found = dump.find("ActivationWorkload");
     BOOST_TEST(found != std::string::npos);
+
     // Contains SyncMemGeneric
     found = dump.find("SyncMemGeneric");
     BOOST_TEST(found != std::string::npos);
+
     // Does not contain CopyMemGeneric
     found = dump.find("CopyMemGeneric");
     BOOST_TEST(found == std::string::npos);
+
+    // Check output is as expected
+    BOOST_TEST(outputData == expectedOutput);
 }
 
 inline void ImportOnlyWorkload(std::vector<BackendId> backends)
diff --git a/src/backends/neon/NeonTensorHandleFactory.cpp b/src/backends/neon/NeonTensorHandleFactory.cpp
index 4ccbb7b..80f46d2 100644
--- a/src/backends/neon/NeonTensorHandleFactory.cpp
+++ b/src/backends/neon/NeonTensorHandleFactory.cpp
@@ -60,7 +60,7 @@
     }
     // If we are not Managing the Memory then we must be importing
     tensorHandle->SetImportEnabledFlag(!IsMemoryManaged);
-    tensorHandle->SetImportFlags(m_ImportFlags);
+    tensorHandle->SetImportFlags(GetImportFlags());
 
     return tensorHandle;
 }
@@ -76,7 +76,7 @@
     }
     // If we are not Managing the Memory then we must be importing
     tensorHandle->SetImportEnabledFlag(!IsMemoryManaged);
-    tensorHandle->SetImportFlags(m_ImportFlags);
+    tensorHandle->SetImportFlags(GetImportFlags());
 
     return tensorHandle;
 }
@@ -99,12 +99,12 @@
 
 MemorySourceFlags NeonTensorHandleFactory::GetExportFlags() const
 {
-    return m_ExportFlags;
+    return 0;
 }
 
 MemorySourceFlags NeonTensorHandleFactory::GetImportFlags() const
 {
-    return m_ImportFlags;
+    return static_cast<MemorySourceFlags>(MemorySource::Malloc);
 }
 
 } // namespace armnn
diff --git a/src/backends/neon/NeonTensorHandleFactory.hpp b/src/backends/neon/NeonTensorHandleFactory.hpp
index d9b6404..8a8ac5c 100644
--- a/src/backends/neon/NeonTensorHandleFactory.hpp
+++ b/src/backends/neon/NeonTensorHandleFactory.hpp
@@ -17,9 +17,7 @@
 {
 public:
     NeonTensorHandleFactory(std::weak_ptr<NeonMemoryManager> mgr)
-                            : m_MemoryManager(mgr),
-                              m_ImportFlags(static_cast<MemorySourceFlags>(MemorySource::Malloc)),
-                              m_ExportFlags(static_cast<MemorySourceFlags>(MemorySource::Malloc))
+                            : m_MemoryManager(mgr)
     {}
 
     std::unique_ptr<ITensorHandle> CreateSubTensorHandle(ITensorHandle& parent,
@@ -50,8 +48,6 @@
 
 private:
     mutable std::shared_ptr<NeonMemoryManager> m_MemoryManager;
-    MemorySourceFlags m_ImportFlags;
-    MemorySourceFlags m_ExportFlags;
 };
 
 } // namespace armnn