V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
graph-trimmer.cc
1 // Copyright 2015 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-trimmer.h"
6 
7 #include "src/compiler/graph.h"
8 
9 namespace v8 {
10 namespace internal {
11 namespace compiler {
12 
13 GraphTrimmer::GraphTrimmer(Zone* zone, Graph* graph)
14  : graph_(graph), is_live_(graph, 2), live_(zone) {
15  live_.reserve(graph->NodeCount());
16 }
17 
18 
19 GraphTrimmer::~GraphTrimmer() = default;
20 
21 
22 void GraphTrimmer::TrimGraph() {
23  // Mark end node as live.
24  MarkAsLive(graph()->end());
25  // Compute transitive closure of live nodes.
26  for (size_t i = 0; i < live_.size(); ++i) {
27  Node* const live = live_[i];
28  for (Node* const input : live->inputs()) MarkAsLive(input);
29  }
30  // Remove dead->live edges.
31  for (Node* const live : live_) {
32  DCHECK(IsLive(live));
33  for (Edge edge : live->use_edges()) {
34  Node* const user = edge.from();
35  if (!IsLive(user)) {
36  if (FLAG_trace_turbo_trimming) {
37  StdoutStream{} << "DeadLink: " << *user << "(" << edge.index()
38  << ") -> " << *live << std::endl;
39  }
40  edge.UpdateTo(nullptr);
41  }
42  }
43  }
44 }
45 
46 } // namespace compiler
47 } // namespace internal
48 } // namespace v8
Definition: libplatform.h:13