13cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower/* Copyright 2018 The TensorFlow Authors. All Rights Reserved.
23cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
33cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerLicensed under the Apache License, Version 2.0 (the "License");
43cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFloweryou may not use this file except in compliance with the License.
53cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerYou may obtain a copy of the License at
63cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
73cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower    http://www.apache.org/licenses/LICENSE-2.0
83cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
93cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerUnless required by applicable law or agreed to in writing, software
103cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerdistributed under the License is distributed on an "AS IS" BASIS,
113cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerSee the License for the specific language governing permissions and
133cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerlimitations under the License.
143cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower==============================================================================*/
153cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
163cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#ifndef TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_
173cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#define TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_
183cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
193cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include <unordered_set>
203cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/grappler/optimizers/graph_optimizer.h"
213cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/grappler/utils.h"
223cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#include "tensorflow/core/protobuf/rewriter_config.pb.h"
233cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
243cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowernamespace tensorflow {
253cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowernamespace grappler {
263cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
273cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlowerclass LoopOptimizer : public GraphOptimizer {
283cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower public:
293cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  LoopOptimizer() : opt_level_(RewriterConfig::ON) {}
303cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  explicit LoopOptimizer(RewriterConfig::Toggle opt_level)
313cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower      : opt_level_(opt_level) {}
323cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  ~LoopOptimizer() override {}
333cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
343cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  string name() const override { return "loop_optimizer"; };
353cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
363cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  Status Optimize(Cluster* cluster, const GrapplerItem& item,
373cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower                  GraphDef* optimized_graph) override;
383cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
393cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  void Feedback(Cluster* cluster, const GrapplerItem& item,
403cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower                const GraphDef& optimized_graph, double result) override;
413cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
423cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower private:
433cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower  RewriterConfig::Toggle opt_level_;
443cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower};
453cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
463cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower}  // end namespace grappler
473cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower}  // end namespace tensorflow
483cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower
493cbb41abe603aafcd1abcdd9ed6284e020177b08A. Unique TensorFlower#endif  // TENSORFLOW_CORE_GRAPPLER_OPTIMIZERS_LOOP_OPTIMIZER_H_
50