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 Optimizer::Optimizer()
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 m_Optimizations = {&squashEqualPermuteSiblings,
23 &squashEqualReshapeSiblings,
24 &optimizeInversePermutes,
27 &optimizeConsecutiveReshapes,
31 void Optimizer::Optimize(Graph& graph)
34 auto it = graph.TopologicalSort().end();
35 // Call TopologicalSort() in every iteration to re-order the list in case layers where added/removed.
36 while (it != graph.TopologicalSort().begin())
39 for (auto&& optimization : optimizer.m_Optimizations)
41 optimization->Run(graph, **it);
43 if ((*it)->IsOutputUnconnected())
45 it = graph.EraseLayer(it);