143282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower/* Copyright 2016 The TensorFlow Authors. All Rights Reserved.
243282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
343282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerLicensed under the Apache License, Version 2.0 (the "License");
443282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFloweryou may not use this file except in compliance with the License.
543282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerYou may obtain a copy of the License at
643282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
743282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower    http://www.apache.org/licenses/LICENSE-2.0
843282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
943282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerUnless required by applicable law or agreed to in writing, software
1043282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerdistributed under the License is distributed on an "AS IS" BASIS,
1143282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1243282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerSee the License for the specific language governing permissions and
1343282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerlimitations under the License.
1443282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower==============================================================================*/
1543282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
1643282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower#include "tensorflow/core/common_runtime/optimization_registry.h"
1743282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
1843282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowernamespace tensorflow {
1943282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
2043282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower// static
2143282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerOptimizationPassRegistry* OptimizationPassRegistry::Global() {
2243282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  static OptimizationPassRegistry* global_optimization_registry =
2343282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower      new OptimizationPassRegistry;
2443282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  return global_optimization_registry;
2543282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower}
2643282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
2743282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowervoid OptimizationPassRegistry::Register(
2843282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower    Grouping grouping, int phase, std::unique_ptr<GraphOptimizationPass> pass) {
2943282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  groups_[grouping][phase].push_back(std::move(pass));
3043282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower}
3143282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
3243282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlowerStatus OptimizationPassRegistry::RunGrouping(
3343282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower    Grouping grouping, const GraphOptimizationPassOptions& options) {
3443282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  auto group = groups_.find(grouping);
3543282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  if (group != groups_.end()) {
3643282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower    for (auto& phase : group->second) {
3743282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower      VLOG(1) << "Running optimization phase " << phase.first;
3843282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower      for (auto& pass : phase.second) {
3943282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower        Status s = pass->Run(options);
4043282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower        if (!s.ok()) return s;
4143282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower      }
4243282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower    }
4343282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  }
4443282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower  return Status::OK();
4543282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower}
4643282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower
4743282ad78cf4a4266fef823b27c4cf88c3ecd8fdA. Unique TensorFlower}  // namespace tensorflow
48