4e321413d8
This is a pre-work for allocating feedback vectors lazily. Feedback cells are required to share the feedback vectors across the different closures of the same function. Currently, they are held in the CreateClosureSlot in the feedback vector. With lazy feedback vector allocation, we may not have a feedback vector. However, we still need a place to store the feedback cells, so if feedback vector is allocated in future it can still be shared across closures. Here is the detailed design doc: https://docs.google.com/document/d/1m2PTNChrlJqw9MiwK_xEJfqbFHAgEHmgGqmIN49PaBY/edit BUG=v8:8394 Change-Id: Ib406d862b2809b1293bfecdcfcf8dea3127cb1c7 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1503753 Commit-Queue: Mythri Alle <mythria@chromium.org> Reviewed-by: Toon Verwaest <verwaest@chromium.org> Reviewed-by: Ross McIlroy <rmcilroy@chromium.org> Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#60147}
280 lines
8.6 KiB
Plaintext
280 lines
8.6 KiB
Plaintext
#
|
|
# Autogenerated by generate-bytecode-expectations.
|
|
#
|
|
|
|
---
|
|
wrap: yes
|
|
private fields: yes
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class A {
|
|
#a;
|
|
constructor() {
|
|
this.#a = 1;
|
|
}
|
|
}
|
|
|
|
class B {
|
|
#a = 1;
|
|
}
|
|
new A;
|
|
new B;
|
|
}
|
|
"
|
|
frame size: 10
|
|
parameter count: 1
|
|
bytecode array length: 143
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(4),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(2), U8(0), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(6),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(9),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(9),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(9), U8(1),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(Mov), R(5), R(7),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(3),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(7),
|
|
B(StaNamedProperty), R(5), U8(5), U8(0),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(3), R(0),
|
|
/* 38 E> */ B(CreateBlockContext), U8(6),
|
|
B(PushContext), R(4),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(8),
|
|
B(CreateClosure), U8(8), U8(2), U8(2),
|
|
B(Star), R(5),
|
|
B(LdaConstant), U8(7),
|
|
B(Star), R(6),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(9),
|
|
B(LdaConstant), U8(3),
|
|
B(Star), R(9),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(9), U8(1),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(Mov), R(5), R(7),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(6), U8(3),
|
|
B(Star), R(6),
|
|
B(Mov), R(7), R(2),
|
|
B(CreateClosure), U8(9), U8(3), U8(2),
|
|
B(Star), R(7),
|
|
B(StaNamedProperty), R(5), U8(5), U8(2),
|
|
B(PopContext), R(4),
|
|
B(Mov), R(2), R(1),
|
|
/* 136 S> */ B(Ldar), R(3),
|
|
/* 136 E> */ B(Construct), R(3), R(0), U8(0), U8(4),
|
|
/* 145 S> */ B(Ldar), R(2),
|
|
/* 145 E> */ B(Construct), R(2), R(0), U8(0), U8(6),
|
|
B(LdaUndefined),
|
|
/* 154 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#a"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SYMBOL_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
{
|
|
class A extends class {} {
|
|
#a;
|
|
constructor() {
|
|
super();
|
|
this.#a = 1;
|
|
}
|
|
}
|
|
|
|
class B extends class {} {
|
|
#a = 1;
|
|
#b = this.#a;
|
|
foo() { return this.#a; }
|
|
bar(v) { this.#b = v; }
|
|
constructor() {
|
|
super();
|
|
this.foo();
|
|
this.bar(3);
|
|
}
|
|
}
|
|
|
|
class C extends B {
|
|
#a = 2;
|
|
constructor() {
|
|
(() => super())();
|
|
}
|
|
}
|
|
|
|
new A;
|
|
new B;
|
|
new C;
|
|
};
|
|
"
|
|
frame size: 15
|
|
parameter count: 1
|
|
bytecode array length: 289
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
B(CreateBlockContext), U8(0),
|
|
B(PushContext), R(6),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(LdaTheHole),
|
|
B(Star), R(14),
|
|
B(CreateClosure), U8(3), U8(0), U8(2),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(2),
|
|
B(Star), R(12),
|
|
B(Mov), R(11), R(13),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3),
|
|
B(Star), R(12),
|
|
B(CreateClosure), U8(4), U8(1), U8(2),
|
|
B(Star), R(7),
|
|
B(LdaConstant), U8(1),
|
|
B(Star), R(8),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(Mov), R(7), R(9),
|
|
B(Mov), R(13), R(10),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(3),
|
|
B(Star), R(8),
|
|
B(Mov), R(9), R(5),
|
|
B(CreateClosure), U8(6), U8(2), U8(2),
|
|
B(Star), R(9),
|
|
B(StaNamedProperty), R(7), U8(7), U8(0),
|
|
B(PopContext), R(6),
|
|
B(Mov), R(5), R(0),
|
|
/* 38 E> */ B(CreateBlockContext), U8(8),
|
|
B(PushContext), R(6),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(LdaTheHole),
|
|
B(Star), R(14),
|
|
B(CreateClosure), U8(11), U8(3), U8(2),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(10),
|
|
B(Star), R(12),
|
|
B(Mov), R(11), R(13),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(12), U8(3),
|
|
B(Star), R(12),
|
|
B(CreateClosure), U8(12), U8(4), U8(2),
|
|
B(Star), R(7),
|
|
B(LdaConstant), U8(9),
|
|
B(Star), R(8),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(LdaConstant), U8(13),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(13),
|
|
B(Star), R(11),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
|
|
B(StaCurrentContextSlot), U8(5),
|
|
B(CreateClosure), U8(14), U8(5), U8(2),
|
|
B(Star), R(11),
|
|
B(CreateClosure), U8(15), U8(6), U8(2),
|
|
B(Star), R(12),
|
|
B(Mov), R(7), R(9),
|
|
B(Mov), R(13), R(10),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(5),
|
|
B(Star), R(8),
|
|
B(Mov), R(9), R(4),
|
|
B(CreateClosure), U8(16), U8(7), U8(2),
|
|
B(Star), R(9),
|
|
B(StaNamedProperty), R(7), U8(7), U8(2),
|
|
B(PopContext), R(6),
|
|
B(Mov), R(4), R(1),
|
|
/* 140 E> */ B(CreateBlockContext), U8(17),
|
|
B(PushContext), R(6),
|
|
B(LdaTheHole),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
/* 356 E> */ B(CreateClosure), U8(19), U8(8), U8(2),
|
|
B(Star), R(7),
|
|
B(LdaConstant), U8(18),
|
|
B(Star), R(8),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(LdaConstant), U8(5),
|
|
B(Star), R(11),
|
|
B(CallRuntime), U16(Runtime::kCreatePrivateNameSymbol), R(11), U8(1),
|
|
B(StaCurrentContextSlot), U8(4),
|
|
B(Mov), R(7), R(9),
|
|
B(Mov), R(4), R(10),
|
|
B(CallRuntime), U16(Runtime::kDefineClass), R(8), U8(3),
|
|
B(Star), R(8),
|
|
B(Mov), R(9), R(3),
|
|
B(CreateClosure), U8(20), U8(9), U8(2),
|
|
B(Star), R(9),
|
|
B(StaNamedProperty), R(7), U8(7), U8(4),
|
|
B(PopContext), R(6),
|
|
B(Mov), R(3), R(2),
|
|
/* 430 S> */ B(Ldar), R(5),
|
|
/* 430 E> */ B(Construct), R(5), R(0), U8(0), U8(6),
|
|
/* 439 S> */ B(Ldar), R(4),
|
|
/* 439 E> */ B(Construct), R(4), R(0), U8(0), U8(8),
|
|
/* 448 S> */ B(Ldar), R(3),
|
|
/* 448 E> */ B(Construct), R(3), R(0), U8(0), U8(10),
|
|
B(LdaUndefined),
|
|
/* 458 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#a"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SYMBOL_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["#b"],
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SCOPE_INFO_TYPE,
|
|
FIXED_ARRAY_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|