2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // See LICENSE file in the project root for full license information.
5 #include "Optimizer.hpp"
6 #include "optimizations/All.hpp"
11 const Optimizer& Optimizer::Get()
13 // Add optimizations here
14 static optimizations::SquashEqualPermuteSiblings squashEqualPermuteSiblings;
15 static optimizations::SquashEqualReshapeSiblings squashEqualReshapeSiblings;
16 static optimizations::OptimizeInversePermutes optimizeInversePermutes;
17 static optimizations::MovePermuteUp movePermuteUp;
18 static optimizations::PermuteAsReshape permuteAsReshape;
19 static optimizations::OptimizeConsecutiveReshapes optimizeConsecutiveReshapes;
21 // Set optimizations in desired order
22 static const Optimizer optimizer({
23 &squashEqualPermuteSiblings,
24 &squashEqualReshapeSiblings,
25 &optimizeInversePermutes,
28 &optimizeConsecutiveReshapes,
34 void Optimizer::Optimize(Graph& graph) const
36 auto it = graph.TopologicalSort().end();
37 // Call TopologicalSort() in every iteration to re-order the list in case layers where added/removed.
38 while (it != graph.TopologicalSort().begin())
41 for (auto&& optimization : m_Optimizations)
43 optimization->Run(graph, it);
45 if ((*it)->IsOutputUnconnected())
47 it = graph.EraseLayer(it);