LCOV - code coverage report
Current view: top level - src/compiler - all-nodes.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 23 23 100.0 %
Date: 2019-04-17 Functions: 4 4 100.0 %

          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/all-nodes.h"
       6             : 
       7             : #include "src/compiler/graph.h"
       8             : 
       9             : namespace v8 {
      10             : namespace internal {
      11             : namespace compiler {
      12             : 
      13      531916 : AllNodes::AllNodes(Zone* local_zone, const Graph* graph, bool only_inputs)
      14             :     : reachable(local_zone),
      15             :       is_reachable_(graph->NodeCount(), false, local_zone),
      16      531924 :       only_inputs_(only_inputs) {
      17      531924 :   Mark(local_zone, graph->end(), graph);
      18      531922 : }
      19             : 
      20        3410 : AllNodes::AllNodes(Zone* local_zone, Node* end, const Graph* graph,
      21             :                    bool only_inputs)
      22             :     : reachable(local_zone),
      23             :       is_reachable_(graph->NodeCount(), false, local_zone),
      24        3410 :       only_inputs_(only_inputs) {
      25        3410 :   Mark(local_zone, end, graph);
      26        3410 : }
      27             : 
      28      535329 : void AllNodes::Mark(Zone* local_zone, Node* end, const Graph* graph) {
      29             :   DCHECK_LT(end->id(), graph->NodeCount());
      30     1070658 :   is_reachable_[end->id()] = true;
      31      535329 :   reachable.push_back(end);
      32             :   // Find all nodes reachable from {end}.
      33   103357906 :   for (size_t i = 0; i < reachable.size(); i++) {
      34   370163029 :     for (Node* const input : reachable[i]->inputs()) {
      35   133670228 :       if (input == nullptr) {
      36             :         // TODO(titzer): print a warning.
      37             :         continue;
      38             :       }
      39   267340680 :       if (!is_reachable_[input->id()]) {
      40             :         is_reachable_[input->id()] = true;
      41    50875714 :         reachable.push_back(input);
      42             :       }
      43             :     }
      44    51411282 :     if (!only_inputs_) {
      45        9700 :       for (Node* use : reachable[i]->uses()) {
      46        8946 :         if (use == nullptr || use->id() >= graph->NodeCount()) {
      47             :           continue;
      48             :         }
      49        5964 :         if (!is_reachable_[use->id()]) {
      50             :           is_reachable_[use->id()] = true;
      51         224 :           reachable.push_back(use);
      52             :         }
      53             :       }
      54             :     }
      55             :   }
      56      535333 : }
      57             : 
      58             : }  // namespace compiler
      59             : }  // namespace internal
      60      122004 : }  // namespace v8

Generated by: LCOV version 1.10