LCOV - code coverage report
Current view: top level - src/crankshaft - hydrogen-escape-analysis.h (source / functions) Hit Total Coverage
Test: app.info Lines: 7 7 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             : #ifndef V8_CRANKSHAFT_HYDROGEN_ESCAPE_ANALYSIS_H_
       6             : #define V8_CRANKSHAFT_HYDROGEN_ESCAPE_ANALYSIS_H_
       7             : 
       8             : #include "src/allocation.h"
       9             : #include "src/crankshaft/hydrogen.h"
      10             : 
      11             : namespace v8 {
      12             : namespace internal {
      13             : 
      14             : 
      15      283730 : class HEscapeAnalysisPhase : public HPhase {
      16             :  public:
      17      283727 :   explicit HEscapeAnalysisPhase(HGraph* graph)
      18             :       : HPhase("H_Escape analysis", graph),
      19             :         captured_(0, zone()),
      20             :         number_of_objects_(0),
      21             :         number_of_values_(0),
      22             :         cumulative_values_(0),
      23      283729 :         block_states_(graph->blocks()->length(), zone()) { }
      24             : 
      25             :   void Run();
      26             : 
      27             :  private:
      28             :   void CollectCapturedValues();
      29             :   bool HasNoEscapingUses(HValue* value, int size);
      30             :   void PerformScalarReplacement();
      31             :   void AnalyzeDataFlow(HInstruction* instr);
      32             : 
      33             :   HCapturedObject* NewState(HInstruction* prev);
      34             :   HCapturedObject* NewStateForAllocation(HInstruction* prev);
      35             :   HCapturedObject* NewStateForLoopHeader(HInstruction* prev, HCapturedObject*);
      36             :   HCapturedObject* NewStateCopy(HInstruction* prev, HCapturedObject* state);
      37             : 
      38             :   HPhi* NewPhiAndInsert(HBasicBlock* block, HValue* incoming_value, int index);
      39             : 
      40             :   HValue* NewMapCheckAndInsert(HCapturedObject* state, HCheckMaps* mapcheck);
      41             : 
      42             :   HValue* NewLoadReplacement(HLoadNamedField* load, HValue* load_value);
      43             : 
      44      124940 :   HCapturedObject* StateAt(HBasicBlock* block) {
      45      124940 :     return block_states_.at(block->block_id());
      46             :   }
      47             : 
      48       94213 :   void SetStateAt(HBasicBlock* block, HCapturedObject* state) {
      49       94213 :     block_states_.Set(block->block_id(), state);
      50             :   }
      51             : 
      52             :   // List of allocations captured during collection phase.
      53             :   ZoneList<HInstruction*> captured_;
      54             : 
      55             :   // Number of captured objects on which scalar replacement was done.
      56             :   int number_of_objects_;
      57             : 
      58             :   // Number of scalar values tracked during scalar replacement phase.
      59             :   int number_of_values_;
      60             :   int cumulative_values_;
      61             : 
      62             :   // Map of block IDs to the data-flow state at block entry during the
      63             :   // scalar replacement phase.
      64             :   ZoneList<HCapturedObject*> block_states_;
      65             : };
      66             : 
      67             : 
      68             : }  // namespace internal
      69             : }  // namespace v8
      70             : 
      71             : #endif  // V8_CRANKSHAFT_HYDROGEN_ESCAPE_ANALYSIS_H_

Generated by: LCOV version 1.10