// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "../TestUtils.hpp" #include #include using namespace armnn; BOOST_AUTO_TEST_SUITE(Optimizer) using namespace armnn::optimizations; BOOST_AUTO_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"); BOOST_TEST(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 BOOST_TEST(CheckSequence(graph.cbegin(), graph.cend(), &IsLayerOfType, &IsLayerOfType, &IsLayerOfType)); } BOOST_AUTO_TEST_SUITE_END()