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

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

Issue 1654163003: [turbofan] Delay initialization in escape analysis (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Make --trace-turbo-escape a proper debug flag Created 4 years, 10 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.cc ('k') | src/flag-definitions.h » ('j') | 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/js-graph.h" 7 #include "src/compiler/js-graph.h"
8 #include "src/counters.h" 8 #include "src/counters.h"
9 9
10 namespace v8 { 10 namespace v8 {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 node->op()->mnemonic()); 126 node->op()->mnemonic());
127 RelaxEffectsAndControls(node); 127 RelaxEffectsAndControls(node);
128 return Changed(node); 128 return Changed(node);
129 } 129 }
130 return NoChange(); 130 return NoChange();
131 } 131 }
132 132
133 133
134 Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) { 134 Reduction EscapeAnalysisReducer::ReduceAllocate(Node* node) {
135 DCHECK_EQ(node->opcode(), IrOpcode::kAllocate); 135 DCHECK_EQ(node->opcode(), IrOpcode::kAllocate);
136 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
137 fully_reduced_.Add(node->id());
138 }
136 if (escape_analysis()->IsVirtual(node)) { 139 if (escape_analysis()->IsVirtual(node)) {
137 RelaxEffectsAndControls(node); 140 RelaxEffectsAndControls(node);
138 counters()->turbo_escape_allocs_replaced()->Increment(); 141 counters()->turbo_escape_allocs_replaced()->Increment();
139 TRACE("Removed allocate #%d from effect chain\n", node->id()); 142 TRACE("Removed allocate #%d from effect chain\n", node->id());
140 return Changed(node); 143 return Changed(node);
141 } 144 }
142 return NoChange(); 145 return NoChange();
143 } 146 }
144 147
145 148
146 Reduction EscapeAnalysisReducer::ReduceFinishRegion(Node* node) { 149 Reduction EscapeAnalysisReducer::ReduceFinishRegion(Node* node) {
147 DCHECK_EQ(node->opcode(), IrOpcode::kFinishRegion); 150 DCHECK_EQ(node->opcode(), IrOpcode::kFinishRegion);
148 Node* effect = NodeProperties::GetEffectInput(node, 0); 151 Node* effect = NodeProperties::GetEffectInput(node, 0);
149 if (effect->opcode() == IrOpcode::kBeginRegion) { 152 if (effect->opcode() == IrOpcode::kBeginRegion) {
153 // We only add it now to remove empty Begin/Finish region pairs
154 // in the process.
150 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) { 155 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
151 fully_reduced_.Add(node->id()); 156 fully_reduced_.Add(node->id());
152 } 157 }
153 RelaxEffectsAndControls(effect); 158 RelaxEffectsAndControls(effect);
154 RelaxEffectsAndControls(node); 159 RelaxEffectsAndControls(node);
155 #ifdef DEBUG 160 #ifdef DEBUG
156 if (FLAG_trace_turbo_escape) { 161 if (FLAG_trace_turbo_escape) {
157 PrintF("Removed region #%d / #%d from effect chain,", effect->id(), 162 PrintF("Removed region #%d / #%d from effect chain,", effect->id(),
158 node->id()); 163 node->id());
159 PrintF(" %d user(s) of #%d remain(s):", node->UseCount(), node->id()); 164 PrintF(" %d user(s) of #%d remain(s):", node->UseCount(), node->id());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 ReplaceWithValue(node, jsgraph()->FalseConstant()); 206 ReplaceWithValue(node, jsgraph()->FalseConstant());
202 TRACE("Replaced ObjectIsSmi #%d with false\n", node->id()); 207 TRACE("Replaced ObjectIsSmi #%d with false\n", node->id());
203 return Replace(jsgraph()->FalseConstant()); 208 return Replace(jsgraph()->FalseConstant());
204 } 209 }
205 return NoChange(); 210 return NoChange();
206 } 211 }
207 212
208 213
209 Reduction EscapeAnalysisReducer::ReduceFrameStateUses(Node* node) { 214 Reduction EscapeAnalysisReducer::ReduceFrameStateUses(Node* node) {
210 DCHECK_GE(node->op()->EffectInputCount(), 1); 215 DCHECK_GE(node->op()->EffectInputCount(), 1);
216 if (node->id() < static_cast<NodeId>(fully_reduced_.length())) {
217 fully_reduced_.Add(node->id());
218 }
211 bool changed = false; 219 bool changed = false;
212 for (int i = 0; i < node->InputCount(); ++i) { 220 for (int i = 0; i < node->InputCount(); ++i) {
213 Node* input = node->InputAt(i); 221 Node* input = node->InputAt(i);
214 if (input->opcode() == IrOpcode::kFrameState) { 222 if (input->opcode() == IrOpcode::kFrameState) {
215 if (Node* ret = ReduceDeoptState(input, node, false)) { 223 if (Node* ret = ReduceDeoptState(input, node, false)) {
216 node->ReplaceInput(i, ret); 224 node->ReplaceInput(i, ret);
217 changed = true; 225 changed = true;
218 } 226 }
219 } 227 }
220 } 228 }
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
350 GraphReducer graph_reducer(zone(), jsgraph()->graph()); 358 GraphReducer graph_reducer(zone(), jsgraph()->graph());
351 EscapeAnalysisVerifier verifier(&graph_reducer, escape_analysis()); 359 EscapeAnalysisVerifier verifier(&graph_reducer, escape_analysis());
352 graph_reducer.AddReducer(&verifier); 360 graph_reducer.AddReducer(&verifier);
353 graph_reducer.ReduceGraph(); 361 graph_reducer.ReduceGraph();
354 #endif // DEBUG 362 #endif // DEBUG
355 } 363 }
356 364
357 } // namespace compiler 365 } // namespace compiler
358 } // namespace internal 366 } // namespace internal
359 } // namespace v8 367 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/escape-analysis.cc ('k') | src/flag-definitions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698