OLD | NEW |
(Empty) | |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "src/compiler/graph-replay.h" |
| 6 |
| 7 #include "src/compiler/common-operator.h" |
| 8 #include "src/compiler/graph.h" |
| 9 #include "src/compiler/graph-inl.h" |
| 10 #include "src/compiler/node.h" |
| 11 #include "src/compiler/operator.h" |
| 12 #include "src/compiler/operator-properties-inl.h" |
| 13 |
| 14 namespace v8 { |
| 15 namespace internal { |
| 16 namespace compiler { |
| 17 |
| 18 #ifdef DEBUG |
| 19 |
| 20 void GraphReplayPrinter::PrintReplay(Graph* graph) { |
| 21 GraphReplayPrinter replay; |
| 22 PrintF(" Node* nil = graph.NewNode(common_builder.Dead());\n"); |
| 23 graph->VisitNodeInputsFromEnd(&replay); |
| 24 } |
| 25 |
| 26 |
| 27 GenericGraphVisit::Control GraphReplayPrinter::Pre(Node* node) { |
| 28 PrintReplayOpCreator(node->op()); |
| 29 PrintF(" Node* n%d = graph.NewNode(op", node->id()); |
| 30 for (int i = 0; i < node->InputCount(); ++i) { |
| 31 PrintF(", nil"); |
| 32 } |
| 33 PrintF("); USE(n%d);\n", node->id()); |
| 34 return GenericGraphVisit::CONTINUE; |
| 35 } |
| 36 |
| 37 |
| 38 void GraphReplayPrinter::PostEdge(Node* from, int index, Node* to) { |
| 39 PrintF(" n%d->ReplaceInput(%d, n%d);\n", from->id(), index, to->id()); |
| 40 } |
| 41 |
| 42 |
| 43 void GraphReplayPrinter::PrintReplayOpCreator(Operator* op) { |
| 44 IrOpcode::Value opcode = static_cast<IrOpcode::Value>(op->opcode()); |
| 45 const char* builder = |
| 46 IrOpcode::IsCommonOpcode(opcode) ? "common_builder" : "js_builder"; |
| 47 const char* mnemonic = IrOpcode::IsCommonOpcode(opcode) |
| 48 ? IrOpcode::Mnemonic(opcode) |
| 49 : IrOpcode::Mnemonic(opcode) + 2; |
| 50 PrintF(" op = %s.%s(", builder, mnemonic); |
| 51 switch (opcode) { |
| 52 case IrOpcode::kParameter: |
| 53 case IrOpcode::kNumberConstant: |
| 54 PrintF("0"); |
| 55 break; |
| 56 case IrOpcode::kLoad: |
| 57 PrintF("unique_name"); |
| 58 break; |
| 59 case IrOpcode::kHeapConstant: |
| 60 PrintF("unique_constant"); |
| 61 break; |
| 62 case IrOpcode::kPhi: |
| 63 PrintF("%d", op->InputCount()); |
| 64 break; |
| 65 case IrOpcode::kEffectPhi: |
| 66 PrintF("%d", OperatorProperties::GetEffectInputCount(op)); |
| 67 break; |
| 68 case IrOpcode::kLoop: |
| 69 case IrOpcode::kMerge: |
| 70 PrintF("%d", OperatorProperties::GetControlInputCount(op)); |
| 71 break; |
| 72 default: |
| 73 break; |
| 74 } |
| 75 PrintF(");\n"); |
| 76 } |
| 77 |
| 78 #endif // DEBUG |
| 79 } |
| 80 } |
| 81 } // namespace v8::internal::compiler |
OLD | NEW |