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

Side by Side Diff: src/code-stubs-hydrogen.cc

Issue 2172223002: [stubs] Call interface descriptors cleanup. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@store-ic-tf
Patch Set: Addressing comments 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/code-stubs.cc ('k') | src/compiler/code-assembler.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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/code-stubs.h" 5 #include "src/code-stubs.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "src/bailout-reason.h" 9 #include "src/bailout-reason.h"
10 #include "src/crankshaft/hydrogen.h" 10 #include "src/crankshaft/hydrogen.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 return true; 182 return true;
183 } 183 }
184 184
185 185
186 template <class Stub> 186 template <class Stub>
187 class CodeStubGraphBuilder: public CodeStubGraphBuilderBase { 187 class CodeStubGraphBuilder: public CodeStubGraphBuilderBase {
188 public: 188 public:
189 explicit CodeStubGraphBuilder(CompilationInfo* info, CodeStub* stub) 189 explicit CodeStubGraphBuilder(CompilationInfo* info, CodeStub* stub)
190 : CodeStubGraphBuilderBase(info, stub) {} 190 : CodeStubGraphBuilderBase(info, stub) {}
191 191
192 typedef typename Stub::Descriptor Descriptor;
193
192 protected: 194 protected:
193 virtual HValue* BuildCodeStub() { 195 virtual HValue* BuildCodeStub() {
194 if (casted_stub()->IsUninitialized()) { 196 if (casted_stub()->IsUninitialized()) {
195 return BuildCodeUninitializedStub(); 197 return BuildCodeUninitializedStub();
196 } else { 198 } else {
197 return BuildCodeInitializedStub(); 199 return BuildCodeInitializedStub();
198 } 200 }
199 } 201 }
200 202
201 virtual HValue* BuildCodeInitializedStub() { 203 virtual HValue* BuildCodeInitializedStub() {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 os << "[Lazy compilation of " << stub << " took " 282 os << "[Lazy compilation of " << stub << " took "
281 << timer.Elapsed().InMillisecondsF() << " ms]" << std::endl; 283 << timer.Elapsed().InMillisecondsF() << " ms]" << std::endl;
282 } 284 }
283 return code; 285 return code;
284 } 286 }
285 287
286 288
287 template <> 289 template <>
288 HValue* CodeStubGraphBuilder<NumberToStringStub>::BuildCodeStub() { 290 HValue* CodeStubGraphBuilder<NumberToStringStub>::BuildCodeStub() {
289 info()->MarkAsSavesCallerDoubles(); 291 info()->MarkAsSavesCallerDoubles();
290 HValue* number = GetParameter(NumberToStringStub::kNumber); 292 HValue* number = GetParameter(Descriptor::kArgument);
291 return BuildNumberToString(number, Type::Number()); 293 return BuildNumberToString(number, Type::Number());
292 } 294 }
293 295
294 296
295 Handle<Code> NumberToStringStub::GenerateCode() { 297 Handle<Code> NumberToStringStub::GenerateCode() {
296 return DoGenerateCode(this); 298 return DoGenerateCode(this);
297 } 299 }
298 300
299 301
300 // Returns the type string of a value; see ECMA-262, 11.4.3 (p 47). 302 // Returns the type string of a value; see ECMA-262, 11.4.3 (p 47).
301 template <> 303 template <>
302 HValue* CodeStubGraphBuilder<TypeofStub>::BuildCodeStub() { 304 HValue* CodeStubGraphBuilder<TypeofStub>::BuildCodeStub() {
303 Factory* factory = isolate()->factory(); 305 Factory* factory = isolate()->factory();
304 HConstant* number_string = Add<HConstant>(factory->number_string()); 306 HConstant* number_string = Add<HConstant>(factory->number_string());
305 HValue* object = GetParameter(TypeofStub::kObject); 307 HValue* object = GetParameter(Descriptor::kObject);
306 308
307 IfBuilder is_smi(this); 309 IfBuilder is_smi(this);
308 HValue* smi_check = is_smi.If<HIsSmiAndBranch>(object); 310 HValue* smi_check = is_smi.If<HIsSmiAndBranch>(object);
309 is_smi.Then(); 311 is_smi.Then();
310 { Push(number_string); } 312 { Push(number_string); }
311 is_smi.Else(); 313 is_smi.Else();
312 { 314 {
313 IfBuilder is_number(this); 315 IfBuilder is_number(this);
314 is_number.If<HCompareMap>(object, isolate()->factory()->heap_number_map()); 316 is_number.If<HCompareMap>(object, isolate()->factory()->heap_number_map());
315 is_number.Then(); 317 is_number.Then();
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 402
401 return environment()->Pop(); 403 return environment()->Pop();
402 } 404 }
403 405
404 406
405 Handle<Code> TypeofStub::GenerateCode() { return DoGenerateCode(this); } 407 Handle<Code> TypeofStub::GenerateCode() { return DoGenerateCode(this); }
406 408
407 409
408 template <> 410 template <>
409 HValue* CodeStubGraphBuilder<FastCloneRegExpStub>::BuildCodeStub() { 411 HValue* CodeStubGraphBuilder<FastCloneRegExpStub>::BuildCodeStub() {
410 HValue* closure = GetParameter(0); 412 HValue* closure = GetParameter(Descriptor::kClosure);
411 HValue* literal_index = GetParameter(1); 413 HValue* literal_index = GetParameter(Descriptor::kLiteralIndex);
412 414
413 // This stub is very performance sensitive, the generated code must be tuned 415 // This stub is very performance sensitive, the generated code must be tuned
414 // so that it doesn't build and eager frame. 416 // so that it doesn't build and eager frame.
415 info()->MarkMustNotHaveEagerFrame(); 417 info()->MarkMustNotHaveEagerFrame();
416 418
417 HValue* literals_array = Add<HLoadNamedField>( 419 HValue* literals_array = Add<HLoadNamedField>(
418 closure, nullptr, HObjectAccess::ForLiteralsPointer()); 420 closure, nullptr, HObjectAccess::ForLiteralsPointer());
419 HInstruction* boilerplate = Add<HLoadKeyed>( 421 HInstruction* boilerplate = Add<HLoadKeyed>(
420 literals_array, literal_index, nullptr, nullptr, FAST_ELEMENTS, 422 literals_array, literal_index, nullptr, nullptr, FAST_ELEMENTS,
421 NEVER_RETURN_HOLE, LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag); 423 NEVER_RETURN_HOLE, LiteralsArray::kOffsetToFirstLiteral - kHeapObjectTag);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 Handle<Code> FastCloneRegExpStub::GenerateCode() { 462 Handle<Code> FastCloneRegExpStub::GenerateCode() {
461 return DoGenerateCode(this); 463 return DoGenerateCode(this);
462 } 464 }
463 465
464 466
465 template <> 467 template <>
466 HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() { 468 HValue* CodeStubGraphBuilder<FastCloneShallowArrayStub>::BuildCodeStub() {
467 Factory* factory = isolate()->factory(); 469 Factory* factory = isolate()->factory();
468 HValue* undefined = graph()->GetConstantUndefined(); 470 HValue* undefined = graph()->GetConstantUndefined();
469 AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode(); 471 AllocationSiteMode alloc_site_mode = casted_stub()->allocation_site_mode();
470 HValue* closure = GetParameter(0); 472 HValue* closure = GetParameter(Descriptor::kClosure);
471 HValue* literal_index = GetParameter(1); 473 HValue* literal_index = GetParameter(Descriptor::kLiteralIndex);
472 474
473 // TODO(turbofan): This codestub has regressed to need a frame on ia32 at some 475 // TODO(turbofan): This codestub has regressed to need a frame on ia32 at some
474 // point and wasn't caught since it wasn't built in the snapshot. We should 476 // point and wasn't caught since it wasn't built in the snapshot. We should
475 // probably just replace with a TurboFan stub rather than fixing it. 477 // probably just replace with a TurboFan stub rather than fixing it.
476 #if !(V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87) 478 #if !(V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87)
477 // This stub is very performance sensitive, the generated code must be tuned 479 // This stub is very performance sensitive, the generated code must be tuned
478 // so that it doesn't build and eager frame. 480 // so that it doesn't build and eager frame.
479 info()->MarkMustNotHaveEagerFrame(); 481 info()->MarkMustNotHaveEagerFrame();
480 #endif 482 #endif
481 483
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 // system for weakness. For now we decided to keep it like this because having 602 // system for weakness. For now we decided to keep it like this because having
601 // an initial write barrier backed store makes this pointer strong until the 603 // an initial write barrier backed store makes this pointer strong until the
602 // next GC, and allocation sites are designed to survive several GCs anyway. 604 // next GC, and allocation sites are designed to survive several GCs anyway.
603 Add<HStoreNamedField>( 605 Add<HStoreNamedField>(
604 object, 606 object,
605 HObjectAccess::ForAllocationSiteOffset(AllocationSite::kWeakNextOffset), 607 HObjectAccess::ForAllocationSiteOffset(AllocationSite::kWeakNextOffset),
606 site); 608 site);
607 Add<HStoreNamedField>(site_list, HObjectAccess::ForAllocationSiteList(), 609 Add<HStoreNamedField>(site_list, HObjectAccess::ForAllocationSiteList(),
608 object); 610 object);
609 611
610 HInstruction* feedback_vector = GetParameter(0); 612 HInstruction* feedback_vector = GetParameter(Descriptor::kVector);
611 HInstruction* slot = GetParameter(1); 613 HInstruction* slot = GetParameter(Descriptor::kSlot);
612 Add<HStoreKeyed>(feedback_vector, slot, object, nullptr, FAST_ELEMENTS, 614 Add<HStoreKeyed>(feedback_vector, slot, object, nullptr, FAST_ELEMENTS,
613 INITIALIZING_STORE); 615 INITIALIZING_STORE);
614 return feedback_vector; 616 return feedback_vector;
615 } 617 }
616 618
617 619
618 Handle<Code> CreateAllocationSiteStub::GenerateCode() { 620 Handle<Code> CreateAllocationSiteStub::GenerateCode() {
619 return DoGenerateCode(this); 621 return DoGenerateCode(this);
620 } 622 }
621 623
622 624
623 template <> 625 template <>
624 HValue* CodeStubGraphBuilder<CreateWeakCellStub>::BuildCodeStub() { 626 HValue* CodeStubGraphBuilder<CreateWeakCellStub>::BuildCodeStub() {
625 // This stub is performance sensitive, the generated code must be tuned 627 // This stub is performance sensitive, the generated code must be tuned
626 // so that it doesn't build an eager frame. 628 // so that it doesn't build an eager frame.
627 info()->MarkMustNotHaveEagerFrame(); 629 info()->MarkMustNotHaveEagerFrame();
628 630
629 HValue* size = Add<HConstant>(WeakCell::kSize); 631 HValue* size = Add<HConstant>(WeakCell::kSize);
630 HInstruction* object = 632 HInstruction* object =
631 Add<HAllocate>(size, HType::JSObject(), TENURED, JS_OBJECT_TYPE, 633 Add<HAllocate>(size, HType::JSObject(), TENURED, JS_OBJECT_TYPE,
632 graph()->GetConstant0()); 634 graph()->GetConstant0());
633 635
634 Handle<Map> weak_cell_map = isolate()->factory()->weak_cell_map(); 636 Handle<Map> weak_cell_map = isolate()->factory()->weak_cell_map();
635 AddStoreMapConstant(object, weak_cell_map); 637 AddStoreMapConstant(object, weak_cell_map);
636 638
637 HInstruction* value = GetParameter(CreateWeakCellDescriptor::kValueIndex); 639 HInstruction* value = GetParameter(Descriptor::kValue);
638 Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellValue(), value); 640 Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellValue(), value);
639 Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellNext(), 641 Add<HStoreNamedField>(object, HObjectAccess::ForWeakCellNext(),
640 graph()->GetConstantHole()); 642 graph()->GetConstantHole());
641 643
642 HInstruction* feedback_vector = 644 HInstruction* feedback_vector = GetParameter(Descriptor::kVector);
643 GetParameter(CreateWeakCellDescriptor::kVectorIndex); 645 HInstruction* slot = GetParameter(Descriptor::kSlot);
644 HInstruction* slot = GetParameter(CreateWeakCellDescriptor::kSlotIndex);
645 Add<HStoreKeyed>(feedback_vector, slot, object, nullptr, FAST_ELEMENTS, 646 Add<HStoreKeyed>(feedback_vector, slot, object, nullptr, FAST_ELEMENTS,
646 INITIALIZING_STORE); 647 INITIALIZING_STORE);
647 return graph()->GetConstant0(); 648 return graph()->GetConstant0();
648 } 649 }
649 650
650 651
651 Handle<Code> CreateWeakCellStub::GenerateCode() { return DoGenerateCode(this); } 652 Handle<Code> CreateWeakCellStub::GenerateCode() { return DoGenerateCode(this); }
652 653
653 654
654 template <> 655 template <>
(...skipping 14 matching lines...) Expand all
669 670
670 template <> 671 template <>
671 HValue* CodeStubGraphBuilder<StoreScriptContextFieldStub>::BuildCodeStub() { 672 HValue* CodeStubGraphBuilder<StoreScriptContextFieldStub>::BuildCodeStub() {
672 int context_index = casted_stub()->context_index(); 673 int context_index = casted_stub()->context_index();
673 int slot_index = casted_stub()->slot_index(); 674 int slot_index = casted_stub()->slot_index();
674 675
675 HValue* script_context = BuildGetScriptContext(context_index); 676 HValue* script_context = BuildGetScriptContext(context_index);
676 Add<HStoreNamedField>(script_context, 677 Add<HStoreNamedField>(script_context,
677 HObjectAccess::ForContextSlot(slot_index), 678 HObjectAccess::ForContextSlot(slot_index),
678 GetParameter(2), STORE_TO_INITIALIZED_ENTRY); 679 GetParameter(2), STORE_TO_INITIALIZED_ENTRY);
680 // TODO(ishell): Remove this unused stub.
679 return GetParameter(2); 681 return GetParameter(2);
680 } 682 }
681 683
682 684
683 Handle<Code> StoreScriptContextFieldStub::GenerateCode() { 685 Handle<Code> StoreScriptContextFieldStub::GenerateCode() {
684 return DoGenerateCode(this); 686 return DoGenerateCode(this);
685 } 687 }
686 688
687 HValue* CodeStubGraphBuilderBase::BuildPushElement(HValue* object, HValue* argc, 689 HValue* CodeStubGraphBuilderBase::BuildPushElement(HValue* object, HValue* argc,
688 HValue* argument_elements, 690 HValue* argument_elements,
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
1066 return DoGenerateCode(this); 1068 return DoGenerateCode(this);
1067 } 1069 }
1068 1070
1069 template <> 1071 template <>
1070 HValue* CodeStubGraphBuilder<GrowArrayElementsStub>::BuildCodeStub() { 1072 HValue* CodeStubGraphBuilder<GrowArrayElementsStub>::BuildCodeStub() {
1071 ElementsKind kind = casted_stub()->elements_kind(); 1073 ElementsKind kind = casted_stub()->elements_kind();
1072 if (IsFastDoubleElementsKind(kind)) { 1074 if (IsFastDoubleElementsKind(kind)) {
1073 info()->MarkAsSavesCallerDoubles(); 1075 info()->MarkAsSavesCallerDoubles();
1074 } 1076 }
1075 1077
1076 HValue* object = GetParameter(GrowArrayElementsDescriptor::kObjectIndex); 1078 HValue* object = GetParameter(Descriptor::kObject);
1077 HValue* key = GetParameter(GrowArrayElementsDescriptor::kKeyIndex); 1079 HValue* key = GetParameter(Descriptor::kKey);
1078 1080
1079 HValue* elements = AddLoadElements(object); 1081 HValue* elements = AddLoadElements(object);
1080 HValue* current_capacity = Add<HLoadNamedField>( 1082 HValue* current_capacity = Add<HLoadNamedField>(
1081 elements, nullptr, HObjectAccess::ForFixedArrayLength()); 1083 elements, nullptr, HObjectAccess::ForFixedArrayLength());
1082 1084
1083 HValue* length = 1085 HValue* length =
1084 casted_stub()->is_js_array() 1086 casted_stub()->is_js_array()
1085 ? Add<HLoadNamedField>(object, static_cast<HValue*>(NULL), 1087 ? Add<HLoadNamedField>(object, static_cast<HValue*>(NULL),
1086 HObjectAccess::ForArrayLength(kind)) 1088 HObjectAccess::ForArrayLength(kind))
1087 : current_capacity; 1089 : current_capacity;
1088 1090
1089 return BuildCheckAndGrowElementsCapacity(object, elements, kind, length, 1091 return BuildCheckAndGrowElementsCapacity(object, elements, kind, length,
1090 current_capacity, key); 1092 current_capacity, key);
1091 } 1093 }
1092 1094
1093 1095
1094 Handle<Code> GrowArrayElementsStub::GenerateCode() { 1096 Handle<Code> GrowArrayElementsStub::GenerateCode() {
1095 return DoGenerateCode(this); 1097 return DoGenerateCode(this);
1096 } 1098 }
1097 1099
1098 1100
1099 template <> 1101 template <>
1100 HValue* CodeStubGraphBuilder<LoadFastElementStub>::BuildCodeStub() { 1102 HValue* CodeStubGraphBuilder<LoadFastElementStub>::BuildCodeStub() {
1101 LoadKeyedHoleMode hole_mode = casted_stub()->convert_hole_to_undefined() 1103 LoadKeyedHoleMode hole_mode = casted_stub()->convert_hole_to_undefined()
1102 ? CONVERT_HOLE_TO_UNDEFINED 1104 ? CONVERT_HOLE_TO_UNDEFINED
1103 : NEVER_RETURN_HOLE; 1105 : NEVER_RETURN_HOLE;
1104 1106
1105 HInstruction* load = BuildUncheckedMonomorphicElementAccess( 1107 HInstruction* load = BuildUncheckedMonomorphicElementAccess(
1106 GetParameter(LoadDescriptor::kReceiverIndex), 1108 GetParameter(Descriptor::kReceiver), GetParameter(Descriptor::kName),
1107 GetParameter(LoadDescriptor::kNameIndex), NULL, 1109 NULL, casted_stub()->is_js_array(), casted_stub()->elements_kind(), LOAD,
1108 casted_stub()->is_js_array(), casted_stub()->elements_kind(), LOAD,
1109 hole_mode, STANDARD_STORE); 1110 hole_mode, STANDARD_STORE);
1110 return load; 1111 return load;
1111 } 1112 }
1112 1113
1113 1114
1114 Handle<Code> LoadFastElementStub::GenerateCode() { 1115 Handle<Code> LoadFastElementStub::GenerateCode() {
1115 return DoGenerateCode(this); 1116 return DoGenerateCode(this);
1116 } 1117 }
1117 1118
1118 1119
(...skipping 13 matching lines...) Expand all
1132 object, nullptr, access.WithRepresentation(Representation::Tagged())); 1133 object, nullptr, access.WithRepresentation(Representation::Tagged()));
1133 // Load the double value from it. 1134 // Load the double value from it.
1134 access = HObjectAccess::ForHeapNumberValue(); 1135 access = HObjectAccess::ForHeapNumberValue();
1135 } 1136 }
1136 return Add<HLoadNamedField>(object, nullptr, access); 1137 return Add<HLoadNamedField>(object, nullptr, access);
1137 } 1138 }
1138 1139
1139 1140
1140 template<> 1141 template<>
1141 HValue* CodeStubGraphBuilder<LoadFieldStub>::BuildCodeStub() { 1142 HValue* CodeStubGraphBuilder<LoadFieldStub>::BuildCodeStub() {
1142 return BuildLoadNamedField(GetParameter(0), casted_stub()->index()); 1143 return BuildLoadNamedField(GetParameter(Descriptor::kReceiver),
1144 casted_stub()->index());
1143 } 1145 }
1144 1146
1145 1147
1146 Handle<Code> LoadFieldStub::GenerateCode() { 1148 Handle<Code> LoadFieldStub::GenerateCode() {
1147 return DoGenerateCode(this); 1149 return DoGenerateCode(this);
1148 } 1150 }
1149 1151
1150 1152
1151 template <> 1153 template <>
1152 HValue* CodeStubGraphBuilder<LoadConstantStub>::BuildCodeStub() { 1154 HValue* CodeStubGraphBuilder<LoadConstantStub>::BuildCodeStub() {
1153 HValue* map = AddLoadMap(GetParameter(0), NULL); 1155 HValue* map = AddLoadMap(GetParameter(Descriptor::kReceiver), NULL);
1154 HObjectAccess descriptors_access = HObjectAccess::ForObservableJSObjectOffset( 1156 HObjectAccess descriptors_access = HObjectAccess::ForObservableJSObjectOffset(
1155 Map::kDescriptorsOffset, Representation::Tagged()); 1157 Map::kDescriptorsOffset, Representation::Tagged());
1156 HValue* descriptors = Add<HLoadNamedField>(map, nullptr, descriptors_access); 1158 HValue* descriptors = Add<HLoadNamedField>(map, nullptr, descriptors_access);
1157 HObjectAccess value_access = HObjectAccess::ForObservableJSObjectOffset( 1159 HObjectAccess value_access = HObjectAccess::ForObservableJSObjectOffset(
1158 DescriptorArray::GetValueOffset(casted_stub()->constant_index())); 1160 DescriptorArray::GetValueOffset(casted_stub()->constant_index()));
1159 return Add<HLoadNamedField>(descriptors, nullptr, value_access); 1161 return Add<HLoadNamedField>(descriptors, nullptr, value_access);
1160 } 1162 }
1161 1163
1162 1164
1163 Handle<Code> LoadConstantStub::GenerateCode() { return DoGenerateCode(this); } 1165 Handle<Code> LoadConstantStub::GenerateCode() { return DoGenerateCode(this); }
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1278 environment()->Push(is_load ? result : value); 1280 environment()->Push(is_load ? result : value);
1279 } 1281 }
1280 in_range.End(); 1282 in_range.End();
1281 1283
1282 return environment()->Pop(); 1284 return environment()->Pop();
1283 } 1285 }
1284 1286
1285 1287
1286 template <> 1288 template <>
1287 HValue* CodeStubGraphBuilder<KeyedLoadSloppyArgumentsStub>::BuildCodeStub() { 1289 HValue* CodeStubGraphBuilder<KeyedLoadSloppyArgumentsStub>::BuildCodeStub() {
1288 HValue* receiver = GetParameter(LoadDescriptor::kReceiverIndex); 1290 HValue* receiver = GetParameter(Descriptor::kReceiver);
1289 HValue* key = GetParameter(LoadDescriptor::kNameIndex); 1291 HValue* key = GetParameter(Descriptor::kName);
1290 1292
1291 return EmitKeyedSloppyArguments(receiver, key, NULL); 1293 return EmitKeyedSloppyArguments(receiver, key, NULL);
1292 } 1294 }
1293 1295
1294 1296
1295 Handle<Code> KeyedLoadSloppyArgumentsStub::GenerateCode() { 1297 Handle<Code> KeyedLoadSloppyArgumentsStub::GenerateCode() {
1296 return DoGenerateCode(this); 1298 return DoGenerateCode(this);
1297 } 1299 }
1298 1300
1299 1301
1300 template <> 1302 template <>
1301 HValue* CodeStubGraphBuilder<KeyedStoreSloppyArgumentsStub>::BuildCodeStub() { 1303 HValue* CodeStubGraphBuilder<KeyedStoreSloppyArgumentsStub>::BuildCodeStub() {
1302 HValue* receiver = GetParameter(StoreDescriptor::kReceiverIndex); 1304 HValue* receiver = GetParameter(Descriptor::kReceiver);
1303 HValue* key = GetParameter(StoreDescriptor::kNameIndex); 1305 HValue* key = GetParameter(Descriptor::kName);
1304 HValue* value = GetParameter(StoreDescriptor::kValueIndex); 1306 HValue* value = GetParameter(Descriptor::kValue);
1305 1307
1306 return EmitKeyedSloppyArguments(receiver, key, value); 1308 return EmitKeyedSloppyArguments(receiver, key, value);
1307 } 1309 }
1308 1310
1309 1311
1310 Handle<Code> KeyedStoreSloppyArgumentsStub::GenerateCode() { 1312 Handle<Code> KeyedStoreSloppyArgumentsStub::GenerateCode() {
1311 return DoGenerateCode(this); 1313 return DoGenerateCode(this);
1312 } 1314 }
1313 1315
1314 1316
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1352 } else if (representation.IsHeapObject()) { 1354 } else if (representation.IsHeapObject()) {
1353 BuildCheckHeapObject(value); 1355 BuildCheckHeapObject(value);
1354 } 1356 }
1355 1357
1356 Add<HStoreNamedField>(object, access, value, INITIALIZING_STORE); 1358 Add<HStoreNamedField>(object, access, value, INITIALIZING_STORE);
1357 } 1359 }
1358 1360
1359 1361
1360 template <> 1362 template <>
1361 HValue* CodeStubGraphBuilder<StoreFieldStub>::BuildCodeStub() { 1363 HValue* CodeStubGraphBuilder<StoreFieldStub>::BuildCodeStub() {
1362 BuildStoreNamedField(GetParameter(0), GetParameter(2), casted_stub()->index(), 1364 BuildStoreNamedField(GetParameter(Descriptor::kReceiver),
1365 GetParameter(Descriptor::kValue), casted_stub()->index(),
1363 casted_stub()->representation(), false); 1366 casted_stub()->representation(), false);
1364 return GetParameter(2); 1367 return GetParameter(Descriptor::kValue);
1365 } 1368 }
1366 1369
1367 1370
1368 Handle<Code> StoreFieldStub::GenerateCode() { return DoGenerateCode(this); } 1371 Handle<Code> StoreFieldStub::GenerateCode() { return DoGenerateCode(this); }
1369 1372
1370 1373
1371 template <> 1374 template <>
1372 HValue* CodeStubGraphBuilder<StoreTransitionStub>::BuildCodeStub() { 1375 HValue* CodeStubGraphBuilder<StoreTransitionStub>::BuildCodeStub() {
1373 HValue* object = GetParameter(StoreTransitionHelper::ReceiverIndex()); 1376 HValue* object = GetParameter(StoreTransitionHelper::ReceiverIndex());
1374 HValue* value = GetParameter(StoreTransitionHelper::ValueIndex()); 1377 HValue* value = GetParameter(StoreTransitionHelper::ValueIndex());
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
1428 1431
1429 1432
1430 Handle<Code> StoreTransitionStub::GenerateCode() { 1433 Handle<Code> StoreTransitionStub::GenerateCode() {
1431 return DoGenerateCode(this); 1434 return DoGenerateCode(this);
1432 } 1435 }
1433 1436
1434 1437
1435 template <> 1438 template <>
1436 HValue* CodeStubGraphBuilder<StoreFastElementStub>::BuildCodeStub() { 1439 HValue* CodeStubGraphBuilder<StoreFastElementStub>::BuildCodeStub() {
1437 BuildUncheckedMonomorphicElementAccess( 1440 BuildUncheckedMonomorphicElementAccess(
1438 GetParameter(StoreDescriptor::kReceiverIndex), 1441 GetParameter(Descriptor::kReceiver), GetParameter(Descriptor::kName),
1439 GetParameter(StoreDescriptor::kNameIndex), 1442 GetParameter(Descriptor::kValue), casted_stub()->is_js_array(),
1440 GetParameter(StoreDescriptor::kValueIndex), casted_stub()->is_js_array(),
1441 casted_stub()->elements_kind(), STORE, NEVER_RETURN_HOLE, 1443 casted_stub()->elements_kind(), STORE, NEVER_RETURN_HOLE,
1442 casted_stub()->store_mode()); 1444 casted_stub()->store_mode());
1443 1445
1444 return GetParameter(2); 1446 return GetParameter(Descriptor::kValue);
1445 } 1447 }
1446 1448
1447 1449
1448 Handle<Code> StoreFastElementStub::GenerateCode() { 1450 Handle<Code> StoreFastElementStub::GenerateCode() {
1449 return DoGenerateCode(this); 1451 return DoGenerateCode(this);
1450 } 1452 }
1451 1453
1452 1454
1453 template <> 1455 template <>
1454 HValue* CodeStubGraphBuilder<TransitionElementsKindStub>::BuildCodeStub() { 1456 HValue* CodeStubGraphBuilder<TransitionElementsKindStub>::BuildCodeStub() {
1455 ElementsKind const from_kind = casted_stub()->from_kind(); 1457 ElementsKind const from_kind = casted_stub()->from_kind();
1456 ElementsKind const to_kind = casted_stub()->to_kind(); 1458 ElementsKind const to_kind = casted_stub()->to_kind();
1457 HValue* const object = GetParameter(0); 1459 HValue* const object = GetParameter(Descriptor::kObject);
1458 HValue* const map = GetParameter(1); 1460 HValue* const map = GetParameter(Descriptor::kMap);
1459 1461
1460 // The {object} is known to be a JSObject (otherwise it wouldn't have elements 1462 // The {object} is known to be a JSObject (otherwise it wouldn't have elements
1461 // anyways). 1463 // anyways).
1462 object->set_type(HType::JSObject()); 1464 object->set_type(HType::JSObject());
1463 1465
1464 info()->MarkAsSavesCallerDoubles(); 1466 info()->MarkAsSavesCallerDoubles();
1465 1467
1466 DCHECK_IMPLIES(IsFastHoleyElementsKind(from_kind), 1468 DCHECK_IMPLIES(IsFastHoleyElementsKind(from_kind),
1467 IsFastHoleyElementsKind(to_kind)); 1469 IsFastHoleyElementsKind(to_kind));
1468 1470
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1511 1513
1512 1514
1513 Handle<Code> TransitionElementsKindStub::GenerateCode() { 1515 Handle<Code> TransitionElementsKindStub::GenerateCode() {
1514 return DoGenerateCode(this); 1516 return DoGenerateCode(this);
1515 } 1517 }
1516 1518
1517 template <> 1519 template <>
1518 HValue* CodeStubGraphBuilder<BinaryOpICStub>::BuildCodeInitializedStub() { 1520 HValue* CodeStubGraphBuilder<BinaryOpICStub>::BuildCodeInitializedStub() {
1519 BinaryOpICState state = casted_stub()->state(); 1521 BinaryOpICState state = casted_stub()->state();
1520 1522
1521 HValue* left = GetParameter(BinaryOpICStub::kLeft); 1523 HValue* left = GetParameter(Descriptor::kLeft);
1522 HValue* right = GetParameter(BinaryOpICStub::kRight); 1524 HValue* right = GetParameter(Descriptor::kRight);
1523 1525
1524 Type* left_type = state.GetLeftType(); 1526 Type* left_type = state.GetLeftType();
1525 Type* right_type = state.GetRightType(); 1527 Type* right_type = state.GetRightType();
1526 Type* result_type = state.GetResultType(); 1528 Type* result_type = state.GetResultType();
1527 1529
1528 DCHECK(!left_type->Is(Type::None()) && !right_type->Is(Type::None()) && 1530 DCHECK(!left_type->Is(Type::None()) && !right_type->Is(Type::None()) &&
1529 (state.HasSideEffects() || !result_type->Is(Type::None()))); 1531 (state.HasSideEffects() || !result_type->Is(Type::None())));
1530 1532
1531 HValue* result = NULL; 1533 HValue* result = NULL;
1532 HAllocationMode allocation_mode(NOT_TENURED); 1534 HAllocationMode allocation_mode(NOT_TENURED);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1588 1590
1589 Handle<Code> BinaryOpICStub::GenerateCode() { 1591 Handle<Code> BinaryOpICStub::GenerateCode() {
1590 return DoGenerateCode(this); 1592 return DoGenerateCode(this);
1591 } 1593 }
1592 1594
1593 1595
1594 template <> 1596 template <>
1595 HValue* CodeStubGraphBuilder<BinaryOpWithAllocationSiteStub>::BuildCodeStub() { 1597 HValue* CodeStubGraphBuilder<BinaryOpWithAllocationSiteStub>::BuildCodeStub() {
1596 BinaryOpICState state = casted_stub()->state(); 1598 BinaryOpICState state = casted_stub()->state();
1597 1599
1598 HValue* allocation_site = GetParameter( 1600 HValue* allocation_site = GetParameter(Descriptor::kAllocationSite);
1599 BinaryOpWithAllocationSiteStub::kAllocationSite); 1601 HValue* left = GetParameter(Descriptor::kLeft);
1600 HValue* left = GetParameter(BinaryOpWithAllocationSiteStub::kLeft); 1602 HValue* right = GetParameter(Descriptor::kRight);
1601 HValue* right = GetParameter(BinaryOpWithAllocationSiteStub::kRight);
1602 1603
1603 Type* left_type = state.GetLeftType(); 1604 Type* left_type = state.GetLeftType();
1604 Type* right_type = state.GetRightType(); 1605 Type* right_type = state.GetRightType();
1605 Type* result_type = state.GetResultType(); 1606 Type* result_type = state.GetResultType();
1606 HAllocationMode allocation_mode(allocation_site); 1607 HAllocationMode allocation_mode(allocation_site);
1607 1608
1608 return BuildBinaryOperation(state.op(), left, right, left_type, right_type, 1609 return BuildBinaryOperation(state.op(), left, right, left_type, right_type,
1609 result_type, state.fixed_right_arg(), 1610 result_type, state.fixed_right_arg(),
1610 allocation_mode); 1611 allocation_mode);
1611 } 1612 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 return Pop(); 1749 return Pop();
1749 } 1750 }
1750 1751
1751 1752
1752 template <> 1753 template <>
1753 HValue* CodeStubGraphBuilder<StringAddStub>::BuildCodeInitializedStub() { 1754 HValue* CodeStubGraphBuilder<StringAddStub>::BuildCodeInitializedStub() {
1754 StringAddStub* stub = casted_stub(); 1755 StringAddStub* stub = casted_stub();
1755 StringAddFlags flags = stub->flags(); 1756 StringAddFlags flags = stub->flags();
1756 PretenureFlag pretenure_flag = stub->pretenure_flag(); 1757 PretenureFlag pretenure_flag = stub->pretenure_flag();
1757 1758
1758 HValue* left = GetParameter(StringAddStub::kLeft); 1759 HValue* left = GetParameter(Descriptor::kLeft);
1759 HValue* right = GetParameter(StringAddStub::kRight); 1760 HValue* right = GetParameter(Descriptor::kRight);
1760 1761
1761 // Make sure that both arguments are strings if not known in advance. 1762 // Make sure that both arguments are strings if not known in advance.
1762 if ((flags & STRING_ADD_CHECK_LEFT) == STRING_ADD_CHECK_LEFT) { 1763 if ((flags & STRING_ADD_CHECK_LEFT) == STRING_ADD_CHECK_LEFT) {
1763 left = 1764 left =
1764 BuildToString(left, (flags & STRING_ADD_CONVERT) == STRING_ADD_CONVERT); 1765 BuildToString(left, (flags & STRING_ADD_CONVERT) == STRING_ADD_CONVERT);
1765 } 1766 }
1766 if ((flags & STRING_ADD_CHECK_RIGHT) == STRING_ADD_CHECK_RIGHT) { 1767 if ((flags & STRING_ADD_CHECK_RIGHT) == STRING_ADD_CHECK_RIGHT) {
1767 right = BuildToString(right, 1768 right = BuildToString(right,
1768 (flags & STRING_ADD_CONVERT) == STRING_ADD_CONVERT); 1769 (flags & STRING_ADD_CONVERT) == STRING_ADD_CONVERT);
1769 } 1770 }
1770 1771
1771 return BuildStringAdd(left, right, HAllocationMode(pretenure_flag)); 1772 return BuildStringAdd(left, right, HAllocationMode(pretenure_flag));
1772 } 1773 }
1773 1774
1774 1775
1775 Handle<Code> StringAddStub::GenerateCode() { 1776 Handle<Code> StringAddStub::GenerateCode() {
1776 return DoGenerateCode(this); 1777 return DoGenerateCode(this);
1777 } 1778 }
1778 1779
1779 template <> 1780 template <>
1780 HValue* CodeStubGraphBuilder<ToBooleanICStub>::BuildCodeInitializedStub() { 1781 HValue* CodeStubGraphBuilder<ToBooleanICStub>::BuildCodeInitializedStub() {
1781 ToBooleanICStub* stub = casted_stub(); 1782 ToBooleanICStub* stub = casted_stub();
1782 IfBuilder if_true(this); 1783 IfBuilder if_true(this);
1783 if_true.If<HBranch>(GetParameter(0), stub->types()); 1784 if_true.If<HBranch>(GetParameter(Descriptor::kArgument), stub->types());
1784 if_true.Then(); 1785 if_true.Then();
1785 if_true.Return(graph()->GetConstantTrue()); 1786 if_true.Return(graph()->GetConstantTrue());
1786 if_true.Else(); 1787 if_true.Else();
1787 if_true.End(); 1788 if_true.End();
1788 return graph()->GetConstantFalse(); 1789 return graph()->GetConstantFalse();
1789 } 1790 }
1790 1791
1791 Handle<Code> ToBooleanICStub::GenerateCode() { return DoGenerateCode(this); } 1792 Handle<Code> ToBooleanICStub::GenerateCode() { return DoGenerateCode(this); }
1792 1793
1793 template <> 1794 template <>
1794 HValue* CodeStubGraphBuilder<StoreGlobalStub>::BuildCodeInitializedStub() { 1795 HValue* CodeStubGraphBuilder<StoreGlobalStub>::BuildCodeInitializedStub() {
1795 StoreGlobalStub* stub = casted_stub(); 1796 StoreGlobalStub* stub = casted_stub();
1796 HParameter* value = GetParameter(StoreDescriptor::kValueIndex); 1797 HParameter* value = GetParameter(Descriptor::kValue);
1797 if (stub->check_global()) { 1798 if (stub->check_global()) {
1798 // Check that the map of the global has not changed: use a placeholder map 1799 // Check that the map of the global has not changed: use a placeholder map
1799 // that will be replaced later with the global object's map. 1800 // that will be replaced later with the global object's map.
1800 HParameter* proxy = GetParameter(StoreDescriptor::kReceiverIndex); 1801 HParameter* proxy = GetParameter(Descriptor::kReceiver);
1801 HValue* proxy_map = 1802 HValue* proxy_map =
1802 Add<HLoadNamedField>(proxy, nullptr, HObjectAccess::ForMap()); 1803 Add<HLoadNamedField>(proxy, nullptr, HObjectAccess::ForMap());
1803 HValue* global = 1804 HValue* global =
1804 Add<HLoadNamedField>(proxy_map, nullptr, HObjectAccess::ForPrototype()); 1805 Add<HLoadNamedField>(proxy_map, nullptr, HObjectAccess::ForPrototype());
1805 HValue* map_cell = Add<HConstant>(isolate()->factory()->NewWeakCell( 1806 HValue* map_cell = Add<HConstant>(isolate()->factory()->NewWeakCell(
1806 StoreGlobalStub::global_map_placeholder(isolate()))); 1807 StoreGlobalStub::global_map_placeholder(isolate())));
1807 HValue* expected_map = Add<HLoadNamedField>( 1808 HValue* expected_map = Add<HLoadNamedField>(
1808 map_cell, nullptr, HObjectAccess::ForWeakCellValue()); 1809 map_cell, nullptr, HObjectAccess::ForWeakCellValue());
1809 HValue* map = 1810 HValue* map =
1810 Add<HLoadNamedField>(global, nullptr, HObjectAccess::ForMap()); 1811 Add<HLoadNamedField>(global, nullptr, HObjectAccess::ForMap());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1913 } 1914 }
1914 1915
1915 1916
1916 Handle<Code> ElementsTransitionAndStoreStub::GenerateCode() { 1917 Handle<Code> ElementsTransitionAndStoreStub::GenerateCode() {
1917 return DoGenerateCode(this); 1918 return DoGenerateCode(this);
1918 } 1919 }
1919 1920
1920 1921
1921 template <> 1922 template <>
1922 HValue* CodeStubGraphBuilder<ToObjectStub>::BuildCodeStub() { 1923 HValue* CodeStubGraphBuilder<ToObjectStub>::BuildCodeStub() {
1923 HValue* receiver = GetParameter(TypeConversionDescriptor::kArgumentIndex); 1924 HValue* receiver = GetParameter(Descriptor::kArgument);
1924 return BuildToObject(receiver); 1925 return BuildToObject(receiver);
1925 } 1926 }
1926 1927
1927 1928
1928 Handle<Code> ToObjectStub::GenerateCode() { return DoGenerateCode(this); } 1929 Handle<Code> ToObjectStub::GenerateCode() { return DoGenerateCode(this); }
1929 1930
1930 template <> 1931 template <>
1931 HValue* CodeStubGraphBuilder<LoadDictionaryElementStub>::BuildCodeStub() { 1932 HValue* CodeStubGraphBuilder<LoadDictionaryElementStub>::BuildCodeStub() {
1932 HValue* receiver = GetParameter(LoadDescriptor::kReceiverIndex); 1933 HValue* receiver = GetParameter(Descriptor::kReceiver);
1933 HValue* key = GetParameter(LoadDescriptor::kNameIndex); 1934 HValue* key = GetParameter(Descriptor::kName);
1934 1935
1935 Add<HCheckSmi>(key); 1936 Add<HCheckSmi>(key);
1936 1937
1937 HValue* elements = AddLoadElements(receiver); 1938 HValue* elements = AddLoadElements(receiver);
1938 1939
1939 HValue* hash = BuildElementIndexHash(key); 1940 HValue* hash = BuildElementIndexHash(key);
1940 1941
1941 return BuildUncheckedDictionaryElementLoad(receiver, elements, key, hash); 1942 return BuildUncheckedDictionaryElementLoad(receiver, elements, key, hash);
1942 } 1943 }
1943 1944
1944 1945
1945 Handle<Code> LoadDictionaryElementStub::GenerateCode() { 1946 Handle<Code> LoadDictionaryElementStub::GenerateCode() {
1946 return DoGenerateCode(this); 1947 return DoGenerateCode(this);
1947 } 1948 }
1948 1949
1949 1950
1950 template<> 1951 template<>
1951 HValue* CodeStubGraphBuilder<RegExpConstructResultStub>::BuildCodeStub() { 1952 HValue* CodeStubGraphBuilder<RegExpConstructResultStub>::BuildCodeStub() {
1952 // Determine the parameters. 1953 // Determine the parameters.
1953 HValue* length = GetParameter(RegExpConstructResultStub::kLength); 1954 HValue* length = GetParameter(Descriptor::kLength);
1954 HValue* index = GetParameter(RegExpConstructResultStub::kIndex); 1955 HValue* index = GetParameter(Descriptor::kIndex);
1955 HValue* input = GetParameter(RegExpConstructResultStub::kInput); 1956 HValue* input = GetParameter(Descriptor::kInput);
1956 1957
1957 // TODO(turbofan): This codestub has regressed to need a frame on ia32 at some 1958 // TODO(turbofan): This codestub has regressed to need a frame on ia32 at some
1958 // point and wasn't caught since it wasn't built in the snapshot. We should 1959 // point and wasn't caught since it wasn't built in the snapshot. We should
1959 // probably just replace with a TurboFan stub rather than fixing it. 1960 // probably just replace with a TurboFan stub rather than fixing it.
1960 #if !(V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87) 1961 #if !(V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87)
1961 info()->MarkMustNotHaveEagerFrame(); 1962 info()->MarkMustNotHaveEagerFrame();
1962 #endif 1963 #endif
1963 1964
1964 return BuildRegExpConstructResult(length, index, input); 1965 return BuildRegExpConstructResult(length, index, input);
1965 } 1966 }
1966 1967
1967 1968
1968 Handle<Code> RegExpConstructResultStub::GenerateCode() { 1969 Handle<Code> RegExpConstructResultStub::GenerateCode() {
1969 return DoGenerateCode(this); 1970 return DoGenerateCode(this);
1970 } 1971 }
1971 1972
1972 1973
1973 template <> 1974 template <>
1974 class CodeStubGraphBuilder<KeyedLoadGenericStub> 1975 class CodeStubGraphBuilder<KeyedLoadGenericStub>
1975 : public CodeStubGraphBuilderBase { 1976 : public CodeStubGraphBuilderBase {
1976 public: 1977 public:
1977 explicit CodeStubGraphBuilder(CompilationInfo* info, CodeStub* stub) 1978 explicit CodeStubGraphBuilder(CompilationInfo* info, CodeStub* stub)
1978 : CodeStubGraphBuilderBase(info, stub) {} 1979 : CodeStubGraphBuilderBase(info, stub) {}
1979 1980
1981 typedef KeyedLoadGenericStub::Descriptor Descriptor;
1982
1980 protected: 1983 protected:
1981 virtual HValue* BuildCodeStub(); 1984 virtual HValue* BuildCodeStub();
1982 1985
1983 void BuildElementsKindLimitCheck(HGraphBuilder::IfBuilder* if_builder, 1986 void BuildElementsKindLimitCheck(HGraphBuilder::IfBuilder* if_builder,
1984 HValue* bit_field2, 1987 HValue* bit_field2,
1985 ElementsKind kind); 1988 ElementsKind kind);
1986 1989
1987 void BuildFastElementLoad(HGraphBuilder::IfBuilder* if_builder, 1990 void BuildFastElementLoad(HGraphBuilder::IfBuilder* if_builder,
1988 HValue* receiver, 1991 HValue* receiver,
1989 HValue* key, 1992 HValue* key,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2025 js_array_check.Else(); 2028 js_array_check.Else();
2026 Push(BuildUncheckedMonomorphicElementAccess(receiver, key, NULL, 2029 Push(BuildUncheckedMonomorphicElementAccess(receiver, key, NULL,
2027 false, kind, 2030 false, kind,
2028 LOAD, NEVER_RETURN_HOLE, 2031 LOAD, NEVER_RETURN_HOLE,
2029 STANDARD_STORE)); 2032 STANDARD_STORE));
2030 js_array_check.End(); 2033 js_array_check.End();
2031 } 2034 }
2032 2035
2033 2036
2034 HValue* CodeStubGraphBuilder<KeyedLoadGenericStub>::BuildCodeStub() { 2037 HValue* CodeStubGraphBuilder<KeyedLoadGenericStub>::BuildCodeStub() {
2035 HValue* receiver = GetParameter(LoadDescriptor::kReceiverIndex); 2038 HValue* receiver = GetParameter(Descriptor::kReceiver);
2036 HValue* key = GetParameter(LoadDescriptor::kNameIndex); 2039 HValue* key = GetParameter(Descriptor::kName);
2037 // Split into a smi/integer case and unique string case. 2040 // Split into a smi/integer case and unique string case.
2038 HIfContinuation index_name_split_continuation(graph()->CreateBasicBlock(), 2041 HIfContinuation index_name_split_continuation(graph()->CreateBasicBlock(),
2039 graph()->CreateBasicBlock()); 2042 graph()->CreateBasicBlock());
2040 2043
2041 BuildKeyedIndexCheck(key, &index_name_split_continuation); 2044 BuildKeyedIndexCheck(key, &index_name_split_continuation);
2042 2045
2043 IfBuilder index_name_split(this, &index_name_split_continuation); 2046 IfBuilder index_name_split(this, &index_name_split_continuation);
2044 index_name_split.Then(); 2047 index_name_split.Then();
2045 { 2048 {
2046 // Key is an index (number) 2049 // Key is an index (number)
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2210 return Pop(); 2213 return Pop();
2211 } 2214 }
2212 2215
2213 2216
2214 Handle<Code> KeyedLoadGenericStub::GenerateCode() { 2217 Handle<Code> KeyedLoadGenericStub::GenerateCode() {
2215 return DoGenerateCode(this); 2218 return DoGenerateCode(this);
2216 } 2219 }
2217 2220
2218 } // namespace internal 2221 } // namespace internal
2219 } // namespace v8 2222 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stubs.cc ('k') | src/compiler/code-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698