17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file.
47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_COMPILER_GRAPH_REPLAY_H_
67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_COMPILER_GRAPH_REPLAY_H_
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node.h"
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 {
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal {
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler {
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
141af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org// Forward declarations.
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass Graph;
167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Helper class to print a full replay of a graph. This replay can be used to
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// materialize the same graph within a C++ unit test and hence test subsequent
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// optimization passes on a graph without going through the construction steps.
201af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.orgclass GraphReplayPrinter FINAL : public NullNodeVisitor {
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public:
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifdef DEBUG
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  static void PrintReplay(Graph* graph);
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#else
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  static void PrintReplay(Graph* graph) {}
267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  GenericGraphVisit::Control Pre(Node* node);
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  void PostEdge(Node* from, int index, Node* to);
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org private:
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  GraphReplayPrinter() {}
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
341af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org  static void PrintReplayOpCreator(const Operator* op);
357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  DISALLOW_COPY_AND_ASSIGN(GraphReplayPrinter);
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org};
381af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org
391af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org}  // namespace compiler
401af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org}  // namespace internal
411af4d9551ad496a28c342004b1a4e2a3840228f7machenbach@chromium.org}  // namespace v8
427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif  // V8_COMPILER_GRAPH_REPLAY_H_
44