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