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

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

Issue 1612323003: Introduce {FAST,SLOW}_STRING_WRAPPER_ELEMENTS (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: one more DCHECK fix 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
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 <sstream> 7 #include <sstream>
8 8
9 #include "src/allocation-site-scopes.h" 9 #include "src/allocation-site-scopes.h"
10 #include "src/ast/ast-numbering.h" 10 #include "src/ast/ast-numbering.h"
(...skipping 5677 matching lines...) Expand 10 before | Expand all | Expand 10 after
5688 // Lookup in script contexts. 5688 // Lookup in script contexts.
5689 { 5689 {
5690 Handle<ScriptContextTable> script_contexts( 5690 Handle<ScriptContextTable> script_contexts(
5691 global->native_context()->script_context_table()); 5691 global->native_context()->script_context_table());
5692 ScriptContextTable::LookupResult lookup; 5692 ScriptContextTable::LookupResult lookup;
5693 if (ScriptContextTable::Lookup(script_contexts, variable->name(), 5693 if (ScriptContextTable::Lookup(script_contexts, variable->name(),
5694 &lookup)) { 5694 &lookup)) {
5695 Handle<Context> script_context = ScriptContextTable::GetContext( 5695 Handle<Context> script_context = ScriptContextTable::GetContext(
5696 script_contexts, lookup.context_index); 5696 script_contexts, lookup.context_index);
5697 Handle<Object> current_value = 5697 Handle<Object> current_value =
5698 FixedArray::get(script_context, lookup.slot_index); 5698 FixedArray::get(*script_context, lookup.slot_index, isolate());
5699 5699
5700 // If the values is not the hole, it will stay initialized, 5700 // If the values is not the hole, it will stay initialized,
5701 // so no need to generate a check. 5701 // so no need to generate a check.
5702 if (*current_value == *isolate()->factory()->the_hole_value()) { 5702 if (*current_value == *isolate()->factory()->the_hole_value()) {
5703 return Bailout(kReferenceToUninitializedVariable); 5703 return Bailout(kReferenceToUninitializedVariable);
5704 } 5704 }
5705 HInstruction* result = New<HLoadNamedField>( 5705 HInstruction* result = New<HLoadNamedField>(
5706 Add<HConstant>(script_context), nullptr, 5706 Add<HConstant>(script_context), nullptr,
5707 HObjectAccess::ForContextSlot(lookup.slot_index)); 5707 HObjectAccess::ForContextSlot(lookup.slot_index));
5708 return ast_context()->ReturnInstruction(result, expr->id()); 5708 return ast_context()->ReturnInstruction(result, expr->id());
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
6884 global->native_context()->script_context_table()); 6884 global->native_context()->script_context_table());
6885 ScriptContextTable::LookupResult lookup; 6885 ScriptContextTable::LookupResult lookup;
6886 if (ScriptContextTable::Lookup(script_contexts, var->name(), &lookup)) { 6886 if (ScriptContextTable::Lookup(script_contexts, var->name(), &lookup)) {
6887 if (lookup.mode == CONST) { 6887 if (lookup.mode == CONST) {
6888 return Bailout(kNonInitializerAssignmentToConst); 6888 return Bailout(kNonInitializerAssignmentToConst);
6889 } 6889 }
6890 Handle<Context> script_context = 6890 Handle<Context> script_context =
6891 ScriptContextTable::GetContext(script_contexts, lookup.context_index); 6891 ScriptContextTable::GetContext(script_contexts, lookup.context_index);
6892 6892
6893 Handle<Object> current_value = 6893 Handle<Object> current_value =
6894 FixedArray::get(script_context, lookup.slot_index); 6894 FixedArray::get(*script_context, lookup.slot_index, isolate());
6895 6895
6896 // If the values is not the hole, it will stay initialized, 6896 // If the values is not the hole, it will stay initialized,
6897 // so no need to generate a check. 6897 // so no need to generate a check.
6898 if (*current_value == *isolate()->factory()->the_hole_value()) { 6898 if (*current_value == *isolate()->factory()->the_hole_value()) {
6899 return Bailout(kReferenceToUninitializedVariable); 6899 return Bailout(kReferenceToUninitializedVariable);
6900 } 6900 }
6901 6901
6902 HStoreNamedField* instr = Add<HStoreNamedField>( 6902 HStoreNamedField* instr = Add<HStoreNamedField>(
6903 Add<HConstant>(script_context), 6903 Add<HConstant>(script_context),
6904 HObjectAccess::ForContextSlot(lookup.slot_index), value); 6904 HObjectAccess::ForContextSlot(lookup.slot_index), value);
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after
7408 LoadKeyedHoleMode load_mode = BuildKeyedHoleMode(map); 7408 LoadKeyedHoleMode load_mode = BuildKeyedHoleMode(map);
7409 return BuildUncheckedMonomorphicElementAccess( 7409 return BuildUncheckedMonomorphicElementAccess(
7410 checked_object, key, val, 7410 checked_object, key, val,
7411 map->instance_type() == JS_ARRAY_TYPE, 7411 map->instance_type() == JS_ARRAY_TYPE,
7412 map->elements_kind(), access_type, 7412 map->elements_kind(), access_type,
7413 load_mode, store_mode); 7413 load_mode, store_mode);
7414 } 7414 }
7415 7415
7416 7416
7417 static bool CanInlineElementAccess(Handle<Map> map) { 7417 static bool CanInlineElementAccess(Handle<Map> map) {
7418 return map->IsJSObjectMap() && !map->has_dictionary_elements() && 7418 return map->IsJSObjectMap() &&
7419 !map->has_sloppy_arguments_elements() && 7419 (map->has_fast_elements() || map->has_fixed_typed_array_elements()) &&
7420 !map->has_indexed_interceptor() && !map->is_access_check_needed(); 7420 !map->has_indexed_interceptor() && !map->is_access_check_needed();
7421 } 7421 }
7422 7422
7423 7423
7424 HInstruction* HOptimizedGraphBuilder::TryBuildConsolidatedElementLoad( 7424 HInstruction* HOptimizedGraphBuilder::TryBuildConsolidatedElementLoad(
7425 HValue* object, 7425 HValue* object,
7426 HValue* key, 7426 HValue* key,
7427 HValue* val, 7427 HValue* val,
7428 SmallMapList* maps) { 7428 SmallMapList* maps) {
7429 // For polymorphic loads of similar elements kinds (i.e. all tagged or all 7429 // For polymorphic loads of similar elements kinds (i.e. all tagged or all
(...skipping 6234 matching lines...) Expand 10 before | Expand all | Expand 10 after
13664 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 13664 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
13665 } 13665 }
13666 13666
13667 #ifdef DEBUG 13667 #ifdef DEBUG
13668 graph_->Verify(false); // No full verify. 13668 graph_->Verify(false); // No full verify.
13669 #endif 13669 #endif
13670 } 13670 }
13671 13671
13672 } // namespace internal 13672 } // namespace internal
13673 } // namespace v8 13673 } // namespace v8
OLDNEW
« no previous file with comments | « src/crankshaft/arm64/lithium-codegen-arm64.cc ('k') | src/crankshaft/ia32/lithium-codegen-ia32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698