V8 Project
hydrogen-escape-analysis.h
Go to the documentation of this file.
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_HYDROGEN_ESCAPE_ANALYSIS_H_
6 #define V8_HYDROGEN_ESCAPE_ANALYSIS_H_
7 
8 #include "src/allocation.h"
9 #include "src/hydrogen.h"
10 
11 namespace v8 {
12 namespace internal {
13 
14 
15 class HEscapeAnalysisPhase : public HPhase {
16  public:
17  explicit HEscapeAnalysisPhase(HGraph* graph)
18  : HPhase("H_Escape analysis", graph),
19  captured_(0, zone()),
23  block_states_(graph->blocks()->length(), zone()) { }
24 
25  void Run();
26 
27  private:
28  void CollectCapturedValues();
29  bool HasNoEscapingUses(HValue* value, int size);
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  HCapturedObject* StateAt(HBasicBlock* block) {
45  return block_states_.at(block->block_id());
46  }
47 
48  void SetStateAt(HBasicBlock* block, HCapturedObject* state) {
49  block_states_.Set(block->block_id(), state);
50  }
51 
52  // List of allocations captured during collection phase.
54 
55  // Number of captured objects on which scalar replacement was done.
57 
58  // Number of scalar values tracked during scalar replacement phase.
61 
62  // Map of block IDs to the data-flow state at block entry during the
63  // scalar replacement phase.
65 };
66 
67 
68 } } // namespace v8::internal
69 
70 #endif // V8_HYDROGEN_ESCAPE_ANALYSIS_H_
HCapturedObject * NewStateForAllocation(HInstruction *prev)
HValue * NewMapCheckAndInsert(HCapturedObject *state, HCheckMaps *mapcheck)
HPhi * NewPhiAndInsert(HBasicBlock *block, HValue *incoming_value, int index)
bool HasNoEscapingUses(HValue *value, int size)
HCapturedObject * NewState(HInstruction *prev)
HValue * NewLoadReplacement(HLoadNamedField *load, HValue *load_value)
HCapturedObject * NewStateForLoopHeader(HInstruction *prev, HCapturedObject *)
void SetStateAt(HBasicBlock *block, HCapturedObject *state)
ZoneList< HCapturedObject * > block_states_
HCapturedObject * StateAt(HBasicBlock *block)
HCapturedObject * NewStateCopy(HInstruction *prev, HCapturedObject *state)
HGraph * graph() const
Definition: hydrogen.h:2802
void Set(int index, const T &element)
Definition: list-inl.h:85
T & at(int i) const
Definition: list.h:69
enable harmony numeric enable harmony object literal extensions Optimize object size
Debugger support for the V8 JavaScript engine.
Definition: accessors.cc:20