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

Side by Side Diff: src/crankshaft/hydrogen.cc

Issue 2201193004: Use Variable::binding_needs_init() to determine hole initialization (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Remove one more comment Created 4 years, 4 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/ast-graph-builder.cc ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('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 2013 the V8 project authors. All rights reserved. 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 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/crankshaft/hydrogen.h" 5 #include "src/crankshaft/hydrogen.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <sstream> 8 #include <sstream>
9 9
10 #include "src/allocation-site-scopes.h" 10 #include "src/allocation-site-scopes.h"
(...skipping 12144 matching lines...) Expand 10 before | Expand all | Expand 10 after
12155 Handle<TypeFeedbackVector> vector(current_feedback_vector(), isolate()); 12155 Handle<TypeFeedbackVector> vector(current_feedback_vector(), isolate());
12156 Add<HDeclareGlobals>(array, flags, vector); 12156 Add<HDeclareGlobals>(array, flags, vector);
12157 globals_.Rewind(0); 12157 globals_.Rewind(0);
12158 } 12158 }
12159 } 12159 }
12160 12160
12161 12161
12162 void HOptimizedGraphBuilder::VisitVariableDeclaration( 12162 void HOptimizedGraphBuilder::VisitVariableDeclaration(
12163 VariableDeclaration* declaration) { 12163 VariableDeclaration* declaration) {
12164 VariableProxy* proxy = declaration->proxy(); 12164 VariableProxy* proxy = declaration->proxy();
12165 VariableMode mode = declaration->mode();
12166 Variable* variable = proxy->var(); 12165 Variable* variable = proxy->var();
12167 bool hole_init = mode == LET || mode == CONST;
12168 switch (variable->location()) { 12166 switch (variable->location()) {
12169 case VariableLocation::GLOBAL: 12167 case VariableLocation::GLOBAL:
12170 case VariableLocation::UNALLOCATED: { 12168 case VariableLocation::UNALLOCATED: {
12171 DCHECK(!variable->binding_needs_init()); 12169 DCHECK(!variable->binding_needs_init());
12172 FeedbackVectorSlot slot = proxy->VariableFeedbackSlot(); 12170 FeedbackVectorSlot slot = proxy->VariableFeedbackSlot();
12173 DCHECK(!slot.IsInvalid()); 12171 DCHECK(!slot.IsInvalid());
12174 globals_.Add(handle(Smi::FromInt(slot.ToInt()), isolate()), zone()); 12172 globals_.Add(handle(Smi::FromInt(slot.ToInt()), isolate()), zone());
12175 globals_.Add(isolate()->factory()->undefined_value(), zone()); 12173 globals_.Add(isolate()->factory()->undefined_value(), zone());
12176 return; 12174 return;
12177 } 12175 }
12178 case VariableLocation::PARAMETER: 12176 case VariableLocation::PARAMETER:
12179 case VariableLocation::LOCAL: 12177 case VariableLocation::LOCAL:
12180 if (hole_init) { 12178 if (variable->binding_needs_init()) {
12181 HValue* value = graph()->GetConstantHole(); 12179 HValue* value = graph()->GetConstantHole();
12182 environment()->Bind(variable, value); 12180 environment()->Bind(variable, value);
12183 } 12181 }
12184 break; 12182 break;
12185 case VariableLocation::CONTEXT: 12183 case VariableLocation::CONTEXT:
12186 if (hole_init) { 12184 if (variable->binding_needs_init()) {
12187 HValue* value = graph()->GetConstantHole(); 12185 HValue* value = graph()->GetConstantHole();
12188 HValue* context = environment()->context(); 12186 HValue* context = environment()->context();
12189 HStoreContextSlot* store = Add<HStoreContextSlot>( 12187 HStoreContextSlot* store = Add<HStoreContextSlot>(
12190 context, variable->index(), HStoreContextSlot::kNoCheck, value); 12188 context, variable->index(), HStoreContextSlot::kNoCheck, value);
12191 if (store->HasObservableSideEffects()) { 12189 if (store->HasObservableSideEffects()) {
12192 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE); 12190 Add<HSimulate>(proxy->id(), REMOVABLE_SIMULATE);
12193 } 12191 }
12194 } 12192 }
12195 break; 12193 break;
12196 case VariableLocation::LOOKUP: 12194 case VariableLocation::LOOKUP:
(...skipping 1223 matching lines...) Expand 10 before | Expand all | Expand 10 after
13420 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13418 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13421 } 13419 }
13422 13420
13423 #ifdef DEBUG 13421 #ifdef DEBUG
13424 graph_->Verify(false); // No full verify. 13422 graph_->Verify(false); // No full verify.
13425 #endif 13423 #endif
13426 } 13424 }
13427 13425
13428 } // namespace internal 13426 } // namespace internal
13429 } // namespace v8 13427 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/ast-graph-builder.cc ('k') | src/full-codegen/arm/full-codegen-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698