IVGCVSW-5021 Fix failure in SplitV
authorJan Eilers <jan.eilers@arm.com>
Mon, 29 Jun 2020 15:48:44 +0000 (16:48 +0100)
committerJan Eilers <jan.eilers@arm.com>
Mon, 29 Jun 2020 15:48:44 +0000 (16:48 +0100)
Signed-off-by: Jan Eilers <jan.eilers@arm.com>
Change-Id: I587f601d3e1b9ea11fbc3dc379f24c5ebdcf3cf8

src/armnnTfLiteParser/TfLiteParser.cpp
src/armnnTfLiteParser/test/SplitV.cpp

index 1737da8..7f68199 100644 (file)
@@ -2689,7 +2689,7 @@ void TfLiteParser::ParseSplitV(size_t subgraphIndex, size_t operatorIndex)
             boost::str(
                 boost::format(
                     "The number of dimensions: %1% for input tensors of the "
-                    "split op cannot be greater than %2% %3%")
+                    "SplitV op cannot be greater than %2% %3%")
                 % inputTensorInfo.GetNumDimensions()
                 % MaxNumOfTensorDimensions
                 % CHECK_LOCATION().AsString()));
@@ -2703,7 +2703,6 @@ void TfLiteParser::ParseSplitV(size_t subgraphIndex, size_t operatorIndex)
 
     // Set split sizes
     CHECK_VALID_SIZE(splitsInfo.GetNumDimensions(), 1);
-    std::vector<int> splitsData(0);
     unsigned int numSplits{0};
 
     if(options)
@@ -2720,17 +2719,11 @@ void TfLiteParser::ParseSplitV(size_t subgraphIndex, size_t operatorIndex)
         throw ParseException("SplitV has invalid number of splits");
     }
 
-    splitsData.resize(numSplits);
+    std::vector<int> splitsData(numSplits);
     BufferRawPtr splitsBufferPtr = GetBuffer(m_Model, splitsTensor->buffer);
-    unsigned int idx{0};
-
-    for(auto& split: splitsData)
-    {
-        split = splitsBufferPtr->data[idx];
-        idx++;
-    }
+    ::memcpy(splitsData.data(), splitsBufferPtr->data.data(), splitsInfo.GetNumBytes());
 
-    idx = 0;
+    unsigned int idx = 0;
     int numInferred{0};
     unsigned int inferIdx{0};
     int splitSum{0};
index 59afeec..9541114 100644 (file)
@@ -121,7 +121,7 @@ struct SplitVFixture : public ParserFlatbuffersFixture
 struct SimpleSplitVAxisOneFixture : SplitVFixture
 {
     SimpleSplitVAxisOneFixture()
-        : SplitVFixture( "[ 4, 2, 2, 2 ]", "[ 1, 3 ]", "[ 2 ]","[ ]", "2",
+        : SplitVFixture( "[ 4, 2, 2, 2 ]", "[ 1, 0, 0, 0, 3, 0, 0, 0 ]", "[ 2 ]","[ ]", "2",
                          "[ 1, 2, 2, 2 ]", "[ 3, 2, 2, 2 ]", "[ 0, 0, 0, 0 ]", "FLOAT32")
     {}
 };
@@ -143,7 +143,7 @@ BOOST_FIXTURE_TEST_CASE(ParseAxisOneSplitVTwo, SimpleSplitVAxisOneFixture)
 struct SimpleSplitVAxisTwoFixture : SplitVFixture
 {
     SimpleSplitVAxisTwoFixture()
-        : SplitVFixture( "[ 2, 4, 2, 2 ]", "[ 3, 1 ]", "[ 2 ]","[ ]", "2",
+        : SplitVFixture( "[ 2, 4, 2, 2 ]", "[ 3, 0, 0, 0, 1, 0, 0, 0 ]", "[ 2 ]","[ ]", "2",
                          "[ 2, 3, 2, 2 ]", "[ 2, 1, 2, 2 ]", "[ 1, 0, 0, 0 ]", "FLOAT32")
     {}
 };
@@ -165,7 +165,7 @@ BOOST_FIXTURE_TEST_CASE(ParseAxisTwoSplitVTwo, SimpleSplitVAxisTwoFixture)
 struct SimpleSplitVAxisThreeFixture : SplitVFixture
 {
     SimpleSplitVAxisThreeFixture()
-        : SplitVFixture( "[ 2, 2, 4, 2 ]", "[ 1, 3 ]", "[ 2 ]","[ ]", "2",
+        : SplitVFixture( "[ 2, 2, 4, 2 ]", "[ 1, 0, 0, 0, 3, 0, 0, 0 ]", "[ 2 ]","[ ]", "2",
                          "[ 2, 2, 1, 2 ]", "[ 2, 2, 3, 2 ]", "[ 2, 0, 0, 0 ]", "FLOAT32")
     {}
 };
@@ -187,7 +187,7 @@ BOOST_FIXTURE_TEST_CASE(ParseAxisThreeSplitVTwo, SimpleSplitVAxisThreeFixture)
 struct SimpleSplitVAxisFourFixture : SplitVFixture
 {
     SimpleSplitVAxisFourFixture()
-        : SplitVFixture( "[ 2, 2, 2, 4 ]", "[ 3, 1 ]", "[ 2 ]","[ ]", "2",
+        : SplitVFixture( "[ 2, 2, 2, 4 ]", "[ 3, 0, 0, 0, 1, 0, 0, 0 ]", "[ 2 ]","[ ]", "2",
                          "[ 2, 2, 2, 3 ]", "[ 2, 2, 2, 1 ]", "[ 3, 0, 0, 0 ]", "FLOAT32")
     {}
 };