LCOV - code coverage report
Current view: top level - src/crankshaft - hydrogen-sce.cc (source / functions) Hit Total Coverage
Test: app.info Lines: 12 12 100.0 %
Date: 2017-04-26 Functions: 1 1 100.0 %

          Line data    Source code
       1             : // Copyright 2013 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/crankshaft/hydrogen-sce.h"
       6             : #include "src/objects-inl.h"
       7             : 
       8             : namespace v8 {
       9             : namespace internal {
      10             : 
      11      283733 : void HStackCheckEliminationPhase::Run() {
      12             :   // For each loop block walk the dominator tree from the backwards branch to
      13             :   // the loop header. If a call instruction is encountered the backwards branch
      14             :   // is dominated by a call and the stack check in the backwards branch can be
      15             :   // removed.
      16     9590758 :   for (int i = 0; i < graph()->blocks()->length(); i++) {
      17     9311100 :     HBasicBlock* block = graph()->blocks()->at(i);
      18     4511649 :     if (block->IsLoopHeader()) {
      19       59921 :       HBasicBlock* back_edge = block->loop_information()->GetLastBackEdge();
      20      248798 :       HBasicBlock* dominator = back_edge;
      21             :       while (true) {
      22     2044825 :         for (HInstructionIterator it(dominator); !it.Done(); it.Advance()) {
      23     1740180 :           if (it.Current()->HasStackCheck()) {
      24        4072 :             block->loop_information()->stack_check()->Eliminate();
      25             :             break;
      26             :           }
      27             :         }
      28             : 
      29             :         // Done when the loop header is processed.
      30      308716 :         if (dominator == block) break;
      31             : 
      32             :         // Move up the dominator tree.
      33             :         dominator = dominator->dominator();
      34      248798 :       }
      35             :     }
      36             :   }
      37      283730 : }
      38             : 
      39             : }  // namespace internal
      40             : }  // namespace v8

Generated by: LCOV version 1.10