Line data Source code
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 5767435 : GraphTrimmer::GraphTrimmer(Zone* zone, Graph* graph)
14 2883723 : : graph_(graph), is_live_(graph, 2), live_(zone) {
15 2883712 : live_.reserve(graph->NodeCount());
16 2883809 : }
17 :
18 :
19 2883742 : GraphTrimmer::~GraphTrimmer() {}
20 :
21 :
22 2883778 : void GraphTrimmer::TrimGraph() {
23 : // Mark end node as live.
24 2883778 : MarkAsLive(graph()->end());
25 : // Compute transitive closure of live nodes.
26 486513547 : for (size_t i = 0; i < live_.size(); ++i) {
27 486513923 : Node* const live = live_[i];
28 823549328 : for (Node* const input : live->inputs()) MarkAsLive(input);
29 : }
30 : // Remove dead->live edges.
31 486502923 : for (Node* const live : live_) {
32 : DCHECK(IsLive(live));
33 1478297485 : for (Edge edge : live->use_edges()) {
34 : Node* const user = edge.from();
35 618244315 : if (!IsLive(user)) {
36 36542676 : if (FLAG_trace_turbo_trimming) {
37 0 : OFStream os(stdout);
38 0 : os << "DeadLink: " << *user << "(" << edge.index() << ") -> " << *live
39 0 : << std::endl;
40 : }
41 36542676 : edge.UpdateTo(nullptr);
42 : }
43 : }
44 : }
45 2883801 : }
46 :
47 : } // namespace compiler
48 : } // namespace internal
49 : } // namespace v8
|