diff options
Diffstat (limited to 'deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc')
-rw-r--r-- | deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc | 69 |
1 files changed, 50 insertions, 19 deletions
diff --git a/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc b/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc index 999490518e..e9b996ea09 100644 --- a/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc +++ b/deps/v8/test/unittests/interpreter/bytecode-array-builder-unittest.cc @@ -8,6 +8,7 @@ #include "src/interpreter/bytecode-array-iterator.h" #include "src/interpreter/bytecode-label.h" #include "src/interpreter/bytecode-register-allocator.h" +#include "src/objects-inl.h" #include "test/unittests/test-utils.h" namespace v8 { @@ -77,8 +78,8 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { // Emit global load / store operations. Handle<String> name = factory->NewStringFromStaticChars("var_name"); - builder.LoadGlobal(1, TypeofMode::NOT_INSIDE_TYPEOF) - .LoadGlobal(1, TypeofMode::INSIDE_TYPEOF) + builder.LoadGlobal(name, 1, TypeofMode::NOT_INSIDE_TYPEOF) + .LoadGlobal(name, 1, TypeofMode::INSIDE_TYPEOF) .StoreGlobal(name, 1, LanguageMode::SLOPPY) .StoreGlobal(name, 1, LanguageMode::STRICT); @@ -115,18 +116,19 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .LoadLookupGlobalSlot(name, TypeofMode::INSIDE_TYPEOF, 1, 0); // Emit closure operations. - builder.CreateClosure(0, NOT_TENURED); + builder.CreateClosure(0, 1, NOT_TENURED); // Emit create context operation. builder.CreateBlockContext(factory->NewScopeInfo(1)); builder.CreateCatchContext(reg, name, factory->NewScopeInfo(1)); builder.CreateFunctionContext(1); + builder.CreateEvalContext(1); builder.CreateWithContext(reg, factory->NewScopeInfo(1)); // Emit literal creation operations. - builder.CreateRegExpLiteral(factory->NewStringFromStaticChars("a"), 0, 0) - .CreateArrayLiteral(factory->NewFixedArray(1), 0, 0) - .CreateObjectLiteral(factory->NewFixedArray(1), 0, 0, reg); + builder.CreateRegExpLiteral(factory->NewStringFromStaticChars("a"), 0, 0); + builder.CreateArrayLiteral(0, 0, 0); + builder.CreateObjectLiteral(0, 0, 0, reg); // Call operations. builder.Call(reg, reg_list, 1, Call::GLOBAL_CALL) @@ -135,7 +137,8 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .Call(reg, reg_list, 1, Call::GLOBAL_CALL, TailCallMode::kAllow) .CallRuntime(Runtime::kIsArray, reg) .CallRuntimeForPair(Runtime::kLoadLookupSlotForCall, reg_list, pair) - .CallJSRuntime(Context::SPREAD_ITERABLE_INDEX, reg_list); + .CallJSRuntime(Context::SPREAD_ITERABLE_INDEX, reg_list) + .NewWithSpread(reg_list); // Emit binary operator invocations. builder.BinaryOperation(Token::Value::ADD, reg, 1) @@ -195,14 +198,28 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .CompareOperation(Token::Value::INSTANCEOF, reg, 8) .CompareOperation(Token::Value::IN, reg, 9); + // Emit peephole optimizations of equality with Null or Undefined. + builder.LoadUndefined() + .CompareOperation(Token::Value::EQ, reg, 1) + .LoadNull() + .CompareOperation(Token::Value::EQ, reg, 1) + .LoadUndefined() + .CompareOperation(Token::Value::EQ_STRICT, reg, 1) + .LoadNull() + .CompareOperation(Token::Value::EQ_STRICT, reg, 1); + // Emit conversion operator invocations. builder.ConvertAccumulatorToNumber(reg) .ConvertAccumulatorToObject(reg) .ConvertAccumulatorToName(reg); + // Emit GetSuperConstructor. + builder.GetSuperConstructor(reg); + // Short jumps with Imm8 operands { - BytecodeLabel start, after_jump1, after_jump2, after_jump3, after_jump4; + BytecodeLabel start, after_jump1, after_jump2, after_jump3, after_jump4, + after_jump5; builder.Bind(&start) .Jump(&after_jump1) .Bind(&after_jump1) @@ -212,11 +229,13 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .Bind(&after_jump3) .JumpIfNotHole(&after_jump4) .Bind(&after_jump4) + .JumpIfJSReceiver(&after_jump5) + .Bind(&after_jump5) .JumpLoop(&start, 0); } // Longer jumps with constant operands - BytecodeLabel end[8]; + BytecodeLabel end[9]; { BytecodeLabel after_jump; builder.Jump(&end[0]) @@ -231,7 +250,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .JumpIfFalse(&end[4]) .JumpIfNull(&end[5]) .JumpIfUndefined(&end[6]) - .JumpIfNotHole(&end[7]); + .JumpIfNotHole(&end[7]) + .LoadLiteral(factory->prototype_string()) + .JumpIfJSReceiver(&end[8]); } // Perform an operation that returns boolean value to @@ -258,6 +279,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .Bind(&after_jump2); } + // Emit set pending message bytecode. + builder.SetPendingMessage(); + // Emit stack check bytecode. builder.StackCheck(0); @@ -282,14 +306,14 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { Handle<String> wide_name = factory->NewStringFromStaticChars("var_wide_name"); // Emit wide global load / store operations. - builder.LoadGlobal(1024, TypeofMode::NOT_INSIDE_TYPEOF) - .LoadGlobal(1024, TypeofMode::INSIDE_TYPEOF) - .LoadGlobal(1024, TypeofMode::INSIDE_TYPEOF) + builder.LoadGlobal(name, 1024, TypeofMode::NOT_INSIDE_TYPEOF) + .LoadGlobal(name, 1024, TypeofMode::INSIDE_TYPEOF) + .LoadGlobal(name, 1024, TypeofMode::INSIDE_TYPEOF) .StoreGlobal(name, 1024, LanguageMode::SLOPPY) .StoreGlobal(wide_name, 1, LanguageMode::STRICT); // Emit extra wide global load. - builder.LoadGlobal(1024 * 1024, TypeofMode::NOT_INSIDE_TYPEOF); + builder.LoadGlobal(name, 1024 * 1024, TypeofMode::NOT_INSIDE_TYPEOF); // Emit wide load / store property operations. builder.LoadNamedProperty(reg, wide_name, 0) @@ -299,6 +323,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .StoreNamedProperty(reg, wide_name, 0, LanguageMode::STRICT) .StoreKeyedProperty(reg, reg, 2056, LanguageMode::STRICT); + builder.StoreDataPropertyInLiteral(reg, reg, + DataPropertyInLiteralFlag::kNoFlags, 0); + // Emit wide context operations. builder.LoadContextSlot(reg, 1024, 0).StoreContextSlot(reg, 1024, 0); @@ -309,13 +336,14 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { .StoreLookupSlot(wide_name, LanguageMode::STRICT); // CreateClosureWide - builder.CreateClosure(1000, NOT_TENURED); + builder.CreateClosure(1000, 321, NOT_TENURED); // Emit wide variant of literal creation operations. - builder.CreateRegExpLiteral(factory->NewStringFromStaticChars("wide_literal"), - 0, 0) - .CreateArrayLiteral(factory->NewFixedArray(2), 0, 0) - .CreateObjectLiteral(factory->NewFixedArray(2), 0, 0, reg); + builder + .CreateRegExpLiteral(factory->NewStringFromStaticChars("wide_literal"), 0, + 0) + .CreateArrayLiteral(0, 0, 0) + .CreateObjectLiteral(0, 0, 0, reg); // Emit load and store operations for module variables. builder.LoadModuleVariable(-1, 42) @@ -393,6 +421,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { scorecard[Bytecodes::ToByte(Bytecode::kBitwiseOrSmi)] = 1; scorecard[Bytecodes::ToByte(Bytecode::kShiftLeftSmi)] = 1; scorecard[Bytecodes::ToByte(Bytecode::kShiftRightSmi)] = 1; + scorecard[Bytecodes::ToByte(Bytecode::kTestUndetectable)] = 1; + scorecard[Bytecodes::ToByte(Bytecode::kTestUndefined)] = 1; + scorecard[Bytecodes::ToByte(Bytecode::kTestNull)] = 1; } // Check return occurs at the end and only once in the BytecodeArray. |