Index: test/unittests/interpreter/bytecode-array-builder-unittest.cc |
diff --git a/test/unittests/interpreter/bytecode-array-builder-unittest.cc b/test/unittests/interpreter/bytecode-array-builder-unittest.cc |
index a569c9404785a965af2a0ac16c8796f3f895a767..380169911b409b3519b144c90e6322ab4e505b81 100644 |
--- a/test/unittests/interpreter/bytecode-array-builder-unittest.cc |
+++ b/test/unittests/interpreter/bytecode-array-builder-unittest.cc |
@@ -57,11 +57,12 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
.LoadFalse() |
.StoreAccumulatorInRegister(wide); |
+ // Emit Ldar and Star taking care to foil the register optimizer. |
builder.StackCheck(0) |
.LoadAccumulatorWithRegister(other) |
+ .BinaryOperation(Token::ADD, reg) |
.StoreAccumulatorInRegister(reg) |
- .LoadNull() |
- .StoreAccumulatorInRegister(reg); |
+ .LoadNull(); |
// Emit register-register transfer. |
builder.MoveRegister(reg, other); |
@@ -291,12 +292,14 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
// Longer jumps requiring ConstantWide operand |
builder.Jump(&start).JumpIfNull(&start).JumpIfUndefined(&start).JumpIfNotHole( |
&start); |
+ |
// Perform an operation that returns boolean value to |
// generate JumpIfTrue/False |
builder.CompareOperation(Token::Value::EQ, reg) |
.JumpIfTrue(&start) |
.CompareOperation(Token::Value::EQ, reg) |
.JumpIfFalse(&start); |
+ |
// Perform an operation that returns a non-boolean operation to |
// generate JumpIfToBooleanTrue/False. |
builder.BinaryOperation(Token::Value::ADD, reg) |
@@ -370,9 +373,20 @@ TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) { |
BytecodeArrayBuilder builder(isolate(), zone(), 0, contexts, locals); |
BytecodeRegisterAllocator temporaries( |
zone(), builder.temporary_register_allocator()); |
+ for (int i = 0; i < locals + contexts; i++) { |
+ builder.LoadLiteral(Smi::FromInt(0)); |
+ builder.StoreAccumulatorInRegister(Register(i)); |
+ } |
for (int i = 0; i < temps; i++) { |
+ builder.LoadLiteral(Smi::FromInt(0)); |
builder.StoreAccumulatorInRegister(temporaries.NewRegister()); |
} |
+ if (temps > 0) { |
+ // Ensure temporaries are used so not optimized away by the |
+ // register optimizer. |
+ builder.New(Register(locals + contexts), Register(locals + contexts), |
+ static_cast<size_t>(temps)); |
+ } |
builder.Return(); |
Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); |
@@ -398,6 +412,7 @@ TEST_F(BytecodeArrayBuilderTest, RegisterValues) { |
TEST_F(BytecodeArrayBuilderTest, Parameters) { |
BytecodeArrayBuilder builder(isolate(), zone(), 10, 0, 0); |
+ |
Register param0(builder.Parameter(0)); |
Register param9(builder.Parameter(9)); |
CHECK_EQ(param9.index() - param0.index(), 9); |
@@ -429,6 +444,7 @@ TEST_F(BytecodeArrayBuilderTest, RegisterType) { |
TEST_F(BytecodeArrayBuilderTest, Constants) { |
BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 0); |
+ |
Factory* factory = isolate()->factory(); |
Handle<HeapObject> heap_num_1 = factory->NewHeapNumber(3.14); |
Handle<HeapObject> heap_num_2 = factory->NewHeapNumber(5.2); |
@@ -452,6 +468,7 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) { |
static const int kFarJumpDistance = 256; |
BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 1); |
+ |
Register reg(0); |
BytecodeLabel far0, far1, far2, far3, far4; |
BytecodeLabel near0, near1, near2, near3, near4; |
@@ -563,6 +580,7 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) { |
TEST_F(BytecodeArrayBuilderTest, BackwardJumps) { |
BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 1); |
+ |
Register reg(0); |
BytecodeLabel label0, label1, label2, label3, label4; |