From baa4cf02f2733bdb8e680a0e8b08e2f14d1bf9eb Mon Sep 17 00:00:00 2001 From: Slava Shklyaev Date: Thu, 16 Apr 2020 14:58:55 +0100 Subject: [PATCH] Exclude unused operands from removeOperandTest Bug: 148208229 Test: TestGenerated/ValidationTest.Test/nnapi_sample*_while*_unused_output* Change-Id: I39bebefd0e40d370882d614d4beb97ab36c9da8f --- .../1.3/vts/functional/ValidateModel.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/neuralnetworks/1.3/vts/functional/ValidateModel.cpp b/neuralnetworks/1.3/vts/functional/ValidateModel.cpp index 4c0100e219..e590fdad2d 100644 --- a/neuralnetworks/1.3/vts/functional/ValidateModel.cpp +++ b/neuralnetworks/1.3/vts/functional/ValidateModel.cpp @@ -535,13 +535,18 @@ static void removeOperand(Model* model, uint32_t index) { removeValueAndDecrementGreaterValues(&model->main.outputIndexes, index); } -static bool removeOperandSkip(size_t operand, const Model& model) { +static bool removeOperandSkip(size_t operandIndex, const Model& model) { + const Operand& operand = model.main.operands[operandIndex]; + if (operand.numberOfConsumers == 0) { + // Removing an unused operand has no effect. + return true; + } for (const Operation& operation : model.main.operations) { // Skip removeOperandTest for the following operations. // - SPLIT's outputs are not checked during prepareModel. if (operation.type == OperationType::SPLIT) { - for (const size_t outOprand : operation.outputs) { - if (operand == outOprand) { + for (const size_t index : operation.outputs) { + if (index == operandIndex) { return true; } } @@ -556,8 +561,8 @@ static bool removeOperandSkip(size_t operand, const Model& model) { operation.type == OperationType::UNIDIRECTIONAL_SEQUENCE_RNN || operation.type == OperationType::BIDIRECTIONAL_SEQUENCE_LSTM || operation.type == OperationType::BIDIRECTIONAL_SEQUENCE_RNN) { - for (const size_t outOprand : operation.outputs) { - if (operand == outOprand) { + for (const size_t index : operation.outputs) { + if (index == operandIndex) { return true; } }