[turbofan] Set proper representation for initial arguments length.
The JSArgumentsObject::length representation is initially Smi, so we can record that on the initial map and use it to optimize the accesses in TurboFan based on that. Similar for JSSloppyArgumentsObject::caller. BUG=v8:6262 R=yangguo@chromium.org Review-Url: https://codereview.chromium.org/2810333004 Cr-Commit-Position: refs/heads/master@{#44644}
This commit is contained in:
parent
c80c0f11f4
commit
5eec7df9b3
@ -3029,13 +3029,13 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
|
||||
{ // length
|
||||
Descriptor d = Descriptor::DataField(
|
||||
factory->length_string(), JSSloppyArgumentsObject::kLengthIndex,
|
||||
DONT_ENUM, Representation::Tagged());
|
||||
DONT_ENUM, Representation::Smi());
|
||||
map->AppendDescriptor(&d);
|
||||
}
|
||||
{ // callee
|
||||
Descriptor d = Descriptor::DataField(
|
||||
factory->callee_string(), JSSloppyArgumentsObject::kCalleeIndex,
|
||||
DONT_ENUM, Representation::Tagged());
|
||||
DONT_ENUM, Representation::HeapObject());
|
||||
map->AppendDescriptor(&d);
|
||||
}
|
||||
// @@iterator method is added later.
|
||||
@ -3086,7 +3086,7 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
|
||||
{ // length
|
||||
Descriptor d = Descriptor::DataField(
|
||||
factory->length_string(), JSStrictArgumentsObject::kLengthIndex,
|
||||
DONT_ENUM, Representation::Tagged());
|
||||
DONT_ENUM, Representation::Smi());
|
||||
map->AppendDescriptor(&d);
|
||||
}
|
||||
{ // callee
|
||||
|
@ -716,8 +716,8 @@ FieldAccess AccessBuilder::ForValue() {
|
||||
FieldAccess AccessBuilder::ForArgumentsLength() {
|
||||
FieldAccess access = {kTaggedBase, JSArgumentsObject::kLengthOffset,
|
||||
Handle<Name>(), MaybeHandle<Map>(),
|
||||
Type::NonInternal(), MachineType::AnyTagged(),
|
||||
kFullWriteBarrier};
|
||||
Type::SignedSmall(), MachineType::TaggedSigned(),
|
||||
kNoWriteBarrier};
|
||||
return access;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user