// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "../TestUtils.hpp" #include #include using namespace armnn; TEST_SUITE("Optimizer") { using namespace armnn::optimizations; TEST_CASE("OptimizeInverseConversionsTest") { armnn::Graph graph; auto output = graph.AddLayer(0, "output"); graph.InsertNewLayer(output->GetInputSlot(0), 0, "input"); // Fp32ToFp16 conversion followed by an inverse Fp16ToFp32 conversion graph.InsertNewLayer(output->GetInputSlot(0), "convert1"); graph.InsertNewLayer(output->GetInputSlot(0), "convert2"); graph.InsertNewLayer(output->GetInputSlot(0), Convolution2dDescriptor(), "conv"); // Fp16ToFp32 conversion followed by an inverse Fp32ToFp16 conversion graph.InsertNewLayer(output->GetInputSlot(0), "convert3"); graph.InsertNewLayer(output->GetInputSlot(0), "convert4"); CHECK(CheckSequence(graph.cbegin(), graph.cend(), &IsLayerOfType, &IsLayerOfType, &IsLayerOfType, &IsLayerOfType, &IsLayerOfType, &IsLayerOfType, &IsLayerOfType)); armnn::Optimizer::Pass( graph, armnn::MakeOptimizations(OptimizeInverseConversionsFp16(), OptimizeInverseConversionsFp32())); // Check that all consecutive inverse conversions are removed CHECK(CheckSequence(graph.cbegin(), graph.cend(), &IsLayerOfType, &IsLayerOfType, &IsLayerOfType)); } }