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

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

Issue 1989363004: [turbofan] Add FixedArray peephole optimizations to CodeStubAssembler (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Final review feedback 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/code-stub-assembler.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 <sstream> 7 #include <sstream>
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-factory.h" 10 #include "src/code-factory.h"
(...skipping 3478 matching lines...) Expand 10 before | Expand all | Expand 10 after
3489 typedef compiler::Node Node; 3489 typedef compiler::Node Node;
3490 Node* context = assembler->Parameter(3); 3490 Node* context = assembler->Parameter(3);
3491 Node* receiver = assembler->Parameter(0); 3491 Node* receiver = assembler->Parameter(0);
3492 // For now we only support receiver_is_holder. 3492 // For now we only support receiver_is_holder.
3493 DCHECK(receiver_is_holder()); 3493 DCHECK(receiver_is_holder());
3494 Node* holder = receiver; 3494 Node* holder = receiver;
3495 Node* map = assembler->LoadMap(receiver); 3495 Node* map = assembler->LoadMap(receiver);
3496 Node* descriptors = assembler->LoadMapDescriptors(map); 3496 Node* descriptors = assembler->LoadMapDescriptors(map);
3497 Node* offset = 3497 Node* offset =
3498 assembler->Int32Constant(DescriptorArray::ToValueIndex(index())); 3498 assembler->Int32Constant(DescriptorArray::ToValueIndex(index()));
3499 Node* callback = 3499 Node* callback = assembler->LoadFixedArrayElement(descriptors, offset);
3500 assembler->LoadFixedArrayElementInt32Index(descriptors, offset);
3501 assembler->TailCallStub(CodeFactory::ApiGetter(isolate()), context, receiver, 3500 assembler->TailCallStub(CodeFactory::ApiGetter(isolate()), context, receiver,
3502 holder, callback); 3501 holder, callback);
3503 } 3502 }
3504 3503
3505 void LessThanStub::GenerateAssembly(CodeStubAssembler* assembler) const { 3504 void LessThanStub::GenerateAssembly(CodeStubAssembler* assembler) const {
3506 GenerateAbstractRelationalComparison(assembler, kLessThan); 3505 GenerateAbstractRelationalComparison(assembler, kLessThan);
3507 } 3506 }
3508 3507
3509 void LessThanOrEqualStub::GenerateAssembly(CodeStubAssembler* assembler) const { 3508 void LessThanOrEqualStub::GenerateAssembly(CodeStubAssembler* assembler) const {
3510 GenerateAbstractRelationalComparison(assembler, kLessThanOrEqual); 3509 GenerateAbstractRelationalComparison(assembler, kLessThanOrEqual);
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after
3866 CodeStubAssembler* assembler, compiler::CodeAssembler::Label* call_runtime, 3865 CodeStubAssembler* assembler, compiler::CodeAssembler::Label* call_runtime,
3867 compiler::Node* closure, compiler::Node* literals_index, 3866 compiler::Node* closure, compiler::Node* literals_index,
3868 compiler::Node* properties_count) { 3867 compiler::Node* properties_count) {
3869 typedef compiler::Node Node; 3868 typedef compiler::Node Node;
3870 typedef compiler::CodeAssembler::Label Label; 3869 typedef compiler::CodeAssembler::Label Label;
3871 typedef compiler::CodeAssembler::Variable Variable; 3870 typedef compiler::CodeAssembler::Variable Variable;
3872 3871
3873 Node* undefined = assembler->UndefinedConstant(); 3872 Node* undefined = assembler->UndefinedConstant();
3874 Node* literals_array = 3873 Node* literals_array =
3875 assembler->LoadObjectField(closure, JSFunction::kLiteralsOffset); 3874 assembler->LoadObjectField(closure, JSFunction::kLiteralsOffset);
3876 Node* allocation_site = assembler->LoadFixedArrayElementSmiIndex( 3875 Node* allocation_site = assembler->LoadFixedArrayElement(
3877 literals_array, literals_index, 3876 literals_array, literals_index,
3878 LiteralsArray::kFirstLiteralIndex * kPointerSize); 3877 LiteralsArray::kFirstLiteralIndex * kPointerSize,
3878 CodeStubAssembler::SMI_PARAMETERS);
3879 assembler->GotoIf(assembler->WordEqual(allocation_site, undefined), 3879 assembler->GotoIf(assembler->WordEqual(allocation_site, undefined),
3880 call_runtime); 3880 call_runtime);
3881 3881
3882 // Calculate the object and allocation size based on the properties count. 3882 // Calculate the object and allocation size based on the properties count.
3883 Node* object_size = assembler->IntPtrAdd( 3883 Node* object_size = assembler->IntPtrAdd(
3884 assembler->WordShl(properties_count, kPointerSizeLog2), 3884 assembler->WordShl(properties_count, kPointerSizeLog2),
3885 assembler->IntPtrConstant(JSObject::kHeaderSize)); 3885 assembler->IntPtrConstant(JSObject::kHeaderSize));
3886 Node* allocation_size = object_size; 3886 Node* allocation_size = object_size;
3887 if (FLAG_allocation_site_pretenuring) { 3887 if (FLAG_allocation_site_pretenuring) {
3888 allocation_size = assembler->IntPtrAdd( 3888 allocation_size = assembler->IntPtrAdd(
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
4466 bool track_allocation_site = 4466 bool track_allocation_site =
4467 AllocationSite::GetMode(elements_kind()) == TRACK_ALLOCATION_SITE && 4467 AllocationSite::GetMode(elements_kind()) == TRACK_ALLOCATION_SITE &&
4468 override_mode() != DISABLE_ALLOCATION_SITES; 4468 override_mode() != DISABLE_ALLOCATION_SITES;
4469 Node* allocation_site = 4469 Node* allocation_site =
4470 track_allocation_site 4470 track_allocation_site
4471 ? assembler->Parameter( 4471 ? assembler->Parameter(
4472 ArrayNoArgumentConstructorDescriptor::kAllocationSiteIndex) 4472 ArrayNoArgumentConstructorDescriptor::kAllocationSiteIndex)
4473 : nullptr; 4473 : nullptr;
4474 Node* array_map = 4474 Node* array_map =
4475 assembler->LoadJSArrayElementsMap(elements_kind(), native_context); 4475 assembler->LoadJSArrayElementsMap(elements_kind(), native_context);
4476 Node* array = assembler->AllocateJSArray(elements_kind(), array_map, 4476 Node* array = assembler->AllocateJSArray(
4477 JSArray::kPreallocatedArrayElements, 4477 elements_kind(), array_map,
4478 0, allocation_site); 4478 assembler->IntPtrConstant(JSArray::kPreallocatedArrayElements),
4479 assembler->IntPtrConstant(0), allocation_site);
4479 assembler->Return(array); 4480 assembler->Return(array);
4480 } 4481 }
4481 4482
4482 void InternalArrayNoArgumentConstructorStub::GenerateAssembly( 4483 void InternalArrayNoArgumentConstructorStub::GenerateAssembly(
4483 CodeStubAssembler* assembler) const { 4484 CodeStubAssembler* assembler) const {
4484 typedef compiler::Node Node; 4485 typedef compiler::Node Node;
4485 Node* array_map = assembler->LoadObjectField( 4486 Node* array_map = assembler->LoadObjectField(
4486 assembler->Parameter( 4487 assembler->Parameter(
4487 ArrayNoArgumentConstructorDescriptor::kFunctionIndex), 4488 ArrayNoArgumentConstructorDescriptor::kFunctionIndex),
4488 JSFunction::kPrototypeOrInitialMapOffset); 4489 JSFunction::kPrototypeOrInitialMapOffset);
4489 Node* array = assembler->AllocateJSArray(elements_kind(), array_map, 4490 Node* array = assembler->AllocateJSArray(
4490 JSArray::kPreallocatedArrayElements, 4491 elements_kind(), array_map,
4491 0, nullptr); 4492 assembler->IntPtrConstant(JSArray::kPreallocatedArrayElements),
4493 assembler->IntPtrConstant(0), nullptr);
4492 assembler->Return(array); 4494 assembler->Return(array);
4493 } 4495 }
4494 4496
4495 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) 4497 ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate)
4496 : PlatformCodeStub(isolate) { 4498 : PlatformCodeStub(isolate) {
4497 minor_key_ = ArgumentCountBits::encode(ANY); 4499 minor_key_ = ArgumentCountBits::encode(ANY);
4498 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); 4500 ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate);
4499 } 4501 }
4500 4502
4501 4503
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
4533 if (type->Is(Type::UntaggedPointer())) { 4535 if (type->Is(Type::UntaggedPointer())) {
4534 return Representation::External(); 4536 return Representation::External();
4535 } 4537 }
4536 4538
4537 DCHECK(!type->Is(Type::Untagged())); 4539 DCHECK(!type->Is(Type::Untagged()));
4538 return Representation::Tagged(); 4540 return Representation::Tagged();
4539 } 4541 }
4540 4542
4541 } // namespace internal 4543 } // namespace internal
4542 } // namespace v8 4544 } // namespace v8
OLDNEW
« no previous file with comments | « src/code-stub-assembler.cc ('k') | src/compiler/code-assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698