[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:
bmeurer 2017-04-13 06:03:46 -07:00 committed by Commit bot
parent c80c0f11f4
commit 5eec7df9b3
2 changed files with 5 additions and 5 deletions

View File

@ -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

View File

@ -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;
}