c82cd31325
Previously StaNamedProperty and StaKeyedProperty were in a weird state where they claimed to not touch the accumulator, but actually did in case they were deopted in the middle. A frame was added in the middle to overwrite the accumulator again with the right value before returning from the setter, using a lot of complexity in the deoptimizer. This changes those instructions to be marked as writing to the accumulator (e.g., the result of the setter), and uses to manually store and reload into the accumulator the value being stored. If we want to avoid the additional bytecodes, we could make sure that bytecodes that claim to leave the accumulator alone don't deopt back to Advance/Dispatch but LoadAccumulatorWithValue/Advance/Dispatch. That's in a way similar to what happened before this CL, but I believe could be implemented much simpler. Bug: Change-Id: I4850a690ef5a30976701d0e050951faa46fd1c18 Reviewed-on: https://chromium-review.googlesource.com/753487 Reviewed-by: Ulan Degenbaev <ulan@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Commit-Queue: Toon Verwaest <verwaest@chromium.org> Cr-Commit-Position: refs/heads/master@{#49159}
289 lines
6.3 KiB
Plaintext
289 lines
6.3 KiB
Plaintext
#
|
|
# Autogenerated by generate-bytecode-expectations.
|
|
#
|
|
|
|
---
|
|
wrap: yes
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; return ++a;
|
|
"
|
|
frame size: 1
|
|
parameter count: 1
|
|
bytecode array length: 10
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
/* 45 S> */ B(Inc), U8(0),
|
|
B(Star), R(0),
|
|
/* 56 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; return a++;
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
/* 45 S> */ B(ToNumeric), U8(0),
|
|
B(Star), R(1),
|
|
B(Inc), U8(0),
|
|
B(Star), R(0),
|
|
B(Ldar), R(1),
|
|
/* 56 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; return --a;
|
|
"
|
|
frame size: 1
|
|
parameter count: 1
|
|
bytecode array length: 10
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
/* 45 S> */ B(Dec), U8(0),
|
|
B(Star), R(0),
|
|
/* 56 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; return a--;
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 16
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
/* 45 S> */ B(ToNumeric), U8(0),
|
|
B(Star), R(1),
|
|
B(Dec), U8(0),
|
|
B(Star), R(0),
|
|
B(Ldar), R(1),
|
|
/* 56 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = { val: 1 }; return a.val++;
|
|
"
|
|
frame size: 4
|
|
parameter count: 1
|
|
bytecode array length: 28
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
|
|
B(Mov), R(1), R(0),
|
|
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
|
|
B(ToNumeric), U8(3),
|
|
B(Star), R(2),
|
|
B(Inc), U8(3),
|
|
B(Star), R(3),
|
|
/* 66 E> */ B(StaNamedProperty), R(1), U8(1), U8(4),
|
|
B(Ldar), R(2),
|
|
/* 69 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
FIXED_ARRAY_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["val"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = { val: 1 }; return --a.val;
|
|
"
|
|
frame size: 3
|
|
parameter count: 1
|
|
bytecode array length: 24
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(41), R(1),
|
|
B(Mov), R(1), R(0),
|
|
/* 54 S> */ B(LdaNamedProperty), R(1), U8(1), U8(1),
|
|
B(Dec), U8(3),
|
|
B(Star), R(2),
|
|
/* 65 E> */ B(StaNamedProperty), R(1), U8(1), U8(4),
|
|
B(Ldar), R(2),
|
|
/* 69 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
FIXED_ARRAY_TYPE,
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["val"],
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var name = 'var'; var a = { val: 1 }; return a[name]--;
|
|
"
|
|
frame size: 6
|
|
parameter count: 1
|
|
bytecode array length: 33
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 45 S> */ B(LdaConstant), U8(0),
|
|
B(Star), R(0),
|
|
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), R(2),
|
|
B(Mov), R(2), R(1),
|
|
/* 72 S> */ B(Ldar), R(0),
|
|
/* 81 E> */ B(LdaKeyedProperty), R(2), U8(1),
|
|
B(ToNumeric), U8(3),
|
|
B(Star), R(4),
|
|
B(Dec), U8(3),
|
|
B(Star), R(5),
|
|
/* 86 E> */ B(StaKeyedProperty), R(2), R(0), U8(4),
|
|
B(Ldar), R(4),
|
|
/* 89 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["var"],
|
|
FIXED_ARRAY_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var name = 'var'; var a = { val: 1 }; return ++a[name];
|
|
"
|
|
frame size: 5
|
|
parameter count: 1
|
|
bytecode array length: 29
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 45 S> */ B(LdaConstant), U8(0),
|
|
B(Star), R(0),
|
|
/* 60 S> */ B(CreateObjectLiteral), U8(1), U8(0), U8(41), R(2),
|
|
B(Mov), R(2), R(1),
|
|
/* 72 S> */ B(Ldar), R(0),
|
|
/* 83 E> */ B(LdaKeyedProperty), R(2), U8(1),
|
|
B(Inc), U8(3),
|
|
B(Star), R(4),
|
|
/* 87 E> */ B(StaKeyedProperty), R(2), R(0), U8(4),
|
|
B(Ldar), R(4),
|
|
/* 89 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
ONE_BYTE_INTERNALIZED_STRING_TYPE ["var"],
|
|
FIXED_ARRAY_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; var b = function() { return a }; return ++a;
|
|
"
|
|
frame size: 2
|
|
parameter count: 1
|
|
bytecode array length: 22
|
|
bytecodes: [
|
|
B(CreateFunctionContext), U8(1),
|
|
B(PushContext), R(1),
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
|
|
/* 53 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
|
|
B(Star), R(0),
|
|
/* 78 S> */ B(LdaCurrentContextSlot), U8(4),
|
|
B(Inc), U8(1),
|
|
/* 87 E> */ B(StaCurrentContextSlot), U8(4),
|
|
/* 89 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var a = 1; var b = function() { return a }; return a--;
|
|
"
|
|
frame size: 3
|
|
parameter count: 1
|
|
bytecode array length: 28
|
|
bytecodes: [
|
|
B(CreateFunctionContext), U8(1),
|
|
B(PushContext), R(1),
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 42 S> */ B(LdaSmi), I8(1),
|
|
/* 42 E> */ B(StaCurrentContextSlot), U8(4),
|
|
/* 53 S> */ B(CreateClosure), U8(0), U8(0), U8(2),
|
|
B(Star), R(0),
|
|
/* 78 S> */ B(LdaCurrentContextSlot), U8(4),
|
|
B(ToNumeric), U8(1),
|
|
B(Star), R(2),
|
|
B(Dec), U8(1),
|
|
/* 86 E> */ B(StaCurrentContextSlot), U8(4),
|
|
B(Ldar), R(2),
|
|
/* 89 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
SHARED_FUNCTION_INFO_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|
|
---
|
|
snippet: "
|
|
var idx = 1; var a = [1, 2]; return a[idx++] = 2;
|
|
"
|
|
frame size: 5
|
|
parameter count: 1
|
|
bytecode array length: 32
|
|
bytecodes: [
|
|
/* 30 E> */ B(StackCheck),
|
|
/* 44 S> */ B(LdaSmi), I8(1),
|
|
B(Star), R(0),
|
|
/* 55 S> */ B(CreateArrayLiteral), U8(0), U8(0), U8(37),
|
|
B(Star), R(1),
|
|
/* 63 S> */ B(Ldar), R(0),
|
|
B(ToNumeric), U8(1),
|
|
B(Star), R(3),
|
|
B(Inc), U8(1),
|
|
B(Star), R(0),
|
|
B(LdaSmi), I8(2),
|
|
B(Star), R(4),
|
|
/* 79 E> */ B(StaKeyedProperty), R(1), R(3), U8(2),
|
|
B(Ldar), R(4),
|
|
/* 83 S> */ B(Return),
|
|
]
|
|
constant pool: [
|
|
TUPLE2_TYPE,
|
|
]
|
|
handlers: [
|
|
]
|
|
|