Skip to content

Commit 3c9fa12

Browse files
committed
Version 12.6.228.1 (cherry-pick)
Merged 33e89eb Revert "[interpreter] Only Clear/Restore pending messages when CMD_RETHROW" Change-Id: Ied65ba31216dfb226f7f10344f0bafb8145b3c51 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5526442 Owners-Override: Michael Achenbach <[email protected]> Bot-Commit: Rubber Stamper <[email protected]> Cr-Commit-Position: refs/heads/12.6.228@{#2} Cr-Branched-From: 981bb15-refs/heads/main@{#93835}
1 parent 68307a7 commit 3c9fa12

File tree

10 files changed

+172
-186
lines changed

10 files changed

+172
-186
lines changed

include/v8-version.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#define V8_MAJOR_VERSION 12
1212
#define V8_MINOR_VERSION 6
1313
#define V8_BUILD_NUMBER 228
14-
#define V8_PATCH_LEVEL 0
14+
#define V8_PATCH_LEVEL 1
1515

1616
// Use 1 for candidates and 0 otherwise.
1717
// (Boolean macro values are not supported by all preprocessors.)

src/interpreter/bytecode-generator.cc

Lines changed: 13 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -180,13 +180,13 @@ class V8_NODISCARD BytecodeGenerator::ControlScope {
180180
// paths going through the finally-block to dispatch after leaving the block.
181181
class V8_NODISCARD BytecodeGenerator::ControlScope::DeferredCommands final {
182182
public:
183+
183184
DeferredCommands(BytecodeGenerator* generator, Register token_register,
184-
Register result_register, Register message_register)
185+
Register result_register)
185186
: generator_(generator),
186187
deferred_(generator->zone()),
187188
token_register_(token_register),
188189
result_register_(result_register),
189-
message_register_(message_register),
190190
return_token_(-1),
191191
async_return_token_(-1) {
192192
// There's always a rethrow path.
@@ -229,12 +229,6 @@ class V8_NODISCARD BytecodeGenerator::ControlScope::DeferredCommands final {
229229
// Smi token value is just as good, and by reusing it we save a bytecode.
230230
builder()->StoreAccumulatorInRegister(result_register_);
231231
}
232-
if (command == CMD_RETHROW) {
233-
// Clear message object as we enter the catch block. It will be restored
234-
// if we rethrow.
235-
builder()->LoadTheHole().SetPendingMessage().StoreAccumulatorInRegister(
236-
message_register_);
237-
}
238232
}
239233

240234
// Records the dispatch token to be used to identify the re-throw path when
@@ -275,13 +269,6 @@ class V8_NODISCARD BytecodeGenerator::ControlScope::DeferredCommands final {
275269
.CompareReference(token_register_)
276270
.JumpIfFalse(ToBooleanMode::kAlreadyBoolean, &fall_through);
277271

278-
if (entry.command == CMD_RETHROW) {
279-
// Pending message object is restored on exit.
280-
builder()
281-
->LoadAccumulatorWithRegister(message_register_)
282-
.SetPendingMessage();
283-
}
284-
285272
if (CommandUsesAccumulator(entry.command)) {
286273
builder()->LoadAccumulatorWithRegister(result_register_);
287274
}
@@ -300,13 +287,6 @@ class V8_NODISCARD BytecodeGenerator::ControlScope::DeferredCommands final {
300287
for (const Entry& entry : deferred_) {
301288
builder()->Bind(jump_table, entry.token);
302289

303-
if (entry.command == CMD_RETHROW) {
304-
// Pending message object is restored on exit.
305-
builder()
306-
->LoadAccumulatorWithRegister(message_register_)
307-
.SetPendingMessage();
308-
}
309-
310290
if (CommandUsesAccumulator(entry.command)) {
311291
builder()->LoadAccumulatorWithRegister(result_register_);
312292
}
@@ -361,7 +341,6 @@ class V8_NODISCARD BytecodeGenerator::ControlScope::DeferredCommands final {
361341
ZoneVector<Entry> deferred_;
362342
Register token_register_;
363343
Register result_register_;
364-
Register message_register_;
365344

366345
// Tokens for commands that don't need a statement.
367346
int return_token_;
@@ -2578,14 +2557,12 @@ void BytecodeGenerator::BuildTryFinally(
25782557
// - Falling through into finally-block: Undefined and not used.
25792558
Register token = register_allocator()->NewRegister();
25802559
Register result = register_allocator()->NewRegister();
2581-
Register message = register_allocator()->NewRegister();
2582-
ControlScope::DeferredCommands commands(this, token, result, message);
2560+
ControlScope::DeferredCommands commands(this, token, result);
25832561

25842562
// Preserve the context in a dedicated register, so that it can be restored
25852563
// when the handler is entered by the stack-unwinding machinery.
25862564
// TODO(ignition): Be smarter about register allocation.
2587-
// Reuse the message register which is only used after the stack is unwound.
2588-
Register context = message;
2565+
Register context = register_allocator()->NewRegister();
25892566
builder()->MoveRegister(Register::current_context(), context);
25902567

25912568
// Evaluate the try-block inside a control scope. This simulates a handler
@@ -2607,12 +2584,21 @@ void BytecodeGenerator::BuildTryFinally(
26072584
try_control_builder.BeginHandler();
26082585
commands.RecordHandlerReThrowPath();
26092586

2587+
// Pending message object is saved on entry.
26102588
try_control_builder.BeginFinally();
2589+
Register message = context; // Reuse register.
2590+
2591+
// Clear message object as we enter the finally block.
2592+
builder()->LoadTheHole().SetPendingMessage().StoreAccumulatorInRegister(
2593+
message);
26112594

26122595
// Evaluate the finally-block.
26132596
finally_body_func(token, result);
26142597
try_control_builder.EndFinally();
26152598

2599+
// Pending message object is restored on exit.
2600+
builder()->LoadAccumulatorWithRegister(message).SetPendingMessage();
2601+
26162602
// Dynamic dispatch after the finally-block.
26172603
commands.ApplyDeferredCommands();
26182604
}

test/unittests/interpreter/bytecode_expectations/AsyncGenerators.golden

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ bytecodes: [
3535
B(LdaSmi), I8(1),
3636
B(Star1),
3737
B(Mov), R(5), R(2),
38-
B(Jump), U8(44),
38+
B(Jump), U8(41),
3939
B(LdaUndefined),
4040
B(Star2),
4141
B(LdaSmi), I8(1),
4242
B(Star1),
43-
B(Jump), U8(37),
43+
B(Jump), U8(34),
4444
B(Star5),
4545
B(CreateCatchContext), R(5), U8(4),
4646
B(Star4),
@@ -56,19 +56,19 @@ bytecodes: [
5656
B(Star2),
5757
B(LdaSmi), I8(2),
5858
B(Star1),
59-
B(Jump), U8(8),
59+
B(Jump), U8(5),
6060
B(Star2),
6161
B(LdaZero),
6262
B(Star1),
6363
B(LdaTheHole),
6464
B(SetPendingMessage),
6565
B(Star3),
6666
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
67-
B(Ldar), R(1),
68-
B(SwitchOnSmiNoFeedback), U8(5), U8(3), I8(0),
69-
B(Jump), U8(24),
7067
B(Ldar), R(3),
7168
B(SetPendingMessage),
69+
B(Ldar), R(1),
70+
B(SwitchOnSmiNoFeedback), U8(5), U8(3), I8(0),
71+
B(Jump), U8(21),
7272
B(Ldar), R(2),
7373
B(ReThrow),
7474
B(LdaTrue),
@@ -89,8 +89,8 @@ constant pool: [
8989
Smi [7],
9090
SCOPE_INFO_TYPE,
9191
Smi [6],
92-
Smi [12],
93-
Smi [25],
92+
Smi [9],
93+
Smi [22],
9494
]
9595
handlers: [
9696
[18, 91, 91],
@@ -126,7 +126,7 @@ bytecodes: [
126126
B(LdaSmi), I8(1),
127127
B(Star1),
128128
B(Mov), R(5), R(2),
129-
B(Jump), U8(86),
129+
B(Jump), U8(83),
130130
/* 22 S> */ B(LdaSmi), I8(42),
131131
B(Star6),
132132
B(Mov), R(0), R(5),
@@ -143,12 +143,12 @@ bytecodes: [
143143
B(LdaSmi), I8(1),
144144
B(Star1),
145145
B(Mov), R(5), R(2),
146-
B(Jump), U8(44),
146+
B(Jump), U8(41),
147147
B(LdaUndefined),
148148
B(Star2),
149149
B(LdaSmi), I8(1),
150150
B(Star1),
151-
B(Jump), U8(37),
151+
B(Jump), U8(34),
152152
B(Star5),
153153
B(CreateCatchContext), R(5), U8(8),
154154
B(Star4),
@@ -164,19 +164,19 @@ bytecodes: [
164164
B(Star2),
165165
B(LdaSmi), I8(2),
166166
B(Star1),
167-
B(Jump), U8(8),
167+
B(Jump), U8(5),
168168
B(Star2),
169169
B(LdaZero),
170170
B(Star1),
171171
B(LdaTheHole),
172172
B(SetPendingMessage),
173173
B(Star3),
174174
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
175-
B(Ldar), R(1),
176-
B(SwitchOnSmiNoFeedback), U8(9), U8(3), I8(0),
177-
B(Jump), U8(24),
178175
B(Ldar), R(3),
179176
B(SetPendingMessage),
177+
B(Ldar), R(1),
178+
B(SwitchOnSmiNoFeedback), U8(9), U8(3), I8(0),
179+
B(Jump), U8(21),
180180
B(Ldar), R(2),
181181
B(ReThrow),
182182
B(LdaTrue),
@@ -201,8 +201,8 @@ constant pool: [
201201
Smi [7],
202202
SCOPE_INFO_TYPE,
203203
Smi [6],
204-
Smi [12],
205-
Smi [25],
204+
Smi [9],
205+
Smi [22],
206206
]
207207
handlers: [
208208
[18, 133, 133],
@@ -238,7 +238,7 @@ bytecodes: [
238238
B(LdaSmi), I8(1),
239239
B(Star4),
240240
B(Mov), R(8), R(5),
241-
B(Jump), U8(217),
241+
B(Jump), U8(214),
242242
/* 36 S> */ B(CreateArrayLiteral), U8(5), U8(0), U8(37),
243243
B(Star10),
244244
B(GetIterator), R(10), U8(1), U8(3),
@@ -277,13 +277,13 @@ bytecodes: [
277277
B(LdaSmi), I8(1),
278278
B(Star11),
279279
B(Mov), R(14), R(12),
280-
B(Jump), U8(20),
280+
B(Jump), U8(17),
281281
B(Ldar), R(14),
282282
/* 22 E> */ B(JumpLoop), U8(77), I8(0), U8(13),
283283
B(LdaSmi), I8(-1),
284284
B(Star12),
285285
B(Star11),
286-
B(Jump), U8(8),
286+
B(Jump), U8(5),
287287
B(Star12),
288288
B(LdaZero),
289289
B(Star11),
@@ -307,22 +307,22 @@ bytecodes: [
307307
B(JumpIfTrue), U8(5),
308308
B(Ldar), R(14),
309309
B(ReThrow),
310-
B(Ldar), R(11),
311-
B(SwitchOnSmiNoFeedback), U8(13), U8(2), I8(0),
312-
B(Jump), U8(16),
313310
B(Ldar), R(13),
314311
B(SetPendingMessage),
312+
B(Ldar), R(11),
313+
B(SwitchOnSmiNoFeedback), U8(13), U8(2), I8(0),
314+
B(Jump), U8(13),
315315
B(Ldar), R(12),
316316
B(ReThrow),
317317
B(LdaSmi), I8(1),
318318
B(Star4),
319319
B(Mov), R(12), R(5),
320-
B(Jump), U8(44),
320+
B(Jump), U8(41),
321321
B(LdaUndefined),
322322
B(Star5),
323323
B(LdaSmi), I8(1),
324324
B(Star4),
325-
B(Jump), U8(37),
325+
B(Jump), U8(34),
326326
B(Star8),
327327
B(CreateCatchContext), R(8), U8(15),
328328
B(Star7),
@@ -338,19 +338,19 @@ bytecodes: [
338338
B(Star5),
339339
B(LdaSmi), I8(2),
340340
B(Star4),
341-
B(Jump), U8(8),
341+
B(Jump), U8(5),
342342
B(Star5),
343343
B(LdaZero),
344344
B(Star4),
345345
B(LdaTheHole),
346346
B(SetPendingMessage),
347347
B(Star6),
348348
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
349-
B(Ldar), R(4),
350-
B(SwitchOnSmiNoFeedback), U8(16), U8(3), I8(0),
351-
B(Jump), U8(24),
352349
B(Ldar), R(6),
353350
B(SetPendingMessage),
351+
B(Ldar), R(4),
352+
B(SwitchOnSmiNoFeedback), U8(16), U8(3), I8(0),
353+
B(Jump), U8(21),
354354
B(Ldar), R(5),
355355
B(ReThrow),
356356
B(LdaTrue),
@@ -379,11 +379,11 @@ constant pool: [
379379
Smi [7],
380380
INTERNALIZED_ONE_BYTE_STRING_TYPE ["return"],
381381
Smi [6],
382-
Smi [12],
382+
Smi [9],
383383
SCOPE_INFO_TYPE,
384384
Smi [6],
385-
Smi [12],
386-
Smi [25],
385+
Smi [9],
386+
Smi [22],
387387
]
388388
handlers: [
389389
[18, 264, 264],
@@ -470,7 +470,7 @@ bytecodes: [
470470
B(LdaSmi), I8(1),
471471
B(Star1),
472472
B(Mov), R(10), R(2),
473-
B(Jump), U8(219),
473+
B(Jump), U8(216),
474474
B(GetNamedProperty), R(7), U8(15), U8(20),
475475
B(JumpIfUndefinedOrNull), U8(10),
476476
B(Star12),
@@ -538,12 +538,12 @@ bytecodes: [
538538
B(LdaSmi), I8(1),
539539
B(Star1),
540540
B(Mov), R(7), R(2),
541-
B(Jump), U8(44),
541+
B(Jump), U8(41),
542542
B(LdaUndefined),
543543
B(Star2),
544544
B(LdaSmi), I8(1),
545545
B(Star1),
546-
B(Jump), U8(37),
546+
B(Jump), U8(34),
547547
B(Star5),
548548
B(CreateCatchContext), R(5), U8(18),
549549
B(Star4),
@@ -559,19 +559,19 @@ bytecodes: [
559559
B(Star2),
560560
B(LdaSmi), I8(2),
561561
B(Star1),
562-
B(Jump), U8(8),
562+
B(Jump), U8(5),
563563
B(Star2),
564564
B(LdaZero),
565565
B(Star1),
566566
B(LdaTheHole),
567567
B(SetPendingMessage),
568568
B(Star3),
569569
B(InvokeIntrinsic), U8(Runtime::k_GeneratorClose), R(0), U8(1),
570-
B(Ldar), R(1),
571-
B(SwitchOnSmiNoFeedback), U8(20), U8(3), I8(0),
572-
B(Jump), U8(24),
573570
B(Ldar), R(3),
574571
B(SetPendingMessage),
572+
B(Ldar), R(1),
573+
B(SwitchOnSmiNoFeedback), U8(20), U8(3), I8(0),
574+
B(Jump), U8(21),
575575
B(Ldar), R(2),
576576
B(ReThrow),
577577
B(LdaTrue),
@@ -605,10 +605,10 @@ constant pool: [
605605
INTERNALIZED_ONE_BYTE_STRING_TYPE ["done"],
606606
INTERNALIZED_ONE_BYTE_STRING_TYPE ["value"],
607607
SCOPE_INFO_TYPE,
608-
Smi [337],
608+
Smi [334],
609609
Smi [6],
610-
Smi [12],
611-
Smi [25],
610+
Smi [9],
611+
Smi [22],
612612
]
613613
handlers: [
614614
[18, 384, 384],

0 commit comments

Comments
 (0)