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

          Line data    Source code
       1             : // Copyright 2016 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/checkpoint-elimination.h"
       6             : 
       7             : #include "src/compiler/node-properties.h"
       8             : 
       9             : namespace v8 {
      10             : namespace internal {
      11             : namespace compiler {
      12             : 
      13     1392522 : CheckpointElimination::CheckpointElimination(Editor* editor)
      14     1392522 :     : AdvancedReducer(editor) {}
      15             : 
      16             : namespace {
      17             : 
      18             : // The given checkpoint is redundant if it is effect-wise dominated by another
      19             : // checkpoint and there is no observable write in between. For now we consider
      20             : // a linear effect chain only instead of true effect-wise dominance.
      21     9295768 : bool IsRedundantCheckpoint(Node* node) {
      22     9295768 :   Node* effect = NodeProperties::GetEffectInput(node);
      23    24653384 :   while (effect->op()->HasProperty(Operator::kNoWrite) &&
      24             :          effect->op()->EffectInputCount() == 1) {
      25     4839981 :     if (effect->opcode() == IrOpcode::kCheckpoint) return true;
      26     4249451 :     effect = NodeProperties::GetEffectInput(effect);
      27             :   }
      28             :   return false;
      29             : }
      30             : 
      31             : }  // namespace
      32             : 
      33     9295764 : Reduction CheckpointElimination::ReduceCheckpoint(Node* node) {
      34             :   DCHECK_EQ(IrOpcode::kCheckpoint, node->opcode());
      35     9295764 :   if (IsRedundantCheckpoint(node)) {
      36      590536 :     return Replace(NodeProperties::GetEffectInput(node));
      37             :   }
      38             :   return NoChange();
      39             : }
      40             : 
      41   103827317 : Reduction CheckpointElimination::Reduce(Node* node) {
      42             :   DisallowHeapAccess no_heap_access;
      43   103827317 :   switch (node->opcode()) {
      44             :     case IrOpcode::kCheckpoint:
      45     9295764 :       return ReduceCheckpoint(node);
      46             :     default:
      47             :       break;
      48             :   }
      49             :   return NoChange();
      50             : }
      51             : 
      52             : }  // namespace compiler
      53             : }  // namespace internal
      54      122004 : }  // namespace v8

Generated by: LCOV version 1.10