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 a050d5bcfdb9c561ec0f3ce3c17e5a60a3dac27f..1624b5b38cfc65ee164538f271ed3e3c34ea0774 100644 |
--- a/test/unittests/interpreter/bytecode-array-builder-unittest.cc |
+++ b/test/unittests/interpreter/bytecode-array-builder-unittest.cc |
@@ -171,26 +171,34 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
// Emit control flow. Return must be the last instruction. |
BytecodeLabel start; |
builder.Bind(&start); |
- // Short jumps with Imm8 operands |
- builder.Jump(&start) |
- .JumpIfNull(&start) |
- .JumpIfUndefined(&start) |
- .JumpIfNotHole(&start); |
+ { |
+ // Short jumps with Imm8 operands |
+ BytecodeLabel after_jump; |
+ builder.Jump(&start) |
+ .Bind(&after_jump) |
+ .JumpIfNull(&start) |
+ .JumpIfUndefined(&start) |
+ .JumpIfNotHole(&start); |
+ } |
// Longer jumps with constant operands |
BytecodeLabel end[8]; |
- builder.Jump(&end[0]) |
- .LoadTrue() |
- .JumpIfTrue(&end[1]) |
- .LoadTrue() |
- .JumpIfFalse(&end[2]) |
- .LoadLiteral(Smi::FromInt(0)) |
- .JumpIfTrue(&end[3]) |
- .LoadLiteral(Smi::FromInt(0)) |
- .JumpIfFalse(&end[4]) |
- .JumpIfNull(&end[5]) |
- .JumpIfUndefined(&end[6]) |
- .JumpIfNotHole(&end[7]); |
+ { |
+ BytecodeLabel after_jump; |
+ builder.Jump(&end[0]) |
+ .Bind(&after_jump) |
+ .LoadTrue() |
+ .JumpIfTrue(&end[1]) |
+ .LoadTrue() |
+ .JumpIfFalse(&end[2]) |
+ .LoadLiteral(Smi::FromInt(0)) |
+ .JumpIfTrue(&end[3]) |
+ .LoadLiteral(Smi::FromInt(0)) |
+ .JumpIfFalse(&end[4]) |
+ .JumpIfNull(&end[5]) |
+ .JumpIfUndefined(&end[6]) |
+ .JumpIfNotHole(&end[7]); |
+ } |
// Perform an operation that returns boolean value to |
// generate JumpIfTrue/False |
@@ -209,20 +217,26 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
builder.LoadTrue(); |
} |
// Longer jumps requiring Constant 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) |
- .JumpIfTrue(&start) |
- .BinaryOperation(Token::Value::ADD, reg) |
- .JumpIfFalse(&start); |
+ { |
+ BytecodeLabel after_jump; |
+ builder.Jump(&start) |
+ .Bind(&after_jump) |
+ .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) |
+ .JumpIfTrue(&start) |
+ .BinaryOperation(Token::Value::ADD, reg) |
+ .JumpIfFalse(&start); |
+ } |
// Emit stack check bytecode. |
builder.StackCheck(0); |
@@ -230,9 +244,9 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
// Emit throw and re-throw in it's own basic block so that the rest of the |
// code isn't omitted due to being dead. |
BytecodeLabel after_throw; |
- builder.Jump(&after_throw).Throw().Bind(&after_throw); |
+ builder.Throw().Bind(&after_throw); |
BytecodeLabel after_rethrow; |
- builder.Jump(&after_rethrow).ReThrow().Bind(&after_rethrow); |
+ builder.ReThrow().Bind(&after_rethrow); |
builder.ForInPrepare(reg) |
.ForInDone(reg, reg) |
@@ -304,8 +318,14 @@ TEST_F(BytecodeArrayBuilderTest, AllBytecodesGenerated) { |
.CreateObjectLiteral(factory->NewFixedArray(2), 0, 0); |
// Longer jumps requiring ConstantWide operand |
- builder.Jump(&start).JumpIfNull(&start).JumpIfUndefined(&start).JumpIfNotHole( |
- &start); |
+ { |
+ BytecodeLabel after_jump; |
+ builder.Jump(&start) |
+ .Bind(&after_jump) |
+ .JumpIfNull(&start) |
+ .JumpIfUndefined(&start) |
+ .JumpIfNotHole(&start); |
+ } |
// Perform an operation that returns boolean value to |
// generate JumpIfTrue/False |
@@ -506,8 +526,10 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) { |
Register reg(0); |
BytecodeLabel far0, far1, far2, far3, far4; |
BytecodeLabel near0, near1, near2, near3, near4; |
+ BytecodeLabel after_jump0, after_jump1; |
builder.Jump(&near0) |
+ .Bind(&after_jump0) |
.CompareOperation(Token::Value::EQ, reg) |
.JumpIfTrue(&near1) |
.CompareOperation(Token::Value::EQ, reg) |
@@ -522,6 +544,7 @@ TEST_F(BytecodeArrayBuilderTest, ForwardJumps) { |
.Bind(&near3) |
.Bind(&near4) |
.Jump(&far0) |
+ .Bind(&after_jump1) |
.CompareOperation(Token::Value::EQ, reg) |
.JumpIfTrue(&far1) |
.CompareOperation(Token::Value::EQ, reg) |
@@ -637,7 +660,8 @@ TEST_F(BytecodeArrayBuilderTest, BackwardJumps) { |
.BinaryOperation(Token::Value::ADD, reg) |
.JumpIfFalse(&label4); |
for (int i = 0; i < 63; i++) { |
- builder.Jump(&label4); |
+ BytecodeLabel after_jump; |
+ builder.Jump(&label4).Bind(&after_jump); |
} |
// Add padding to force wide backwards jumps. |
@@ -650,6 +674,8 @@ TEST_F(BytecodeArrayBuilderTest, BackwardJumps) { |
builder.CompareOperation(Token::Value::EQ, reg).JumpIfFalse(&label2); |
builder.CompareOperation(Token::Value::EQ, reg).JumpIfTrue(&label1); |
builder.Jump(&label0); |
+ BytecodeLabel end; |
+ builder.Bind(&end); |
builder.Return(); |
Handle<BytecodeArray> array = builder.ToBytecodeArray(); |
@@ -735,9 +761,15 @@ TEST_F(BytecodeArrayBuilderTest, LabelReuse) { |
// Labels can only have 1 forward reference, but |
// can be referred to mulitple times once bound. |
- BytecodeLabel label; |
- |
- builder.Jump(&label).Bind(&label).Jump(&label).Jump(&label).Return(); |
+ BytecodeLabel label, after_jump0, after_jump1; |
+ |
+ builder.Jump(&label) |
+ .Bind(&label) |
+ .Jump(&label) |
+ .Bind(&after_jump0) |
+ .Jump(&label) |
+ .Bind(&after_jump1) |
+ .Return(); |
Handle<BytecodeArray> array = builder.ToBytecodeArray(); |
BytecodeArrayIterator iterator(array); |
@@ -761,8 +793,13 @@ TEST_F(BytecodeArrayBuilderTest, LabelAddressReuse) { |
BytecodeArrayBuilder builder(isolate(), zone(), 0, 0, 0); |
for (int i = 0; i < kRepeats; i++) { |
- BytecodeLabel label; |
- builder.Jump(&label).Bind(&label).Jump(&label).Jump(&label); |
+ BytecodeLabel label, after_jump0, after_jump1; |
+ builder.Jump(&label) |
+ .Bind(&label) |
+ .Jump(&label) |
+ .Bind(&after_jump0) |
+ .Jump(&label) |
+ .Bind(&after_jump1); |
} |
builder.Return(); |