Line data Source code
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/node-origin-table.h"
6 : #include "src/compiler/graph.h"
7 : #include "src/compiler/node-aux-data.h"
8 :
9 : namespace v8 {
10 : namespace internal {
11 : namespace compiler {
12 :
13 703 : void NodeOrigin::PrintJson(std::ostream& out) const {
14 703 : out << "{ ";
15 703 : switch (origin_kind_) {
16 : case kGraphNode:
17 319 : out << "\"nodeId\" : ";
18 319 : break;
19 : case kWasmBytecode:
20 384 : out << "\"bytecodePosition\" : ";
21 384 : break;
22 : }
23 : out << created_from();
24 703 : out << ", \"reducer\" : \"" << reducer_name() << "\"";
25 703 : out << ", \"phase\" : \"" << phase_name() << "\"";
26 703 : out << "}";
27 703 : }
28 :
29 0 : class NodeOriginTable::Decorator final : public GraphDecorator {
30 : public:
31 9 : explicit Decorator(NodeOriginTable* origins) : origins_(origins) {}
32 :
33 78 : void Decorate(Node* node) final {
34 78 : origins_->SetNodeOrigin(node, origins_->current_origin_);
35 78 : }
36 :
37 : private:
38 : NodeOriginTable* origins_;
39 : };
40 :
41 1502730 : NodeOriginTable::NodeOriginTable(Graph* graph)
42 : : graph_(graph),
43 : decorator_(nullptr),
44 : current_origin_(NodeOrigin::Unknown()),
45 : current_phase_name_("unknown"),
46 4508190 : table_(graph->zone()) {}
47 :
48 9 : void NodeOriginTable::AddDecorator() {
49 : DCHECK_NULL(decorator_);
50 18 : decorator_ = new (graph_->zone()) Decorator(this);
51 9 : graph_->AddDecorator(decorator_);
52 9 : }
53 :
54 9 : void NodeOriginTable::RemoveDecorator() {
55 : DCHECK_NOT_NULL(decorator_);
56 9 : graph_->RemoveDecorator(decorator_);
57 9 : decorator_ = nullptr;
58 9 : }
59 :
60 934 : NodeOrigin NodeOriginTable::GetNodeOrigin(Node* node) const {
61 934 : return table_.Get(node);
62 : }
63 :
64 96 : void NodeOriginTable::SetNodeOrigin(Node* node, const NodeOrigin& no) {
65 174 : table_.Set(node, no);
66 96 : }
67 :
68 9 : void NodeOriginTable::PrintJson(std::ostream& os) const {
69 9 : os << "{";
70 : bool needs_comma = false;
71 183 : for (auto i : table_) {
72 174 : NodeOrigin no = i.second;
73 174 : if (no.IsKnown()) {
74 132 : if (needs_comma) {
75 123 : os << ",";
76 : }
77 : os << "\"" << i.first << "\""
78 132 : << ": ";
79 132 : no.PrintJson(os);
80 : needs_comma = true;
81 : }
82 : }
83 9 : os << "}";
84 9 : }
85 :
86 : } // namespace compiler
87 : } // namespace internal
88 122004 : } // namespace v8
|