Chromium Code Reviews| Index: test/cctest/interpreter/test-bytecode-generator.cc |
| diff --git a/test/cctest/interpreter/test-bytecode-generator.cc b/test/cctest/interpreter/test-bytecode-generator.cc |
| index 8325b5b7dba056a3f01cf6ffca76a2f6cee6756d..ef9c6835d6807a49b6e88bf549ab52f61a43cc6d 100644 |
| --- a/test/cctest/interpreter/test-bytecode-generator.cc |
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc |
| @@ -1254,49 +1254,38 @@ TEST(IfConditions) { |
| {"function f() { if (0) { return 1; } else { return -1; } } f()", |
| 0, |
| 1, |
| - 14, |
| - {B(LdaZero), // |
| - B(ToBoolean), // |
| - B(JumpIfFalse), U8(7), // |
| - B(LdaSmi8), U8(1), // |
| - B(Return), // |
| - B(Jump), U8(5), // |
| - B(LdaSmi8), U8(-1), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| + 5, |
| + {B(LdaSmi8), U8(-1), // |
| + B(Return), // |
| + B(LdaUndefined), // |
|
oth
2015/10/30 09:46:19
It looks like our logic for detecting when to emit
mythria
2015/10/30 15:07:47
I am not sure if it is easy to eliminate return he
oth
2015/10/30 15:31:34
Yes.
|
| + B(Return)}, // |
| 0, |
| {unused, unused, unused, unused, unused, unused}}, |
| {"function f() { if ('lucky') { return 1; } else { return -1; } } f();", |
| 0, |
| 1, |
| - 15, |
| - {B(LdaConstant), U8(0), // |
| - B(ToBoolean), // |
| - B(JumpIfFalse), U8(7), // |
| - B(LdaSmi8), U8(1), // |
| - B(Return), // |
| - B(Jump), U8(5), // |
| - B(LdaSmi8), U8(-1), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| - 1, |
| - {helper.factory()->NewStringFromStaticChars("lucky"), unused, unused, |
| - unused, unused, unused}}, |
| + 5, |
| + {B(LdaSmi8), U8(1), // |
| + B(Return), // |
| + B(LdaUndefined), // |
| + B(Return)}, // |
| + 0, |
| + {unused, unused, unused, unused, unused, unused}}, |
| {"function f() { if (false) { return 1; } else { return -1; } } f();", |
| 0, |
| 1, |
| - 13, |
| - {B(LdaFalse), // |
| - B(JumpIfFalse), U8(7), // |
| - B(LdaSmi8), U8(1), // |
| - B(Return), // |
| - B(Jump), U8(5), // |
| - B(LdaSmi8), U8(-1), // |
| - B(Return), // |
| - B(LdaUndefined), // |
| - B(Return)}, // |
| + 5, |
| + {B(LdaSmi8), U8(-1), // |
| + B(Return), // |
| + B(LdaUndefined), // |
| + B(Return)}, // |
| + 0, |
| + {unused, unused, unused, unused, unused, unused}}, |
| + {"function f() { if (false) { return 1; } } f();", |
| + 0, |
| + 1, |
| + 2, |
| + {B(LdaUndefined), B(Return)}, |
| 0, |
| {unused, unused, unused, unused, unused, unused}}, |
| {"function f(a) { if (a <= 0) { return 200; } else { return -200; } }" |
| @@ -1575,38 +1564,36 @@ TEST(BasicLoops) { |
| "return i;", |
| 1 * kPointerSize, |
| 1, |
| - 56, |
| + 53, |
| { |
| - B(LdaZero), // |
| - B(Star), R(0), // |
| - B(Jump), U8(47), // |
| - B(LdaZero), // |
| - B(TestLessThan), R(0), // |
| - B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(40), // |
| - B(LdaSmi8), U8(3), // |
| - B(TestEqual), R(0), // |
| - B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(35), // |
| - B(LdaSmi8), U8(4), // |
| - B(TestEqual), R(0), // |
| - B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(27), // |
| - B(LdaSmi8), U8(10), // |
| - B(TestEqual), R(0), // |
| - B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(16), // |
| - B(LdaSmi8), U8(5), // |
| - B(TestEqual), R(0), // |
| - B(JumpIfFalse), U8(4), // |
| - B(Jump), U8(11), // |
| - B(LdaSmi8), U8(1), // |
| - B(Add), R(0), // |
| - B(Star), R(0), // |
| - B(LdaTrue), // |
| - B(JumpIfTrue), U8(-46), // |
| - B(Ldar), R(0), // |
| - B(Return), // |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaZero), // |
| + B(TestLessThan), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(40), // |
| + B(LdaSmi8), U8(3), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(34), // |
| + B(LdaSmi8), U8(4), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(26), // |
| + B(LdaSmi8), U8(10), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(16), // |
| + B(LdaSmi8), U8(5), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(10), // |
| + B(LdaSmi8), U8(1), // |
| + B(Add), R(0), // |
| + B(Star), R(0), // |
| + B(Jump), U8(-45), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| }, |
| 0}, |
| {"var x = 0; var y = 1;" |
| @@ -1709,11 +1696,10 @@ TEST(BasicLoops) { |
| "return i;", |
| 1 * kPointerSize, |
| 1, |
| - 41, |
| + 38, |
| { |
| B(LdaZero), // |
| B(Star), R(0), // |
| - B(Jump), U8(32), // |
| B(Jump), U8(16), // |
| B(LdaSmi8), U8(2), // |
| B(TestEqual), R(0), // |
| @@ -1728,13 +1714,143 @@ TEST(BasicLoops) { |
| B(LdaSmi8), U8(1), // |
| B(Add), R(0), // |
| B(Star), R(0), // |
| - B(Jump), U8(5), // |
| - B(LdaTrue), // |
| - B(JumpIfTrue), U8(-31), // |
| + B(Jump), U8(4), // |
| + B(Jump), U8(-30), // |
| B(Ldar), R(0), // |
| B(Return), // |
| }, |
| 0}, |
| + {"var x = 0; var y = 1;" |
| + "do {" |
| + " y = y * 10;" |
| + " if (x == 5) break;" |
| + " x = x + 1;" |
| + " if (x == 6) continue;" |
| + "} while (false);" |
| + "return y;", |
| + 2 * kPointerSize, |
| + 1, |
| + 38, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(1), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(10), // |
| + B(Mul), R(1), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(5), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(16), // |
| + B(LdaSmi8), U8(1), // |
| + B(Add), R(0), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(6), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(2), // |
| + B(Ldar), R(1), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 0; var y = 1;" |
| + "do {" |
| + " y = y * 10;" |
| + " if (x == 5) break;" |
| + " x = x + 1;" |
| + " if (x == 6) continue;" |
| + "} while (true);" |
| + "return y;", |
| + 2 * kPointerSize, |
| + 1, |
| + 40, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(1), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(10), // |
| + B(Mul), R(1), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(5), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(18), // |
| + B(LdaSmi8), U8(1), // |
| + B(Add), R(0), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(6), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(2), // |
| + B(Jump), U8(-28), // |
| + B(Ldar), R(1), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 0;" |
| + "while(false) {" |
| + " x = x + 1;" |
| + "};" |
| + "return x;", |
| + 1 * kPointerSize, |
| + 1, |
| + 6, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 0;" |
| + "for( var i = 0; false; i++) {" |
| + " x = x + 1;" |
| + "};" |
| + "return x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 9, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaZero), // |
| + B(Star), R(1), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| + }, |
| + 0}, |
| + {"var x = 0;" |
| + "for( var i = 0; true; ++i) {" |
| + " x = x + 1;" |
| + " if (x == 20) break;" |
| + "};" |
| + "return x;", |
| + 2 * kPointerSize, |
| + 1, |
| + 31, |
| + { |
| + B(LdaZero), // |
| + B(Star), R(0), // |
| + B(LdaZero), // |
| + B(Star), R(1), // |
| + B(LdaSmi8), U8(1), // |
| + B(Add), R(0), // |
| + B(Star), R(0), // |
| + B(LdaSmi8), U8(20), // |
| + B(TestEqual), R(0), // |
| + B(JumpIfFalse), U8(4), // |
| + B(Jump), U8(10), // |
| + B(Ldar), R(1), // |
| + B(ToNumber), // |
| + B(Inc), // |
| + B(Star), R(1), // |
| + B(Jump), U8(-20), // |
| + B(Ldar), R(0), // |
| + B(Return), // |
| + }, |
| + 0}, |
| }; |
| for (size_t i = 0; i < arraysize(snippets); i++) { |
| @@ -2836,18 +2952,15 @@ TEST(Throw) { |
| {"if ('test') { throw 'Error'; };", |
| 0, |
| 1, |
| - 10, |
| + 5, |
| { |
| B(LdaConstant), U8(0), // |
| - B(ToBoolean), // |
| - B(JumpIfFalse), U8(5), // |
| - B(LdaConstant), U8(1), // |
| B(Throw), // |
| B(LdaUndefined), // |
| B(Return), // |
| }, |
| - 2, |
| - {"test", "Error"}}, |
| + 1, |
| + {"Error"}}, |
| }; |
| for (size_t i = 0; i < arraysize(snippets); i++) { |