From f633218b62477e1b9bc585d412297908887b75b4 Mon Sep 17 00:00:00 2001 From: rmcilroy Date: Thu, 10 Nov 2016 02:41:48 -0800 Subject: [PATCH] [Interpreter] Remove all Ldr style bytecodes and replace with Star lookahead. We seem to get some small wins from avoiding the Ldr bytecodes, probably due to reduced icache pressure since there are less bytecode handlers. Replace the Ldr bytecodes with Star lookahead inlined into the Lda versions. Also fixes IsAccumulatorLoadWithoutEffects to include LdaContextSlot and LdaCurrentContextSlot BUG=v8:4280 Review-Url: https://codereview.chromium.org/2489513005 Cr-Commit-Position: refs/heads/master@{#40883} --- src/compiler/bytecode-graph-builder.cc | 41 +--- src/compiler/bytecode-graph-builder.h | 2 - .../bytecode-peephole-optimizer.cc | 29 --- src/interpreter/bytecode-peephole-table.h | 1 - src/interpreter/bytecodes.cc | 4 + src/interpreter/bytecodes.h | 17 +- src/interpreter/interpreter.cc | 77 +------- src/interpreter/interpreter.h | 6 - src/interpreter/mkpeephole.cc | 24 --- .../bytecode_expectations/CallGlobal.golden | 16 +- .../bytecode_expectations/CallNew.golden | 16 +- .../bytecode_expectations/CallRuntime.golden | 5 +- .../ClassDeclarations.golden | 8 +- .../CompoundExpressions.golden | 5 +- .../ConstVariableContextSlot.golden | 4 +- .../ContextVariables.golden | 13 +- .../DeclareGlobals.golden | 8 +- .../bytecode_expectations/Delete.golden | 5 +- .../bytecode_expectations/DoExpression.golden | 6 +- .../bytecode_expectations/ForOf.golden | 48 ++--- .../FunctionLiterals.golden | 10 +- .../bytecode_expectations/Generators.golden | 179 ++++++++++-------- .../GlobalCompoundExpressions.golden | 10 +- .../bytecode_expectations/GlobalDelete.golden | 26 ++- .../LetVariableContextSlot.golden | 4 +- .../bytecode_expectations/Modules.golden | 122 ++++++------ .../OuterContextVariables.golden | 9 +- .../UnaryOperators.golden | 6 +- .../bytecode-array-builder-unittest.cc | 17 +- .../bytecode-peephole-optimizer-unittest.cc | 75 -------- 30 files changed, 312 insertions(+), 481 deletions(-) diff --git a/src/compiler/bytecode-graph-builder.cc b/src/compiler/bytecode-graph-builder.cc index d4e6c1d0d8..2c8c095da5 100644 --- a/src/compiler/bytecode-graph-builder.cc +++ b/src/compiler/bytecode-graph-builder.cc @@ -708,11 +708,6 @@ void BytecodeGraphBuilder::VisitLdaUndefined() { environment()->BindAccumulator(node); } -void BytecodeGraphBuilder::VisitLdrUndefined() { - Node* node = jsgraph()->UndefinedConstant(); - environment()->BindRegister(bytecode_iterator().GetRegisterOperand(0), node); -} - void BytecodeGraphBuilder::VisitLdaNull() { Node* node = jsgraph()->NullConstant(); environment()->BindAccumulator(node); @@ -767,14 +762,6 @@ void BytecodeGraphBuilder::VisitLdaGlobal() { environment()->BindAccumulator(node, Environment::kAttachFrameState); } -void BytecodeGraphBuilder::VisitLdrGlobal() { - PrepareEagerCheckpoint(); - Node* node = BuildLoadGlobal(bytecode_iterator().GetIndexOperand(0), - TypeofMode::NOT_INSIDE_TYPEOF); - environment()->BindRegister(bytecode_iterator().GetRegisterOperand(1), node, - Environment::kAttachFrameState); -} - void BytecodeGraphBuilder::VisitLdaGlobalInsideTypeof() { PrepareEagerCheckpoint(); Node* node = BuildLoadGlobal(bytecode_iterator().GetIndexOperand(0), @@ -803,7 +790,7 @@ void BytecodeGraphBuilder::VisitStaGlobalStrict() { BuildStoreGlobal(LanguageMode::STRICT); } -Node* BytecodeGraphBuilder::BuildLoadContextSlot() { +void BytecodeGraphBuilder::VisitLdaContextSlot() { // TODO(mythria): immutable flag is also set to false. This information is not // available in bytecode array. update this code when the implementation // changes. @@ -812,39 +799,21 @@ Node* BytecodeGraphBuilder::BuildLoadContextSlot() { bytecode_iterator().GetIndexOperand(1), false); Node* context = environment()->LookupRegister(bytecode_iterator().GetRegisterOperand(0)); - return NewNode(op, context); + Node* node = NewNode(op, context); + environment()->BindAccumulator(node); } -Node* BytecodeGraphBuilder::BuildLoadCurrentContextSlot() { +void BytecodeGraphBuilder::VisitLdaCurrentContextSlot() { // TODO(mythria): immutable flag is also set to false. This information is not // available in bytecode array. update this code when the implementation // changes. const Operator* op = javascript()->LoadContext( 0, bytecode_iterator().GetIndexOperand(0), false); Node* context = environment()->Context(); - return NewNode(op, context); -} - -void BytecodeGraphBuilder::VisitLdaContextSlot() { - Node* node = BuildLoadContextSlot(); + Node* node = NewNode(op, context); environment()->BindAccumulator(node); } -void BytecodeGraphBuilder::VisitLdaCurrentContextSlot() { - Node* node = BuildLoadCurrentContextSlot(); - environment()->BindAccumulator(node); -} - -void BytecodeGraphBuilder::VisitLdrContextSlot() { - Node* node = BuildLoadContextSlot(); - environment()->BindRegister(bytecode_iterator().GetRegisterOperand(3), node); -} - -void BytecodeGraphBuilder::VisitLdrCurrentContextSlot() { - Node* node = BuildLoadCurrentContextSlot(); - environment()->BindRegister(bytecode_iterator().GetRegisterOperand(1), node); -} - void BytecodeGraphBuilder::VisitStaContextSlot() { const Operator* op = javascript()->StoreContext( bytecode_iterator().GetUnsignedImmediateOperand(2), diff --git a/src/compiler/bytecode-graph-builder.h b/src/compiler/bytecode-graph-builder.h index 9a31c64dd1..7ac2d06c70 100644 --- a/src/compiler/bytecode-graph-builder.h +++ b/src/compiler/bytecode-graph-builder.h @@ -134,8 +134,6 @@ class BytecodeGraphBuilder { void ClearNonLiveSlotsInFrameStates(); void BuildCreateArguments(CreateArgumentsType type); - Node* BuildLoadContextSlot(); - Node* BuildLoadCurrentContextSlot(); Node* BuildLoadGlobal(uint32_t feedback_slot_index, TypeofMode typeof_mode); void BuildStoreGlobal(LanguageMode language_mode); void BuildNamedStore(LanguageMode language_mode); diff --git a/src/interpreter/bytecode-peephole-optimizer.cc b/src/interpreter/bytecode-peephole-optimizer.cc index 791da3eba3..40552943f7 100644 --- a/src/interpreter/bytecode-peephole-optimizer.cc +++ b/src/interpreter/bytecode-peephole-optimizer.cc @@ -116,24 +116,6 @@ bool BytecodePeepholeOptimizer::CanElideLastBasedOnSourcePosition( namespace { -void TransformLdaStarToLdrLdar(Bytecode new_bytecode, BytecodeNode* const last, - BytecodeNode* const current) { - DCHECK_EQ(current->bytecode(), Bytecode::kStar); - - // - // An example transformation here would be: - // - // LdaGlobal i0, i1 ____\ LdrGlobal i0, i1, R - // Star R ====/ Ldar R - // - // which loads a global value into both a register and the - // accumulator. However, in the second form the Ldar can often be - // peephole optimized away unlike the Star in the first form. - // - last->Transform(new_bytecode, current->operand(0)); - current->set_bytecode(Bytecode::kLdar, current->operand(0)); -} - void TransformLdaSmiBinaryOpToBinaryOpWithSmi(Bytecode new_bytecode, BytecodeNode* const last, BytecodeNode* const current) { @@ -239,17 +221,6 @@ void BytecodePeepholeOptimizer::ChangeBytecodeAction( DefaultAction(node); } -void BytecodePeepholeOptimizer::TransformLdaStarToLdrLdarAction( - BytecodeNode* const node, const PeepholeActionAndData* action_data) { - DCHECK(LastIsValid()); - DCHECK(!Bytecodes::IsJump(node->bytecode())); - - if (!node->source_info().is_statement()) { - TransformLdaStarToLdrLdar(action_data->bytecode, last(), node); - } - DefaultAction(node); -} - void BytecodePeepholeOptimizer::TransformLdaSmiBinaryOpToBinaryOpWithSmiAction( BytecodeNode* const node, const PeepholeActionAndData* action_data) { DCHECK(LastIsValid()); diff --git a/src/interpreter/bytecode-peephole-table.h b/src/interpreter/bytecode-peephole-table.h index e716aef496..1790f5a109 100644 --- a/src/interpreter/bytecode-peephole-table.h +++ b/src/interpreter/bytecode-peephole-table.h @@ -19,7 +19,6 @@ namespace interpreter { V(ElideCurrentIfOperand0MatchesAction) \ V(ElideLastAction) \ V(ChangeBytecodeAction) \ - V(TransformLdaStarToLdrLdarAction) \ V(TransformLdaSmiBinaryOpToBinaryOpWithSmiAction) \ V(TransformLdaZeroBinaryOpToBinaryOpWithZeroAction) diff --git a/src/interpreter/bytecodes.cc b/src/interpreter/bytecodes.cc index cc979686b6..15c4e98a02 100644 --- a/src/interpreter/bytecodes.cc +++ b/src/interpreter/bytecodes.cc @@ -211,8 +211,12 @@ bool Bytecodes::IsStarLookahead(Bytecode bytecode, OperandScale operand_scale) { case Bytecode::kLdaNull: case Bytecode::kLdaTheHole: case Bytecode::kLdaConstant: + case Bytecode::kLdaUndefined: + case Bytecode::kLdaGlobal: case Bytecode::kLdaNamedProperty: case Bytecode::kLdaKeyedProperty: + case Bytecode::kLdaContextSlot: + case Bytecode::kLdaCurrentContextSlot: case Bytecode::kAdd: case Bytecode::kSub: case Bytecode::kMul: diff --git a/src/interpreter/bytecodes.h b/src/interpreter/bytecodes.h index 57774defd2..23d77f0c33 100644 --- a/src/interpreter/bytecodes.h +++ b/src/interpreter/bytecodes.h @@ -37,12 +37,8 @@ namespace interpreter { V(LdaFalse, AccumulatorUse::kWrite) \ V(LdaConstant, AccumulatorUse::kWrite, OperandType::kIdx) \ \ - /* Loading registers */ \ - V(LdrUndefined, AccumulatorUse::kNone, OperandType::kRegOut) \ - \ /* Globals */ \ V(LdaGlobal, AccumulatorUse::kWrite, OperandType::kIdx) \ - V(LdrGlobal, AccumulatorUse::kNone, OperandType::kIdx, OperandType::kRegOut) \ V(LdaGlobalInsideTypeof, AccumulatorUse::kWrite, OperandType::kIdx) \ V(StaGlobalSloppy, AccumulatorUse::kRead, OperandType::kIdx, \ OperandType::kIdx) \ @@ -55,10 +51,6 @@ namespace interpreter { V(LdaContextSlot, AccumulatorUse::kWrite, OperandType::kReg, \ OperandType::kIdx, OperandType::kUImm) \ V(LdaCurrentContextSlot, AccumulatorUse::kWrite, OperandType::kIdx) \ - V(LdrContextSlot, AccumulatorUse::kNone, OperandType::kReg, \ - OperandType::kIdx, OperandType::kUImm, OperandType::kRegOut) \ - V(LdrCurrentContextSlot, AccumulatorUse::kNone, OperandType::kIdx, \ - OperandType::kRegOut) \ V(StaContextSlot, AccumulatorUse::kRead, OperandType::kReg, \ OperandType::kIdx, OperandType::kUImm) \ V(StaCurrentContextSlot, AccumulatorUse::kRead, OperandType::kIdx) \ @@ -430,15 +422,16 @@ class V8_EXPORT_PRIVATE Bytecodes final { bytecode == Bytecode::kLdaTrue || bytecode == Bytecode::kLdaFalse || bytecode == Bytecode::kLdaUndefined || bytecode == Bytecode::kLdaTheHole || - bytecode == Bytecode::kLdaConstant; + bytecode == Bytecode::kLdaConstant || + bytecode == Bytecode::kLdaContextSlot || + bytecode == Bytecode::kLdaCurrentContextSlot; } // Return true if |bytecode| is a register load without effects, - // e.g. Mov, Star, LdrUndefined. + // e.g. Mov, Star. static CONSTEXPR bool IsRegisterLoadWithoutEffects(Bytecode bytecode) { return bytecode == Bytecode::kMov || bytecode == Bytecode::kPopContext || - bytecode == Bytecode::kPushContext || bytecode == Bytecode::kStar || - bytecode == Bytecode::kLdrUndefined; + bytecode == Bytecode::kPushContext || bytecode == Bytecode::kStar; } // Returns true if the bytecode is a conditional jump taking diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc index 9b6662eeba..81aecafecf 100644 --- a/src/interpreter/interpreter.cc +++ b/src/interpreter/interpreter.cc @@ -352,17 +352,6 @@ void Interpreter::DoLdaUndefined(InterpreterAssembler* assembler) { __ Dispatch(); } -// LdrUndefined -// -// Loads undefined into the accumulator and |reg|. -void Interpreter::DoLdrUndefined(InterpreterAssembler* assembler) { - Node* undefined_value = - __ HeapConstant(isolate_->factory()->undefined_value()); - Node* destination = __ BytecodeOperandReg(0); - __ StoreRegister(undefined_value, destination); - __ Dispatch(); -} - // LdaNull // // Load Null into the accumulator. @@ -460,23 +449,6 @@ void Interpreter::DoLdaGlobal(InterpreterAssembler* assembler) { __ Dispatch(); } -// LdrGlobal -// -// Load the global with name in constant pool entry into -// register using FeedBackVector slot outside of a typeof. -void Interpreter::DoLdrGlobal(InterpreterAssembler* assembler) { - Callable ic = - CodeFactory::LoadGlobalICInOptimizedCode(isolate_, NOT_INSIDE_TYPEOF); - - Node* context = __ GetContext(); - - Node* raw_slot = __ BytecodeOperandIdx(0); - Node* result = BuildLoadGlobal(ic, context, raw_slot, assembler); - Node* destination = __ BytecodeOperandReg(1); - __ StoreRegister(result, destination); - __ Dispatch(); -} - // LdaGlobalInsideTypeof // // Load the global with name in constant pool entry into the @@ -534,29 +506,17 @@ void Interpreter::DoStaGlobalStrict(InterpreterAssembler* assembler) { DoStaGlobal(ic, assembler); } -compiler::Node* Interpreter::BuildLoadContextSlot( - InterpreterAssembler* assembler) { - Node* reg_index = __ BytecodeOperandReg(0); - Node* context = __ LoadRegister(reg_index); - Node* slot_index = __ BytecodeOperandIdx(1); - Node* depth = __ BytecodeOperandUImm(2); - Node* slot_context = __ GetContextAtDepth(context, depth); - return __ LoadContextElement(slot_context, slot_index); -} - -compiler::Node* Interpreter::BuildLoadCurrentContextSlot( - InterpreterAssembler* assembler) { - Node* slot_index = __ BytecodeOperandIdx(0); - Node* slot_context = __ GetContext(); - return __ LoadContextElement(slot_context, slot_index); -} - // LdaContextSlot // // Load the object in |slot_index| of the context at |depth| in the context // chain starting at |context| into the accumulator. void Interpreter::DoLdaContextSlot(InterpreterAssembler* assembler) { - Node* result = BuildLoadContextSlot(assembler); + Node* reg_index = __ BytecodeOperandReg(0); + Node* context = __ LoadRegister(reg_index); + Node* slot_index = __ BytecodeOperandIdx(1); + Node* depth = __ BytecodeOperandUImm(2); + Node* slot_context = __ GetContextAtDepth(context, depth); + Node* result = __ LoadContextElement(slot_context, slot_index); __ SetAccumulator(result); __ Dispatch(); } @@ -565,32 +525,13 @@ void Interpreter::DoLdaContextSlot(InterpreterAssembler* assembler) { // // Load the object in |slot_index| of the current context into the accumulator. void Interpreter::DoLdaCurrentContextSlot(InterpreterAssembler* assembler) { - Node* result = BuildLoadCurrentContextSlot(assembler); + Node* slot_index = __ BytecodeOperandIdx(0); + Node* slot_context = __ GetContext(); + Node* result = __ LoadContextElement(slot_context, slot_index); __ SetAccumulator(result); __ Dispatch(); } -// LdrContextSlot -// -// Load the object in |slot_index| of the context at |depth| in the context -// chain of |context| into register |reg|. -void Interpreter::DoLdrContextSlot(InterpreterAssembler* assembler) { - Node* result = BuildLoadContextSlot(assembler); - Node* destination = __ BytecodeOperandReg(3); - __ StoreRegister(result, destination); - __ Dispatch(); -} - -// LdrCurrentContextSlot -// -// Load the object in |slot_index| of the current context into register |reg|. -void Interpreter::DoLdrCurrentContextSlot(InterpreterAssembler* assembler) { - Node* result = BuildLoadCurrentContextSlot(assembler); - Node* destination = __ BytecodeOperandReg(1); - __ StoreRegister(result, destination); - __ Dispatch(); -} - // StaContextSlot // // Stores the object in the accumulator into |slot_index| of the context at diff --git a/src/interpreter/interpreter.h b/src/interpreter/interpreter.h index faa8b385f7..b10ae2e451 100644 --- a/src/interpreter/interpreter.h +++ b/src/interpreter/interpreter.h @@ -139,12 +139,6 @@ class Interpreter { void DoStaLookupSlot(LanguageMode language_mode, InterpreterAssembler* assembler); - // Generates code to load a context slot. - compiler::Node* BuildLoadContextSlot(InterpreterAssembler* assembler); - - // Generates code to load a slot in the current context. - compiler::Node* BuildLoadCurrentContextSlot(InterpreterAssembler* assembler); - // Generates code to load a global. compiler::Node* BuildLoadGlobal(Callable ic, compiler::Node* context, compiler::Node* feedback_slot, diff --git a/src/interpreter/mkpeephole.cc b/src/interpreter/mkpeephole.cc index 3fc32bc792..62d3a77e02 100644 --- a/src/interpreter/mkpeephole.cc +++ b/src/interpreter/mkpeephole.cc @@ -79,30 +79,6 @@ const char* PeepholeActionTableWriter::kNamespaceElements[] = {"v8", "internal", // static PeepholeActionAndData PeepholeActionTableWriter::LookupActionAndData( Bytecode last, Bytecode current) { - // Optimize various accumulator loads followed by store accumulator - // to an equivalent register load and loading the accumulator with - // the register. The latter accumulator load can often be elided as - // it is side-effect free and often followed by another accumulator - // load so can be elided. - if (current == Bytecode::kStar) { - switch (last) { - case Bytecode::kLdaGlobal: - return {PeepholeAction::kTransformLdaStarToLdrLdarAction, - Bytecode::kLdrGlobal}; - case Bytecode::kLdaContextSlot: - return {PeepholeAction::kTransformLdaStarToLdrLdarAction, - Bytecode::kLdrContextSlot}; - case Bytecode::kLdaCurrentContextSlot: - return {PeepholeAction::kTransformLdaStarToLdrLdarAction, - Bytecode::kLdrCurrentContextSlot}; - case Bytecode::kLdaUndefined: - return {PeepholeAction::kTransformLdaStarToLdrLdarAction, - Bytecode::kLdrUndefined}; - default: - break; - } - } - // ToName bytecodes can be replaced by Star with the same output register if // the value in the accumulator is already a name. if (current == Bytecode::kToName && Bytecodes::PutsNameInAccumulator(last)) { diff --git a/test/cctest/interpreter/bytecode_expectations/CallGlobal.golden b/test/cctest/interpreter/bytecode_expectations/CallGlobal.golden index 49e6f71265..40be0533c1 100644 --- a/test/cctest/interpreter/bytecode_expectations/CallGlobal.golden +++ b/test/cctest/interpreter/bytecode_expectations/CallGlobal.golden @@ -14,11 +14,13 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 12 +bytecode array length: 14 bytecodes: [ /* 27 E> */ B(StackCheck), - /* 32 S> */ B(LdrUndefined), R(1), - B(LdrGlobal), U8(4), R(0), + /* 32 S> */ B(LdaUndefined), + B(Star), R(1), + B(LdaGlobal), U8(4), + B(Star), R(0), /* 39 E> */ B(Call), R(0), R(1), U8(1), U8(2), /* 44 S> */ B(Return), ] @@ -35,11 +37,13 @@ snippet: " " frame size: 5 parameter count: 1 -bytecode array length: 24 +bytecode array length: 26 bytecodes: [ /* 34 E> */ B(StackCheck), - /* 39 S> */ B(LdrUndefined), R(1), - B(LdrGlobal), U8(4), R(0), + /* 39 S> */ B(LdaUndefined), + B(Star), R(1), + B(LdaGlobal), U8(4), + B(Star), R(0), B(LdaSmi), U8(1), B(Star), R(2), B(LdaSmi), U8(2), diff --git a/test/cctest/interpreter/bytecode_expectations/CallNew.golden b/test/cctest/interpreter/bytecode_expectations/CallNew.golden index 56f4f3ae59..eb5b0630f4 100644 --- a/test/cctest/interpreter/bytecode_expectations/CallNew.golden +++ b/test/cctest/interpreter/bytecode_expectations/CallNew.golden @@ -14,11 +14,11 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 12 +bytecode array length: 11 bytecodes: [ /* 45 E> */ B(StackCheck), - /* 50 S> */ B(LdrGlobal), U8(4), R(0), - B(Ldar), R(0), + /* 50 S> */ B(LdaGlobal), U8(4), + B(Star), R(0), /* 57 E> */ B(New), R(0), R(0), U8(0), U8(2), /* 68 S> */ B(Return), ] @@ -35,10 +35,11 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 16 +bytecode array length: 17 bytecodes: [ /* 58 E> */ B(StackCheck), - /* 63 S> */ B(LdrGlobal), U8(4), R(0), + /* 63 S> */ B(LdaGlobal), U8(4), + B(Star), R(0), B(LdaSmi), U8(3), B(Star), R(1), B(Ldar), R(0), @@ -63,10 +64,11 @@ snippet: " " frame size: 4 parameter count: 1 -bytecode array length: 24 +bytecode array length: 25 bytecodes: [ /* 100 E> */ B(StackCheck), - /* 105 S> */ B(LdrGlobal), U8(4), R(0), + /* 105 S> */ B(LdaGlobal), U8(4), + B(Star), R(0), B(LdaSmi), U8(3), B(Star), R(1), B(LdaSmi), U8(4), diff --git a/test/cctest/interpreter/bytecode_expectations/CallRuntime.golden b/test/cctest/interpreter/bytecode_expectations/CallRuntime.golden index fdcbb43dd5..45ea7e7cdb 100644 --- a/test/cctest/interpreter/bytecode_expectations/CallRuntime.golden +++ b/test/cctest/interpreter/bytecode_expectations/CallRuntime.golden @@ -72,10 +72,11 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 14 +bytecode array length: 15 bytecodes: [ /* 10 E> */ B(StackCheck), - /* 15 S> */ B(LdrUndefined), R(0), + /* 15 S> */ B(LdaUndefined), + B(Star), R(0), B(CreateArrayLiteral), U8(0), U8(0), U8(9), B(Star), R(1), B(CallJSRuntime), U8(150), R(0), U8(2), diff --git a/test/cctest/interpreter/bytecode_expectations/ClassDeclarations.golden b/test/cctest/interpreter/bytecode_expectations/ClassDeclarations.golden index e1e5c83c60..765ce65efd 100644 --- a/test/cctest/interpreter/bytecode_expectations/ClassDeclarations.golden +++ b/test/cctest/interpreter/bytecode_expectations/ClassDeclarations.golden @@ -149,8 +149,8 @@ bytecodes: [ B(Star), R(4), B(LdaNamedProperty), R(4), U8(3), U8(2), B(Star), R(5), - /* 75 E> */ B(LdaCurrentContextSlot), U8(4), - B(ToName), R(7), + B(LdaCurrentContextSlot), U8(4), + /* 75 E> */ B(ToName), R(7), B(CreateClosure), U8(4), U8(2), B(Star), R(8), B(LdaSmi), U8(2), @@ -159,8 +159,8 @@ bytecodes: [ B(Star), R(10), B(Mov), R(5), R(6), B(CallRuntime), U16(Runtime::kDefineDataPropertyInLiteral), R(6), U8(5), - /* 106 E> */ B(LdaCurrentContextSlot), U8(5), - B(ToName), R(7), + B(LdaCurrentContextSlot), U8(5), + /* 106 E> */ B(ToName), R(7), B(LdaConstant), U8(3), B(TestEqualStrict), R(7), U8(0), B(Mov), R(4), R(6), diff --git a/test/cctest/interpreter/bytecode_expectations/CompoundExpressions.golden b/test/cctest/interpreter/bytecode_expectations/CompoundExpressions.golden index 4b72ca54a3..c5ecec9abf 100644 --- a/test/cctest/interpreter/bytecode_expectations/CompoundExpressions.golden +++ b/test/cctest/interpreter/bytecode_expectations/CompoundExpressions.golden @@ -109,7 +109,7 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 23 +bytecode array length: 24 bytecodes: [ B(CreateFunctionContext), U8(1), B(PushContext), R(0), @@ -117,7 +117,8 @@ bytecodes: [ /* 42 S> */ B(LdaSmi), U8(1), /* 42 E> */ B(StaCurrentContextSlot), U8(4), /* 45 S> */ B(CreateClosure), U8(0), U8(2), - /* 75 S> */ B(LdrCurrentContextSlot), U8(4), R(1), + /* 75 S> */ B(LdaCurrentContextSlot), U8(4), + B(Star), R(1), B(BitwiseOrSmi), U8(24), R(1), U8(2), /* 77 E> */ B(StaCurrentContextSlot), U8(4), B(LdaUndefined), diff --git a/test/cctest/interpreter/bytecode_expectations/ConstVariableContextSlot.golden b/test/cctest/interpreter/bytecode_expectations/ConstVariableContextSlot.golden index 956000ff49..8ee13434af 100644 --- a/test/cctest/interpreter/bytecode_expectations/ConstVariableContextSlot.golden +++ b/test/cctest/interpreter/bytecode_expectations/ConstVariableContextSlot.golden @@ -74,11 +74,11 @@ bytecodes: [ /* 30 E> */ B(StackCheck), /* 47 S> */ B(LdaSmi), U8(20), B(Star), R(2), - /* 47 E> */ B(LdaCurrentContextSlot), U8(4), + B(LdaCurrentContextSlot), U8(4), B(JumpIfNotHole), U8(11), B(LdaConstant), U8(1), B(Star), R(3), - B(CallRuntime), U16(Runtime::kThrowReferenceError), R(3), U8(1), + /* 47 E> */ B(CallRuntime), U16(Runtime::kThrowReferenceError), R(3), U8(1), B(CallRuntime), U16(Runtime::kThrowConstAssignError), R(0), U8(0), /* 47 E> */ B(StaCurrentContextSlot), U8(4), B(LdaUndefined), diff --git a/test/cctest/interpreter/bytecode_expectations/ContextVariables.golden b/test/cctest/interpreter/bytecode_expectations/ContextVariables.golden index 61ccccf740..0ce069c4e8 100644 --- a/test/cctest/interpreter/bytecode_expectations/ContextVariables.golden +++ b/test/cctest/interpreter/bytecode_expectations/ContextVariables.golden @@ -77,12 +77,13 @@ snippet: " " frame size: 3 parameter count: 1 -bytecode array length: 20 +bytecode array length: 21 bytecodes: [ B(CreateFunctionContext), U8(1), B(PushContext), R(0), /* 30 E> */ B(StackCheck), - /* 41 S> */ B(LdrUndefined), R(2), + /* 41 S> */ B(LdaUndefined), + B(Star), R(2), B(CreateClosure), U8(0), U8(2), B(Star), R(1), /* 64 E> */ B(Call), R(1), R(2), U8(1), U8(2), @@ -389,7 +390,7 @@ snippet: " " frame size: 3 parameter count: 1 -bytecode array length: 789 +bytecode array length: 791 bytecodes: [ B(CreateFunctionContext), U8(254), B(PushContext), R(0), @@ -900,8 +901,10 @@ bytecodes: [ /* 3421 E> */ B(StaCurrentContextSlot), U8(254), /* 3435 S> */ B(LdaZero), /* 3435 E> */ B(StaCurrentContextSlot), U8(255), - /* 3438 S> */ B(LdrUndefined), R(2), - /* 3438 E> */ B(LdrGlobal), U8(4), R(1), + /* 3438 S> */ B(LdaUndefined), + B(Star), R(2), + /* 3438 E> */ B(LdaGlobal), U8(4), + B(Star), R(1), /* 3438 E> */ B(Call), R(1), R(2), U8(1), U8(2), /* 3454 S> */ B(LdaSmi), U8(100), /* 3454 E> */ B(Wide), B(StaCurrentContextSlot), U16(256), diff --git a/test/cctest/interpreter/bytecode_expectations/DeclareGlobals.golden b/test/cctest/interpreter/bytecode_expectations/DeclareGlobals.golden index a61e993e52..00fa0180e6 100644 --- a/test/cctest/interpreter/bytecode_expectations/DeclareGlobals.golden +++ b/test/cctest/interpreter/bytecode_expectations/DeclareGlobals.golden @@ -104,7 +104,7 @@ snippet: " " frame size: 4 parameter count: 1 -bytecode array length: 29 +bytecode array length: 31 bytecodes: [ B(LdaConstant), U8(0), B(Star), R(1), @@ -113,8 +113,10 @@ bytecodes: [ B(Mov), R(closure), R(3), B(CallRuntime), U16(Runtime::kDeclareGlobalsForInterpreter), R(1), U8(3), /* 0 E> */ B(StackCheck), - /* 16 S> */ B(LdrUndefined), R(2), - B(LdrGlobal), U8(2), R(1), + /* 16 S> */ B(LdaUndefined), + B(Star), R(2), + B(LdaGlobal), U8(2), + B(Star), R(1), /* 16 E> */ B(Call), R(1), R(2), U8(1), U8(4), B(Star), R(0), /* 20 S> */ B(Return), diff --git a/test/cctest/interpreter/bytecode_expectations/Delete.golden b/test/cctest/interpreter/bytecode_expectations/Delete.golden index 0cd3a18944..12e421e883 100644 --- a/test/cctest/interpreter/bytecode_expectations/Delete.golden +++ b/test/cctest/interpreter/bytecode_expectations/Delete.golden @@ -98,7 +98,7 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 25 +bytecode array length: 26 bytecodes: [ B(CreateFunctionContext), U8(1), B(PushContext), R(0), @@ -107,7 +107,8 @@ bytecodes: [ B(Ldar), R(1), /* 56 E> */ B(StaCurrentContextSlot), U8(4), /* 64 S> */ B(CreateClosure), U8(1), U8(2), - /* 93 S> */ B(LdrCurrentContextSlot), U8(4), R(1), + /* 93 S> */ B(LdaCurrentContextSlot), U8(4), + B(Star), R(1), B(LdaSmi), U8(1), B(DeletePropertyStrict), R(1), /* 113 S> */ B(Return), diff --git a/test/cctest/interpreter/bytecode_expectations/DoExpression.golden b/test/cctest/interpreter/bytecode_expectations/DoExpression.golden index 08a5aaa871..662ecf14d9 100644 --- a/test/cctest/interpreter/bytecode_expectations/DoExpression.golden +++ b/test/cctest/interpreter/bytecode_expectations/DoExpression.golden @@ -30,13 +30,13 @@ snippet: " " frame size: 3 parameter count: 1 -bytecode array length: 13 +bytecode array length: 12 bytecodes: [ /* 30 E> */ B(StackCheck), /* 55 S> */ B(LdaSmi), U8(100), B(Star), R(0), - /* 42 S> */ B(LdrUndefined), R(1), - B(Ldar), R(1), + /* 42 S> */ B(LdaUndefined), + B(Star), R(1), B(Star), R(2), /* 63 S> */ B(Nop), /* 73 S> */ B(Return), diff --git a/test/cctest/interpreter/bytecode_expectations/ForOf.golden b/test/cctest/interpreter/bytecode_expectations/ForOf.golden index 2f01097a20..da6a436be8 100644 --- a/test/cctest/interpreter/bytecode_expectations/ForOf.golden +++ b/test/cctest/interpreter/bytecode_expectations/ForOf.golden @@ -11,7 +11,7 @@ snippet: " " frame size: 15 parameter count: 1 -bytecode array length: 281 +bytecode array length: 282 bytecodes: [ /* 30 E> */ B(StackCheck), B(LdaZero), @@ -45,7 +45,7 @@ bytecodes: [ B(LdaZero), B(Star), R(4), B(JumpLoop), U8(-51), U8(0), - B(Jump), U8(35), + B(Jump), U8(36), B(Star), R(13), B(Ldar), R(closure), B(CreateCatchContext), R(13), U8(5), U8(6), @@ -56,7 +56,8 @@ bytecodes: [ B(JumpIfFalse), U8(6), B(LdaSmi), U8(1), B(Star), R(4), - B(LdrCurrentContextSlot), U8(4), R(13), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(13), B(CallRuntime), U16(Runtime::kReThrow), R(13), U8(1), B(PopContext), R(8), B(LdaSmi), U8(-1), @@ -141,9 +142,9 @@ constant pool: [ FIXED_ARRAY_TYPE, ] handlers: [ - [7, 119, 125], + [7, 120, 126], [10, 84, 86], - [203, 213, 215], + [204, 214, 216], ] --- @@ -153,7 +154,7 @@ snippet: " " frame size: 16 parameter count: 1 -bytecode array length: 292 +bytecode array length: 293 bytecodes: [ /* 30 E> */ B(StackCheck), /* 42 S> */ B(LdaConstant), U8(0), @@ -187,8 +188,8 @@ bytecodes: [ /* 73 S> */ B(LdaZero), B(Star), R(10), B(Mov), R(1), R(11), - B(Jump), U8(49), - B(Jump), U8(35), + B(Jump), U8(50), + B(Jump), U8(36), B(Star), R(14), B(Ldar), R(closure), B(CreateCatchContext), R(14), U8(5), U8(6), @@ -199,7 +200,8 @@ bytecodes: [ B(JumpIfFalse), U8(6), B(LdaSmi), U8(1), B(Star), R(5), - B(LdrCurrentContextSlot), U8(4), R(14), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(14), B(CallRuntime), U16(Runtime::kReThrow), R(14), U8(1), B(PopContext), R(9), B(LdaSmi), U8(-1), @@ -289,9 +291,9 @@ constant pool: [ FIXED_ARRAY_TYPE, ] handlers: [ - [11, 119, 125], + [11, 120, 126], [14, 84, 86], - [204, 214, 216], + [205, 215, 217], ] --- @@ -303,7 +305,7 @@ snippet: " " frame size: 15 parameter count: 1 -bytecode array length: 299 +bytecode array length: 300 bytecodes: [ /* 30 E> */ B(StackCheck), B(LdaZero), @@ -345,7 +347,7 @@ bytecodes: [ B(LdaZero), B(Star), R(4), B(JumpLoop), U8(-69), U8(0), - B(Jump), U8(35), + B(Jump), U8(36), B(Star), R(13), B(Ldar), R(closure), B(CreateCatchContext), R(13), U8(5), U8(6), @@ -356,7 +358,8 @@ bytecodes: [ B(JumpIfFalse), U8(6), B(LdaSmi), U8(1), B(Star), R(4), - B(LdrCurrentContextSlot), U8(4), R(13), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(13), B(CallRuntime), U16(Runtime::kReThrow), R(13), U8(1), B(PopContext), R(8), B(LdaSmi), U8(-1), @@ -441,9 +444,9 @@ constant pool: [ FIXED_ARRAY_TYPE, ] handlers: [ - [7, 137, 143], + [7, 138, 144], [10, 102, 104], - [221, 231, 233], + [222, 232, 234], ] --- @@ -453,7 +456,7 @@ snippet: " " frame size: 14 parameter count: 1 -bytecode array length: 306 +bytecode array length: 307 bytecodes: [ /* 30 E> */ B(StackCheck), /* 42 S> */ B(CreateObjectLiteral), U8(0), U8(0), U8(1), R(8), @@ -491,8 +494,8 @@ bytecodes: [ B(Star), R(9), B(LdaZero), B(Star), R(8), - B(Jump), U8(49), - B(Jump), U8(35), + B(Jump), U8(50), + B(Jump), U8(36), B(Star), R(12), B(Ldar), R(closure), B(CreateCatchContext), R(12), U8(7), U8(8), @@ -503,7 +506,8 @@ bytecodes: [ B(JumpIfFalse), U8(6), B(LdaSmi), U8(1), B(Star), R(3), - B(LdrCurrentContextSlot), U8(4), R(12), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(12), B(CallRuntime), U16(Runtime::kReThrow), R(12), U8(1), B(PopContext), R(7), B(LdaSmi), U8(-1), @@ -595,8 +599,8 @@ constant pool: [ FIXED_ARRAY_TYPE, ] handlers: [ - [15, 133, 139], + [15, 134, 140], [18, 98, 100], - [218, 228, 230], + [219, 229, 231], ] diff --git a/test/cctest/interpreter/bytecode_expectations/FunctionLiterals.golden b/test/cctest/interpreter/bytecode_expectations/FunctionLiterals.golden index 9a81b88a03..19aa219ac1 100644 --- a/test/cctest/interpreter/bytecode_expectations/FunctionLiterals.golden +++ b/test/cctest/interpreter/bytecode_expectations/FunctionLiterals.golden @@ -29,10 +29,11 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 14 +bytecode array length: 15 bytecodes: [ /* 30 E> */ B(StackCheck), - /* 34 S> */ B(LdrUndefined), R(1), + /* 34 S> */ B(LdaUndefined), + B(Star), R(1), B(CreateClosure), U8(0), U8(2), B(Star), R(0), /* 56 E> */ B(Call), R(0), R(1), U8(1), U8(2), @@ -50,10 +51,11 @@ snippet: " " frame size: 3 parameter count: 1 -bytecode array length: 18 +bytecode array length: 19 bytecodes: [ /* 30 E> */ B(StackCheck), - /* 34 S> */ B(LdrUndefined), R(1), + /* 34 S> */ B(LdaUndefined), + B(Star), R(1), B(CreateClosure), U8(0), U8(2), B(Star), R(0), B(LdaSmi), U8(1), diff --git a/test/cctest/interpreter/bytecode_expectations/Generators.golden b/test/cctest/interpreter/bytecode_expectations/Generators.golden index 38b877506f..bdd008208f 100644 --- a/test/cctest/interpreter/bytecode_expectations/Generators.golden +++ b/test/cctest/interpreter/bytecode_expectations/Generators.golden @@ -13,7 +13,7 @@ snippet: " " frame size: 11 parameter count: 1 -bytecode array length: 202 +bytecode array length: 204 bytecodes: [ B(Ldar), R(new_target), B(JumpIfUndefined), U8(21), @@ -33,13 +33,14 @@ bytecodes: [ B(StaCurrentContextSlot), U8(4), /* 11 E> */ B(StackCheck), B(Mov), R(context), R(4), - /* 11 E> */ B(LdrCurrentContextSlot), U8(4), R(6), - B(Ldar), R(6), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(6), B(Mov), R(closure), R(5), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2), + /* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(5), - B(LdrCurrentContextSlot), U8(5), R(6), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(6), B(LdaZero), B(SuspendGenerator), R(6), B(Ldar), R(5), @@ -64,10 +65,11 @@ bytecodes: [ B(Star), R(3), B(LdaZero), B(Star), R(2), - B(Jump), U8(35), + B(Jump), U8(36), B(Ldar), R(7), /* 11 E> */ B(Throw), - B(LdrUndefined), R(5), + B(LdaUndefined), + B(Star), R(5), B(LdaTrue), B(Star), R(6), B(CallRuntime), U16(Runtime::k_CreateIterResultObject), R(5), U8(2), @@ -83,7 +85,8 @@ bytecodes: [ B(Star), R(2), B(CallRuntime), U16(Runtime::kInterpreterClearPendingMessage), R(0), U8(0), B(Star), R(4), - B(LdrCurrentContextSlot), U8(5), R(5), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(5), B(CallRuntime), U16(Runtime::k_GeneratorClose), R(5), U8(1), B(CallRuntime), U16(Runtime::kInterpreterSetPendingMessage), R(4), U8(1), B(LdaZero), @@ -108,7 +111,7 @@ bytecodes: [ constant pool: [ ] handlers: [ - [39, 137, 143], + [39, 138, 144], ] --- @@ -118,7 +121,7 @@ snippet: " " frame size: 11 parameter count: 1 -bytecode array length: 298 +bytecode array length: 301 bytecodes: [ B(Ldar), R(new_target), B(JumpIfUndefined), U8(28), @@ -141,13 +144,14 @@ bytecodes: [ B(StaCurrentContextSlot), U8(4), /* 11 E> */ B(StackCheck), B(Mov), R(context), R(4), - /* 11 E> */ B(LdrCurrentContextSlot), U8(4), R(6), - B(Ldar), R(6), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(6), B(Mov), R(closure), R(5), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2), + /* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(5), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(5), - B(LdrCurrentContextSlot), U8(5), R(6), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(6), B(LdaZero), B(SuspendGenerator), R(6), B(Ldar), R(5), @@ -172,7 +176,7 @@ bytecodes: [ B(Star), R(3), B(LdaZero), B(Star), R(2), - B(Jump), U8(114), + B(Jump), U8(116), B(Ldar), R(7), /* 11 E> */ B(Throw), /* 16 S> */ B(LdaSmi), U8(42), @@ -181,7 +185,8 @@ bytecodes: [ B(Star), R(6), B(CallRuntime), U16(Runtime::k_CreateIterResultObject), R(5), U8(2), B(Star), R(5), - B(LdrCurrentContextSlot), U8(5), R(6), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(6), B(LdaSmi), U8(1), B(SuspendGenerator), R(6), B(Ldar), R(5), @@ -206,10 +211,11 @@ bytecodes: [ B(Star), R(3), B(LdaSmi), U8(1), B(Star), R(2), - B(Jump), U8(35), + B(Jump), U8(36), B(Ldar), R(7), /* 16 E> */ B(Throw), - B(LdrUndefined), R(5), + B(LdaUndefined), + B(Star), R(5), B(LdaTrue), B(Star), R(6), B(CallRuntime), U16(Runtime::k_CreateIterResultObject), R(5), U8(2), @@ -225,7 +231,8 @@ bytecodes: [ B(Star), R(2), B(CallRuntime), U16(Runtime::kInterpreterClearPendingMessage), R(0), U8(0), B(Star), R(4), - B(LdrCurrentContextSlot), U8(5), R(5), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(5), B(CallRuntime), U16(Runtime::k_GeneratorClose), R(5), U8(1), B(CallRuntime), U16(Runtime::kInterpreterSetPendingMessage), R(4), U8(1), B(LdaZero), @@ -253,10 +260,10 @@ bytecodes: [ /* 25 S> */ B(Return), ] constant pool: [ - Smi [131], + Smi [132], ] handlers: [ - [46, 223, 229], + [46, 225, 231], ] --- @@ -266,7 +273,7 @@ snippet: " " frame size: 18 parameter count: 1 -bytecode array length: 775 +bytecode array length: 796 bytecodes: [ B(Ldar), R(new_target), B(JumpIfUndefined), U8(28), @@ -289,13 +296,14 @@ bytecodes: [ B(StaCurrentContextSlot), U8(4), /* 11 E> */ B(StackCheck), B(Mov), R(context), R(7), - /* 11 E> */ B(LdrCurrentContextSlot), U8(4), R(9), - B(Ldar), R(9), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(9), B(Mov), R(closure), R(8), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2), + /* 11 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(8), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(8), - B(LdrCurrentContextSlot), U8(5), R(9), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(9), B(LdaZero), B(SuspendGenerator), R(9), B(Ldar), R(8), @@ -320,7 +328,7 @@ bytecodes: [ B(Star), R(6), B(LdaZero), B(Star), R(5), - B(JumpConstant), U8(17), + B(JumpConstant), U8(19), B(Ldar), R(10), /* 11 E> */ B(Throw), B(Ldar), R(closure), @@ -348,7 +356,8 @@ bytecodes: [ B(LdaSmi), U8(76), B(Star), R(12), B(CallRuntime), U16(Runtime::kAbort), R(12), U8(1), - /* 27 S> */ B(LdrContextSlot), R(1), U8(7), U8(0), R(14), + /* 27 S> */ B(LdaContextSlot), R(1), U8(7), U8(0), + B(Star), R(14), B(LdaNamedProperty), R(14), U8(4), U8(8), B(Star), R(13), /* 27 E> */ B(CallProperty), R(13), R(14), U8(1), U8(6), @@ -356,13 +365,16 @@ bytecodes: [ B(Star), R(12), B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(12), U8(1), B(ToBooleanLogicalNot), - B(JumpIfFalse), U8(12), - B(LdrContextSlot), R(1), U8(8), U8(0), R(12), + B(JumpIfFalse), U8(13), + B(LdaContextSlot), R(1), U8(8), U8(0), + B(Star), R(12), B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(12), U8(1), - B(LdrContextSlot), R(1), U8(8), U8(0), R(12), + B(LdaContextSlot), R(1), U8(8), U8(0), + B(Star), R(12), B(LdaNamedProperty), R(12), U8(5), U8(10), - B(JumpIfToBooleanTrueConstant), U8(3), - B(LdrContextSlot), R(1), U8(8), U8(0), R(12), + B(JumpIfToBooleanTrueConstant), U8(9), + B(LdaContextSlot), R(1), U8(8), U8(0), + B(Star), R(12), B(LdaNamedProperty), R(12), U8(6), U8(12), B(StaContextSlot), R(1), U8(10), U8(0), B(LdaSmi), U8(2), @@ -377,12 +389,14 @@ bytecodes: [ B(StaCurrentContextSlot), U8(4), B(LdaContextSlot), R(1), U8(6), U8(0), B(StaCurrentContextSlot), U8(4), - /* 36 S> */ B(LdrCurrentContextSlot), U8(4), R(12), + /* 36 S> */ B(LdaCurrentContextSlot), U8(4), + B(Star), R(12), B(LdaFalse), B(Star), R(13), B(CallRuntime), U16(Runtime::k_CreateIterResultObject), R(12), U8(2), B(Star), R(12), - B(LdrContextSlot), R(1), U8(5), U8(0), R(13), + B(LdaContextSlot), R(1), U8(5), U8(0), + B(Star), R(13), B(LdaSmi), U8(1), B(SuspendGenerator), R(13), B(Ldar), R(12), @@ -413,26 +427,28 @@ bytecodes: [ B(Star), R(9), B(LdaZero), B(Star), R(8), - B(Jump), U8(72), + B(Jump), U8(74), B(Ldar), R(14), /* 36 E> */ B(Throw), B(PopContext), R(2), B(LdaZero), B(StaContextSlot), R(1), U8(9), U8(0), - B(Wide), B(JumpLoop), U16(-215), U16(0), - B(Jump), U8(42), + B(Wide), B(JumpLoop), U16(-221), U16(0), + B(Jump), U8(44), B(Star), R(12), B(Ldar), R(closure), - B(CreateCatchContext), R(12), U8(9), U8(10), + B(CreateCatchContext), R(12), U8(10), U8(11), B(Star), R(11), B(PushContext), R(2), - B(LdrContextSlot), R(0), U8(9), U8(0), R(12), + B(LdaContextSlot), R(0), U8(9), U8(0), + B(Star), R(12), B(LdaSmi), U8(2), B(TestEqualStrict), R(12), U8(14), B(JumpIfFalse), U8(8), B(LdaSmi), U8(1), B(StaContextSlot), R(0), U8(9), U8(0), - B(LdrCurrentContextSlot), U8(4), R(12), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(12), B(CallRuntime), U16(Runtime::kReThrow), R(12), U8(1), B(PopContext), R(2), B(LdaSmi), U8(-1), @@ -443,62 +459,73 @@ bytecodes: [ B(Star), R(8), B(CallRuntime), U16(Runtime::kInterpreterClearPendingMessage), R(0), U8(0), B(Star), R(10), - B(LdrContextSlot), R(1), U8(9), U8(0), R(11), + B(LdaContextSlot), R(1), U8(9), U8(0), + B(Star), R(11), B(LdaZero), B(TestEqualStrict), R(11), U8(15), - B(JumpIfTrueConstant), U8(15), - B(LdrContextSlot), R(1), U8(7), U8(0), R(11), + B(JumpIfTrueConstant), U8(17), + B(LdaContextSlot), R(1), U8(7), U8(0), + B(Star), R(11), B(LdaUndefined), B(TestEqualStrict), R(11), U8(16), - B(JumpIfTrueConstant), U8(16), - B(LdrContextSlot), R(1), U8(7), U8(0), R(11), - B(LdaNamedProperty), R(11), U8(11), U8(17), + B(JumpIfTrueConstant), U8(18), + B(LdaContextSlot), R(1), U8(7), U8(0), + B(Star), R(11), + B(LdaNamedProperty), R(11), U8(12), U8(17), B(StaContextSlot), R(1), U8(11), U8(0), - B(LdrContextSlot), R(1), U8(11), U8(0), R(11), + B(LdaContextSlot), R(1), U8(11), U8(0), + B(Star), R(11), B(LdaNull), B(TestEqual), R(11), U8(19), B(JumpIfFalse), U8(4), - B(JumpConstant), U8(8), - B(LdrContextSlot), R(1), U8(9), U8(0), R(11), + B(JumpConstant), U8(16), + B(LdaContextSlot), R(1), U8(9), U8(0), + B(Star), R(11), B(LdaSmi), U8(1), B(TestEqualStrict), R(11), U8(20), - B(JumpIfFalse), U8(76), + B(JumpIfFalse), U8(78), B(LdaContextSlot), R(1), U8(11), U8(0), B(TypeOf), B(Star), R(11), - B(LdaConstant), U8(12), + B(LdaConstant), U8(13), B(TestEqualStrict), R(11), U8(21), B(JumpIfFalse), U8(4), B(Jump), U8(18), B(Wide), B(LdaSmi), U16(130), B(Star), R(11), - B(LdaConstant), U8(13), + B(LdaConstant), U8(14), B(Star), R(12), B(CallRuntime), U16(Runtime::kNewTypeError), R(11), U8(2), B(Throw), B(Mov), R(context), R(11), - B(LdrContextSlot), R(1), U8(11), U8(0), R(12), - B(LdrContextSlot), R(1), U8(7), U8(0), R(13), + B(LdaContextSlot), R(1), U8(11), U8(0), + B(Star), R(12), + B(LdaContextSlot), R(1), U8(7), U8(0), + B(Star), R(13), B(InvokeIntrinsic), U8(Runtime::k_Call), R(12), U8(2), B(Jump), U8(23), B(Star), R(12), B(Ldar), R(closure), - B(CreateCatchContext), R(12), U8(9), U8(14), + B(CreateCatchContext), R(12), U8(10), U8(15), B(Star), R(11), B(CallRuntime), U16(Runtime::kInterpreterClearPendingMessage), R(0), U8(0), B(Ldar), R(11), B(PushContext), R(2), B(PopContext), R(2), - B(Jump), U8(43), - B(LdrContextSlot), R(1), U8(11), U8(0), R(11), - B(LdrContextSlot), R(1), U8(7), U8(0), R(12), + B(Jump), U8(47), + B(LdaContextSlot), R(1), U8(11), U8(0), + B(Star), R(11), + B(LdaContextSlot), R(1), U8(7), U8(0), + B(Star), R(12), B(InvokeIntrinsic), U8(Runtime::k_Call), R(11), U8(2), B(StaContextSlot), R(1), U8(12), U8(0), - B(LdrContextSlot), R(1), U8(12), U8(0), R(11), + B(LdaContextSlot), R(1), U8(12), U8(0), + B(Star), R(11), B(InvokeIntrinsic), U8(Runtime::k_IsJSReceiver), R(11), U8(1), B(JumpIfToBooleanFalse), U8(4), - B(Jump), U8(12), - B(LdrContextSlot), R(1), U8(12), U8(0), R(11), + B(Jump), U8(13), + B(LdaContextSlot), R(1), U8(12), U8(0), + B(Star), R(11), B(CallRuntime), U16(Runtime::kThrowIteratorResultNotAnObject), R(11), U8(1), B(CallRuntime), U16(Runtime::kInterpreterSetPendingMessage), R(10), U8(1), B(LdaZero), @@ -513,15 +540,16 @@ bytecodes: [ B(LdaSmi), U8(1), B(Star), R(5), B(Mov), R(9), R(6), - B(Jump), U8(47), + B(Jump), U8(48), B(PopContext), R(1), B(PopContext), R(1), B(LdaSmi), U8(2), B(Star), R(5), B(Mov), R(9), R(6), - B(Jump), U8(34), + B(Jump), U8(35), B(PopContext), R(1), - B(LdrUndefined), R(8), + B(LdaUndefined), + B(Star), R(8), B(LdaTrue), B(Star), R(9), B(CallRuntime), U16(Runtime::k_CreateIterResultObject), R(8), U8(2), @@ -537,7 +565,8 @@ bytecodes: [ B(Star), R(5), B(CallRuntime), U16(Runtime::kInterpreterClearPendingMessage), R(0), U8(0), B(Star), R(7), - B(LdrCurrentContextSlot), U8(5), R(8), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(8), B(CallRuntime), U16(Runtime::k_GeneratorClose), R(8), U8(1), B(CallRuntime), U16(Runtime::kInterpreterSetPendingMessage), R(7), U8(1), B(LdaZero), @@ -578,21 +607,23 @@ constant pool: [ ONE_BYTE_INTERNALIZED_STRING_TYPE ["done"], ONE_BYTE_INTERNALIZED_STRING_TYPE ["value"], FIXED_ARRAY_TYPE, - Smi [129], + Smi [135], + Smi [152], ONE_BYTE_INTERNALIZED_STRING_TYPE [".catch"], FIXED_ARRAY_TYPE, ONE_BYTE_INTERNALIZED_STRING_TYPE ["return"], ONE_BYTE_INTERNALIZED_STRING_TYPE ["function"], ONE_BYTE_INTERNALIZED_STRING_TYPE [""], FIXED_ARRAY_TYPE, - Smi [166], - Smi [155], - Smi [581], + Smi [136], + Smi [176], + Smi [164], + Smi [601], ] handlers: [ - [46, 690, 696], - [143, 430, 436], - [146, 388, 390], - [544, 558, 560], + [46, 710, 716], + [143, 438, 444], + [146, 394, 396], + [557, 573, 575], ] diff --git a/test/cctest/interpreter/bytecode_expectations/GlobalCompoundExpressions.golden b/test/cctest/interpreter/bytecode_expectations/GlobalCompoundExpressions.golden index f222e9034b..f8bece5c39 100644 --- a/test/cctest/interpreter/bytecode_expectations/GlobalCompoundExpressions.golden +++ b/test/cctest/interpreter/bytecode_expectations/GlobalCompoundExpressions.golden @@ -14,10 +14,11 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 12 +bytecode array length: 13 bytecodes: [ /* 26 E> */ B(StackCheck), - /* 31 S> */ B(LdrGlobal), U8(2), R(0), + /* 31 S> */ B(LdaGlobal), U8(2), + B(Star), R(0), B(BitwiseAndSmi), U8(1), R(0), U8(4), /* 45 E> */ B(StaGlobalSloppy), U8(0), U8(5), /* 51 S> */ B(Return), @@ -36,10 +37,11 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 12 +bytecode array length: 13 bytecodes: [ /* 27 E> */ B(StackCheck), - /* 32 S> */ B(LdrGlobal), U8(2), R(0), + /* 32 S> */ B(LdaGlobal), U8(2), + B(Star), R(0), B(AddSmi), U8(1), R(0), U8(4), /* 51 E> */ B(StaGlobalSloppy), U8(0), U8(5), /* 57 S> */ B(Return), diff --git a/test/cctest/interpreter/bytecode_expectations/GlobalDelete.golden b/test/cctest/interpreter/bytecode_expectations/GlobalDelete.golden index fea78bae62..e9540bb446 100644 --- a/test/cctest/interpreter/bytecode_expectations/GlobalDelete.golden +++ b/test/cctest/interpreter/bytecode_expectations/GlobalDelete.golden @@ -16,10 +16,11 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 9 +bytecode array length: 10 bytecodes: [ /* 32 E> */ B(StackCheck), - /* 39 S> */ B(LdrGlobal), U8(2), R(0), + /* 39 S> */ B(LdaGlobal), U8(2), + B(Star), R(0), B(LdaConstant), U8(0), B(DeletePropertySloppy), R(0), /* 58 S> */ B(Return), @@ -41,10 +42,11 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 9 +bytecode array length: 10 bytecodes: [ /* 28 E> */ B(StackCheck), - /* 51 S> */ B(LdrGlobal), U8(2), R(0), + /* 51 S> */ B(LdaGlobal), U8(2), + B(Star), R(0), B(LdaSmi), U8(1), B(DeletePropertyStrict), R(0), /* 71 S> */ B(Return), @@ -64,11 +66,13 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 14 +bytecode array length: 16 bytecodes: [ /* 32 E> */ B(StackCheck), - /* 39 S> */ B(LdrCurrentContextSlot), U8(3), R(0), - B(LdrContextSlot), R(0), U8(2), U8(0), R(1), + /* 39 S> */ B(LdaCurrentContextSlot), U8(3), + B(Star), R(0), + B(LdaContextSlot), R(0), U8(2), U8(0), + B(Star), R(1), B(LdaConstant), U8(0), B(DeletePropertySloppy), R(1), /* 56 S> */ B(Return), @@ -89,11 +93,13 @@ snippet: " " frame size: 2 parameter count: 1 -bytecode array length: 14 +bytecode array length: 16 bytecodes: [ /* 18 E> */ B(StackCheck), - /* 25 S> */ B(LdrCurrentContextSlot), U8(3), R(0), - B(LdrContextSlot), R(0), U8(2), U8(0), R(1), + /* 25 S> */ B(LdaCurrentContextSlot), U8(3), + B(Star), R(0), + B(LdaContextSlot), R(0), U8(2), U8(0), + B(Star), R(1), B(LdaConstant), U8(0), B(DeletePropertySloppy), R(1), /* 42 S> */ B(Return), diff --git a/test/cctest/interpreter/bytecode_expectations/LetVariableContextSlot.golden b/test/cctest/interpreter/bytecode_expectations/LetVariableContextSlot.golden index 39c334985f..d45386e58b 100644 --- a/test/cctest/interpreter/bytecode_expectations/LetVariableContextSlot.golden +++ b/test/cctest/interpreter/bytecode_expectations/LetVariableContextSlot.golden @@ -74,11 +74,11 @@ bytecodes: [ /* 30 E> */ B(StackCheck), /* 45 S> */ B(LdaSmi), U8(20), B(Star), R(2), - /* 45 E> */ B(LdaCurrentContextSlot), U8(4), + B(LdaCurrentContextSlot), U8(4), B(JumpIfNotHole), U8(11), B(LdaConstant), U8(1), B(Star), R(3), - B(CallRuntime), U16(Runtime::kThrowReferenceError), R(3), U8(1), + /* 45 E> */ B(CallRuntime), U16(Runtime::kThrowReferenceError), R(3), U8(1), B(Ldar), R(2), B(StaCurrentContextSlot), U8(4), /* 45 E> */ B(StaCurrentContextSlot), U8(4), diff --git a/test/cctest/interpreter/bytecode_expectations/Modules.golden b/test/cctest/interpreter/bytecode_expectations/Modules.golden index 19798eb3de..0bf3703bf4 100644 --- a/test/cctest/interpreter/bytecode_expectations/Modules.golden +++ b/test/cctest/interpreter/bytecode_expectations/Modules.golden @@ -36,13 +36,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -105,13 +106,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -153,7 +155,7 @@ snippet: " " frame size: 9 parameter count: 2 -bytecode array length: 193 +bytecode array length: 195 bytecodes: [ B(Ldar), R(new_target), B(JumpIfUndefined), U8(21), @@ -176,13 +178,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(4), - B(Ldar), R(4), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(4), B(Mov), R(closure), R(3), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(3), - B(LdrCurrentContextSlot), U8(5), R(4), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(4), B(LdaZero), B(SuspendGenerator), R(4), B(Ldar), R(3), @@ -207,7 +210,8 @@ bytecodes: [ /* 64 S> */ B(Return), B(Ldar), R(5), /* 0 E> */ B(Throw), - /* 32 S> */ B(LdrUndefined), R(4), + /* 32 S> */ B(LdaUndefined), + B(Star), R(4), /* 32 E> */ B(LdaModuleVariable), U8(-1), U8(0), B(JumpIfNotHole), U8(11), B(LdaConstant), U8(1), @@ -224,7 +228,8 @@ bytecodes: [ B(StaCurrentContextSlot), U8(4), /* 47 S> */ B(LdaUndefined), /* 47 E> */ B(StaCurrentContextSlot), U8(4), - /* 52 S> */ B(LdrUndefined), R(4), + /* 52 S> */ B(LdaUndefined), + B(Star), R(4), /* 52 E> */ B(LdaModuleVariable), U8(-1), U8(1), B(JumpIfNotHole), U8(11), B(LdaConstant), U8(1), @@ -277,13 +282,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(4), - B(Ldar), R(4), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(4), B(Mov), R(closure), R(3), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(3), - B(LdrCurrentContextSlot), U8(5), R(4), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(4), B(LdaZero), B(SuspendGenerator), R(4), B(Ldar), R(3), @@ -367,13 +373,14 @@ bytecodes: [ B(LdaTheHole), B(StaModuleVariable), U8(1), U8(0), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(4), - B(Ldar), R(4), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(4), B(Mov), R(closure), R(3), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(3), - B(LdrCurrentContextSlot), U8(5), R(4), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(4), B(LdaZero), B(SuspendGenerator), R(4), B(Ldar), R(3), @@ -457,13 +464,14 @@ bytecodes: [ B(LdaTheHole), B(StaModuleVariable), U8(1), U8(0), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(4), - B(Ldar), R(4), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(4), B(Mov), R(closure), R(3), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(3), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(3), - B(LdrCurrentContextSlot), U8(5), R(4), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(4), B(LdaZero), B(SuspendGenerator), R(4), B(Ldar), R(3), @@ -545,13 +553,14 @@ bytecodes: [ B(LdaTheHole), B(StaModuleVariable), U8(1), U8(0), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -619,13 +628,14 @@ bytecodes: [ B(LdaTheHole), B(StaModuleVariable), U8(1), U8(0), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -664,8 +674,8 @@ bytecodes: [ B(Star), R(3), B(CallRuntime), U16(Runtime::kToFastProperties), R(2), U8(1), B(StaCurrentContextSlot), U8(6), - /* 16 E> */ B(LdaCurrentContextSlot), U8(6), - B(StaModuleVariable), U8(1), U8(0), + B(LdaCurrentContextSlot), U8(6), + /* 16 E> */ B(StaModuleVariable), U8(1), U8(0), B(LdaUndefined), /* 26 S> */ B(Return), ] @@ -706,13 +716,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -775,13 +786,14 @@ bytecodes: [ B(Ldar), R(this), B(StaCurrentContextSlot), U8(4), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -822,7 +834,7 @@ snippet: " " frame size: 8 parameter count: 2 -bytecode array length: 161 +bytecode array length: 164 bytecodes: [ B(Ldar), R(new_target), B(JumpIfUndefined), U8(21), @@ -849,13 +861,14 @@ bytecodes: [ B(CallRuntime), U16(Runtime::kGetModuleNamespace), R(2), U8(1), B(StaCurrentContextSlot), U8(6), /* 0 E> */ B(StackCheck), - /* 0 E> */ B(LdrCurrentContextSlot), U8(4), R(3), - B(Ldar), R(3), + B(LdaCurrentContextSlot), U8(4), + B(Star), R(3), B(Mov), R(closure), R(2), - B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), + /* 0 E> */ B(CallRuntime), U16(Runtime::kCreateJSGeneratorObject), R(2), U8(2), B(StaCurrentContextSlot), U8(5), B(Star), R(2), - B(LdrCurrentContextSlot), U8(5), R(3), + B(LdaCurrentContextSlot), U8(5), + B(Star), R(3), B(LdaZero), B(SuspendGenerator), R(3), B(Ldar), R(2), @@ -880,11 +893,14 @@ bytecodes: [ /* 45 S> */ B(Return), B(Ldar), R(4), /* 0 E> */ B(Throw), - /* 27 S> */ B(LdrCurrentContextSlot), U8(6), R(3), + /* 27 S> */ B(LdaCurrentContextSlot), U8(6), + B(Star), R(3), /* 30 E> */ B(LdaNamedProperty), R(3), U8(1), U8(4), B(Star), R(2), - /* 33 E> */ B(LdrCurrentContextSlot), U8(6), R(4), - /* 38 E> */ B(LdrCurrentContextSlot), U8(6), R(6), + B(LdaCurrentContextSlot), U8(6), + B(Star), R(4), + B(LdaCurrentContextSlot), U8(6), + B(Star), R(6), /* 41 E> */ B(LdaNamedProperty), R(6), U8(2), U8(6), B(Star), R(5), /* 31 E> */ B(CallProperty), R(2), R(3), U8(3), U8(2), diff --git a/test/cctest/interpreter/bytecode_expectations/OuterContextVariables.golden b/test/cctest/interpreter/bytecode_expectations/OuterContextVariables.golden index 5e9bc569d2..30b148b1d6 100644 --- a/test/cctest/interpreter/bytecode_expectations/OuterContextVariables.golden +++ b/test/cctest/interpreter/bytecode_expectations/OuterContextVariables.golden @@ -20,12 +20,13 @@ snippet: " " frame size: 1 parameter count: 1 -bytecode array length: 12 +bytecode array length: 13 bytecodes: [ /* 97 E> */ B(StackCheck), - /* 102 S> */ B(LdrContextSlot), R(context), U8(4), U8(1), R(0), - /* 120 E> */ B(LdaCurrentContextSlot), U8(4), - B(Mul), R(0), U8(2), + /* 102 S> */ B(LdaContextSlot), R(context), U8(4), U8(1), + B(Star), R(0), + B(LdaCurrentContextSlot), U8(4), + /* 120 E> */ B(Mul), R(0), U8(2), /* 130 S> */ B(Return), ] constant pool: [ diff --git a/test/cctest/interpreter/bytecode_expectations/UnaryOperators.golden b/test/cctest/interpreter/bytecode_expectations/UnaryOperators.golden index c9f8790384..660a01b242 100644 --- a/test/cctest/interpreter/bytecode_expectations/UnaryOperators.golden +++ b/test/cctest/interpreter/bytecode_expectations/UnaryOperators.golden @@ -96,7 +96,7 @@ snippet: " " frame size: 3 parameter count: 1 -bytecode array length: 23 +bytecode array length: 22 bytecodes: [ /* 30 E> */ B(StackCheck), /* 42 S> */ B(Wide), B(LdaSmi), U16(1234), @@ -105,8 +105,8 @@ bytecodes: [ /* 66 E> */ B(Mul), R(0), U8(2), B(Star), R(2), B(SubSmi), U8(1), R(2), U8(3), - B(LdrUndefined), R(1), - B(Ldar), R(1), + B(LdaUndefined), + B(Star), R(1), /* 74 S> */ B(Nop), /* 84 S> */ B(Return), ] diff --git a/test/unittests/interpreter/bytecode-array-builder-unittest.cc b/test/unittests/interpreter/bytecode-array-builder-unittest.cc index 60f762b98a..999490518e 100644 --- a/test/unittests/interpreter/bytecode-array-builder-unittest.cc +++ b/test/unittests/interpreter/bytecode-array-builder-unittest.cc @@ -54,7 +54,7 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .LoadLiteral(factory->NewStringFromStaticChars("A constant")) .StoreAccumulatorInRegister(reg) .LoadUndefined() - .Debugger() // Prevent peephole optimization LdaNull, Star -> LdrNull. + .StoreAccumulatorInRegister(reg) .LoadNull() .StoreAccumulatorInRegister(reg) .LoadTheHole() @@ -308,17 +308,6 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .StoreLookupSlot(wide_name, LanguageMode::SLOPPY) .StoreLookupSlot(wide_name, LanguageMode::STRICT); - // Emit loads which will be transformed to Ldr equivalents by the peephole - // optimizer. - builder.LoadContextSlot(reg, 1, 0) - .StoreAccumulatorInRegister(reg) - .LoadContextSlot(Register::current_context(), 1, 0) - .StoreAccumulatorInRegister(reg) - .LoadGlobal(0, TypeofMode::NOT_INSIDE_TYPEOF) - .StoreAccumulatorInRegister(reg) - .LoadUndefined() - .StoreAccumulatorInRegister(reg); - // CreateClosureWide builder.CreateClosure(1000, NOT_TENURED); @@ -392,10 +381,6 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { if (!FLAG_ignition_peephole) { // Insert entries for bytecodes only emitted by peephole optimizer. - scorecard[Bytecodes::ToByte(Bytecode::kLdrGlobal)] = 1; - scorecard[Bytecodes::ToByte(Bytecode::kLdrContextSlot)] = 1; - scorecard[Bytecodes::ToByte(Bytecode::kLdrCurrentContextSlot)] = 1; - scorecard[Bytecodes::ToByte(Bytecode::kLdrUndefined)] = 1; scorecard[Bytecodes::ToByte(Bytecode::kLogicalNot)] = 1; scorecard[Bytecodes::ToByte(Bytecode::kJump)] = 1; scorecard[Bytecodes::ToByte(Bytecode::kJumpIfTrue)] = 1; diff --git a/test/unittests/interpreter/bytecode-peephole-optimizer-unittest.cc b/test/unittests/interpreter/bytecode-peephole-optimizer-unittest.cc index ee6d1478bd..c7ebc5d314 100644 --- a/test/unittests/interpreter/bytecode-peephole-optimizer-unittest.cc +++ b/test/unittests/interpreter/bytecode-peephole-optimizer-unittest.cc @@ -321,81 +321,6 @@ TEST_F(BytecodePeepholeOptimizerTest, NopStatementStackCheck) { // Tests covering BytecodePeepholeOptimizer::UpdateLastAndCurrentBytecodes(). -TEST_F(BytecodePeepholeOptimizerTest, MergeLdaGlobalStar) { - const uint32_t operands[] = {19191, - static_cast(Register(1).ToOperand())}; - const int expected_operand_count = static_cast(arraysize(operands)); - - BytecodeNode first(Bytecode::kLdaGlobal, operands[0]); - BytecodeNode second(Bytecode::kStar, operands[1]); - BytecodeNode third(Bytecode::kReturn); - optimizer()->Write(&first); - optimizer()->Write(&second); - CHECK_EQ(write_count(), 1); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdrGlobal); - CHECK_EQ(last_written().operand_count(), expected_operand_count); - for (int i = 0; i < expected_operand_count; ++i) { - CHECK_EQ(last_written().operand(i), operands[i]); - } - optimizer()->Write(&third); - CHECK_EQ(write_count(), 2); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdar); - CHECK_EQ(last_written().operand(0), operands[expected_operand_count - 1]); - Flush(); - CHECK_EQ(last_written().bytecode(), third.bytecode()); -} - -TEST_F(BytecodePeepholeOptimizerTest, MergeLdaContextSlotStar) { - const uint32_t operands[] = { - static_cast(Register(200000).ToOperand()), 55005500, - static_cast(Register(0).ToOperand()), - static_cast(Register(1).ToOperand())}; - const int expected_operand_count = static_cast(arraysize(operands)); - - BytecodeNode first(Bytecode::kLdaContextSlot, operands[0], operands[1], - operands[2]); - BytecodeNode second(Bytecode::kStar, operands[3]); - BytecodeNode third(Bytecode::kReturn); - optimizer()->Write(&first); - optimizer()->Write(&second); - CHECK_EQ(write_count(), 1); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdrContextSlot); - CHECK_EQ(last_written().operand_count(), expected_operand_count); - for (int i = 0; i < expected_operand_count; ++i) { - CHECK_EQ(last_written().operand(i), operands[i]); - } - optimizer()->Write(&third); - CHECK_EQ(write_count(), 2); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdar); - CHECK_EQ(last_written().operand(0), operands[expected_operand_count - 1]); - Flush(); - CHECK_EQ(last_written().bytecode(), third.bytecode()); -} - -TEST_F(BytecodePeepholeOptimizerTest, MergeLdaUndefinedStar) { - const uint32_t operands[] = { - static_cast(Register(100000).ToOperand())}; - const int expected_operand_count = static_cast(arraysize(operands)); - - BytecodeNode first(Bytecode::kLdaUndefined); - BytecodeNode second(Bytecode::kStar, operands[0]); - BytecodeNode third(Bytecode::kReturn); - optimizer()->Write(&first); - optimizer()->Write(&second); - CHECK_EQ(write_count(), 1); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdrUndefined); - CHECK_EQ(last_written().operand_count(), expected_operand_count); - for (int i = 0; i < expected_operand_count; ++i) { - CHECK_EQ(last_written().operand(i), operands[i]); - } - optimizer()->Write(&third); - CHECK_EQ(write_count(), 2); - CHECK_EQ(last_written().bytecode(), Bytecode::kLdar); - CHECK_EQ(last_written().operand(0), operands[expected_operand_count - 1]); - Flush(); - CHECK_EQ(last_written().bytecode(), third.bytecode()); -} - TEST_F(BytecodePeepholeOptimizerTest, MergeLdaSmiWithBinaryOp) { Bytecode operator_replacement_pairs[][2] = { {Bytecode::kAdd, Bytecode::kAddSmi},