// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/compiler/graph-replay.h" #include "src/compiler/common-operator.h" #include "src/compiler/graph.h" #include "src/compiler/graph-inl.h" #include "src/compiler/node.h" #include "src/compiler/operator.h" #include "src/compiler/operator-properties-inl.h" namespace v8 { namespace internal { namespace compiler { #ifdef DEBUG void GraphReplayPrinter::PrintReplay(Graph* graph) { GraphReplayPrinter replay; PrintF(" Node* nil = graph.NewNode(common_builder.Dead());\n"); graph->VisitNodeInputsFromEnd(&replay); } GenericGraphVisit::Control GraphReplayPrinter::Pre(Node* node) { PrintReplayOpCreator(node->op()); PrintF(" Node* n%d = graph.NewNode(op", node->id()); for (int i = 0; i < node->InputCount(); ++i) { PrintF(", nil"); } PrintF("); USE(n%d);\n", node->id()); return GenericGraphVisit::CONTINUE; } void GraphReplayPrinter::PostEdge(Node* from, int index, Node* to) { PrintF(" n%d->ReplaceInput(%d, n%d);\n", from->id(), index, to->id()); } void GraphReplayPrinter::PrintReplayOpCreator(const Operator* op) { IrOpcode::Value opcode = static_cast(op->opcode()); const char* builder = IrOpcode::IsCommonOpcode(opcode) ? "common_builder" : "js_builder"; const char* mnemonic = IrOpcode::IsCommonOpcode(opcode) ? IrOpcode::Mnemonic(opcode) : IrOpcode::Mnemonic(opcode) + 2; PrintF(" op = %s.%s(", builder, mnemonic); switch (opcode) { case IrOpcode::kParameter: case IrOpcode::kNumberConstant: PrintF("0"); break; case IrOpcode::kLoad: PrintF("unique_name"); break; case IrOpcode::kHeapConstant: PrintF("unique_constant"); break; case IrOpcode::kPhi: PrintF("%d", op->InputCount()); break; case IrOpcode::kEffectPhi: PrintF("%d", OperatorProperties::GetEffectInputCount(op)); break; case IrOpcode::kLoop: case IrOpcode::kMerge: PrintF("%d", OperatorProperties::GetControlInputCount(op)); break; default: break; } PrintF(");\n"); } #endif // DEBUG } } } // namespace v8::internal::compiler