Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: src/compiler/escape-analysis-reducer.cc

Issue 1984203002: [turbofan] Simplify escape analysis VerifyReplacement. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_turbofan-escape-sidechannel
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/compiler/escape-analysis-reducer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/escape-analysis-reducer.h" 5 #include "src/compiler/escape-analysis-reducer.h"
6 6
7 #include "src/compiler/all-nodes.h"
7 #include "src/compiler/js-graph.h" 8 #include "src/compiler/js-graph.h"
8 #include "src/counters.h" 9 #include "src/counters.h"
9 10
10 namespace v8 { 11 namespace v8 {
11 namespace internal { 12 namespace internal {
12 namespace compiler { 13 namespace compiler {
13 14
14 #ifdef DEBUG 15 #ifdef DEBUG
15 #define TRACE(...) \ 16 #define TRACE(...) \
16 do { \ 17 do { \
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 } 98 }
98 99
99 100
100 Reduction EscapeAnalysisReducer::ReduceLoad(Node* node) { 101 Reduction EscapeAnalysisReducer::ReduceLoad(Node* node) {
101 DCHECK(node->opcode() == IrOpcode::kLoadField || 102 DCHECK(node->opcode() == IrOpcode::kLoadField ||
102 node->opcode() == IrOpcode::kLoadElement); 103 node->opcode() == IrOpcode::kLoadElement);
103 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) { 104 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
104 fully_reduced_.Add(node->id()); 105 fully_reduced_.Add(node->id());
105 } 106 }
106 if (Node* rep = escape_analysis()->GetReplacement(node)) { 107 if (Node* rep = escape_analysis()->GetReplacement(node)) {
107 counters()->turbo_escape_loads_replaced()->Increment(); 108 isolate()->counters()->turbo_escape_loads_replaced()->Increment();
108 TRACE("Replaced #%d (%s) with #%d (%s)\n", node->id(), 109 TRACE("Replaced #%d (%s) with #%d (%s)\n", node->id(),
109 node->op()->mnemonic(), rep->id(), rep->op()->mnemonic()); 110 node->op()->mnemonic(), rep->id(), rep->op()->mnemonic());
110 ReplaceWithValue(node, rep); 111 ReplaceWithValue(node, rep);
111 return Replace(rep); 112 return Replace(rep);
112 } 113 }
113 return NoChange(); 114 return NoChange();
114 } 115 }
115 116
116 117
117 Reduction EscapeAnalysisReducer::ReduceStore(Node* node) { 118 Reduction EscapeAnalysisReducer::ReduceStore(Node* node) {
(...skipping 12 matching lines...) Expand all
130 } 131 }
131 132
132 133
133 Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) { 134 Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) {
134 DCHECK_EQ(node->opcode(), IrOpcode::kAllocate); 135 DCHECK_EQ(node->opcode(), IrOpcode::kAllocate);
135 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) { 136 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
136 fully_reduced_.Add(node->id()); 137 fully_reduced_.Add(node->id());
137 } 138 }
138 if (escape_analysis()->IsVirtual(node)) { 139 if (escape_analysis()->IsVirtual(node)) {
139 RelaxEffectsAndControls(node); 140 RelaxEffectsAndControls(node);
140 counters()->turbo_escape_allocs_replaced()->Increment(); 141 isolate()->counters()->turbo_escape_allocs_replaced()->Increment();
141 TRACE("Removed allocate #%d from effect chain\n", node->id()); 142 TRACE("Removed allocate #%d from effect chain\n", node->id());
142 return Changed(node); 143 return Changed(node);
143 } 144 }
144 return NoChange(); 145 return NoChange();
145 } 146 }
146 147
147 148
148 Reduction EscapeAnalysisReducer::ReduceFinishRegion(Node* node) { 149 Reduction EscapeAnalysisReducer::ReduceFinishRegion(Node* node) {
149 DCHECK_EQ(node->opcode(), IrOpcode::kFinishRegion); 150 DCHECK_EQ(node->opcode(), IrOpcode::kFinishRegion);
150 Node* effect = NodeProperties::GetEffectInput(node, 0); 151 Node* effect = NodeProperties::GetEffectInput(node, 0);
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 TRACE("No object state replacement for #%d at effect #%d available.\n", 321 TRACE("No object state replacement for #%d at effect #%d available.\n",
321 input->id(), effect->id()); 322 input->id(), effect->id());
322 UNREACHABLE(); 323 UNREACHABLE();
323 } 324 }
324 } 325 }
325 } 326 }
326 return clone; 327 return clone;
327 } 328 }
328 329
329 330
330 Counters* EscapeAnalysisReducer::counters() const { 331 void EscapeAnalysisReducer::VerifyReplacement() const {
331 return jsgraph_->isolate()->counters(); 332 #ifdef DEBUG
333 AllNodes all(zone(), jsgraph()->graph());
334 for (Node* node : all.live) {
335 if (node->opcode() == IrOpcode::kAllocate) {
336 CHECK(!escape_analysis_->IsVirtual(node));
337 }
338 }
339 #endif // DEBUG
332 } 340 }
333 341
334 342 Isolate* EscapeAnalysisReducer::isolate() const { return jsgraph_->isolate(); }
335 class EscapeAnalysisVerifier final : public AdvancedReducer {
336 public:
337 EscapeAnalysisVerifier(Editor* editor, EscapeAnalysis* escape_analysis)
338 : AdvancedReducer(editor), escape_analysis_(escape_analysis) {}
339
340 Reduction Reduce(Node* node) final {
341 switch (node->opcode()) {
342 case IrOpcode::kAllocate:
343 CHECK(!escape_analysis_->IsVirtual(node));
344 break;
345 default:
346 break;
347 }
348 return NoChange();
349 }
350
351 private:
352 EscapeAnalysis* escape_analysis_;
353 };
354
355 void EscapeAnalysisReducer::VerifyReplacement() const {
356 #ifdef DEBUG
357 GraphReducer graph_reducer(zone(), jsgraph()->graph());
358 EscapeAnalysisVerifier verifier(&graph_reducer, escape_analysis());
359 graph_reducer.AddReducer(&verifier);
360 graph_reducer.ReduceGraph();
361 #endif // DEBUG
362 }
363 343
364 } // namespace compiler 344 } // namespace compiler
365 } // namespace internal 345 } // namespace internal
366 } // namespace v8 346 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/escape-analysis-reducer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698