diff options
Diffstat (limited to 'deps/v8/src/compiler/escape-analysis-reducer.cc')
-rw-r--r-- | deps/v8/src/compiler/escape-analysis-reducer.cc | 49 |
1 files changed, 14 insertions, 35 deletions
diff --git a/deps/v8/src/compiler/escape-analysis-reducer.cc b/deps/v8/src/compiler/escape-analysis-reducer.cc index 313b6396dd..c69b86c488 100644 --- a/deps/v8/src/compiler/escape-analysis-reducer.cc +++ b/deps/v8/src/compiler/escape-analysis-reducer.cc @@ -4,6 +4,7 @@ #include "src/compiler/escape-analysis-reducer.h" +#include "src/compiler/all-nodes.h" #include "src/compiler/js-graph.h" #include "src/counters.h" @@ -28,8 +29,7 @@ EscapeAnalysisReducer::EscapeAnalysisReducer(Editor* editor, JSGraph* jsgraph, escape_analysis_(escape_analysis), zone_(zone), fully_reduced_(static_cast<int>(jsgraph->graph()->NodeCount() * 2), zone), - exists_virtual_allocate_(true) {} - + exists_virtual_allocate_(escape_analysis->ExistsVirtualAllocate()) {} Reduction EscapeAnalysisReducer::Reduce(Node* node) { if (node->id() < static_cast<NodeId>(fully_reduced_.length()) && @@ -105,7 +105,7 @@ Reduction EscapeAnalysisReducer::ReduceLoad(Node* node) { fully_reduced_.Add(node->id()); } if (Node* rep = escape_analysis()->GetReplacement(node)) { - counters()->turbo_escape_loads_replaced()->Increment(); + isolate()->counters()->turbo_escape_loads_replaced()->Increment(); TRACE("Replaced #%d (%s) with #%d (%s)\n", node->id(), node->op()->mnemonic(), rep->id(), rep->op()->mnemonic()); ReplaceWithValue(node, rep); @@ -138,7 +138,7 @@ Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) { } if (escape_analysis()->IsVirtual(node)) { RelaxEffectsAndControls(node); - counters()->turbo_escape_allocs_replaced()->Increment(); + isolate()->counters()->turbo_escape_allocs_replaced()->Increment(); TRACE("Removed allocate #%d from effect chain\n", node->id()); return Changed(node); } @@ -268,7 +268,7 @@ Node* EscapeAnalysisReducer::ReduceDeoptState(Node* node, Node* effect, } } if (node->opcode() == IrOpcode::kFrameState) { - Node* outer_frame_state = NodeProperties::GetFrameStateInput(node, 0); + Node* outer_frame_state = NodeProperties::GetFrameStateInput(node); if (outer_frame_state->opcode() == IrOpcode::kFrameState) { if (Node* ret = ReduceDeoptState(outer_frame_state, effect, multiple_users_rec)) { @@ -277,7 +277,7 @@ Node* EscapeAnalysisReducer::ReduceDeoptState(Node* node, Node* effect, node = clone = jsgraph()->graph()->CloneNode(node); TRACE(" to #%d\n", node->id()); } - NodeProperties::ReplaceFrameStateInput(node, 0, ret); + NodeProperties::ReplaceFrameStateInput(node, ret); } } } @@ -328,40 +328,19 @@ Node* EscapeAnalysisReducer::ReduceStateValueInput(Node* node, int node_index, } -Counters* EscapeAnalysisReducer::counters() const { - return jsgraph_->isolate()->counters(); -} - - -class EscapeAnalysisVerifier final : public AdvancedReducer { - public: - EscapeAnalysisVerifier(Editor* editor, EscapeAnalysis* escape_analysis) - : AdvancedReducer(editor), escape_analysis_(escape_analysis) {} - - Reduction Reduce(Node* node) final { - switch (node->opcode()) { - case IrOpcode::kAllocate: - CHECK(!escape_analysis_->IsVirtual(node)); - break; - default: - break; - } - return NoChange(); - } - - private: - EscapeAnalysis* escape_analysis_; -}; - void EscapeAnalysisReducer::VerifyReplacement() const { #ifdef DEBUG - GraphReducer graph_reducer(zone(), jsgraph()->graph()); - EscapeAnalysisVerifier verifier(&graph_reducer, escape_analysis()); - graph_reducer.AddReducer(&verifier); - graph_reducer.ReduceGraph(); + AllNodes all(zone(), jsgraph()->graph()); + for (Node* node : all.reachable) { + if (node->opcode() == IrOpcode::kAllocate) { + CHECK(!escape_analysis_->IsVirtual(node)); + } + } #endif // DEBUG } +Isolate* EscapeAnalysisReducer::isolate() const { return jsgraph_->isolate(); } + } // namespace compiler } // namespace internal } // namespace v8 |