Add an option to propagate Status in GraphOptimizerStagePipelines.
authorRob Sloan <varomodt@google.com>
Wed, 30 May 2018 17:56:02 +0000 (10:56 -0700)
committerTensorFlower Gardener <gardener@tensorflow.org>
Wed, 30 May 2018 17:59:04 +0000 (10:59 -0700)
PiperOrigin-RevId: 198585886

tensorflow/core/grappler/optimizers/graph_optimizer_stage.h

index b0ec967473bbec782fdcfe7dfed9848a791d26fc..2fbdd76a775b59d6f45d6c9edbd1c1f8e66f58ee 100644 (file)
@@ -240,6 +240,25 @@ class GraphOptimizerStagePipeline {
     return false;
   }
 
+  // Pass a node through all registered optimizer stages, until break predicate
+  // is true or a stage fails.
+  //
+  // Returns any stage failure status, or else Status::OK().
+  Status PassThroughAllStagesWithStatus(NodeDef* node, Result* result) {
+    for (auto& stage : stages_) {
+      if (!stage->IsSupported(node)) {
+        continue;
+      }
+      const Status stage_status = stage->TrySimplify(node, result);
+      if (!stage_status.ok()) {
+        return stage_status;
+      } else if (break_predicate_(*result)) {
+        break;
+      }
+    }
+    return Status::OK();
+  }
+
   std::size_t NumStages() { return stages_.size(); }
 
   std::vector<string> StageNames() {