| 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 4a887ab67d9f0f776e902f39272dc9f4794e4878..81dc968f84f1a6ea934f28cfc1dc37d914bb47b4 100644
|
| --- a/test/cctest/interpreter/test-bytecode-generator.cc
|
| +++ b/test/cctest/interpreter/test-bytecode-generator.cc
|
| @@ -1605,47 +1605,39 @@ TEST(IfConditions) {
|
| {"function f() { if (0) { return 1; } else { return -1; } } f()",
|
| 0,
|
| 1,
|
| - 13,
|
| - {B(LdaZero), //
|
| - B(JumpIfToBooleanFalse), 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), // TODO(mythria) redundant return statement
|
| + B(Return)}, // could be eliminated.
|
| 0,
|
| {unused, unused, unused, unused, unused, unused}},
|
| {"function f() { if ('lucky') { return 1; } else { return -1; } } f();",
|
| 0,
|
| 1,
|
| - 14,
|
| - {B(LdaConstant), U8(0), //
|
| - B(JumpIfToBooleanFalse), 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), // TODO(mythria) redundant return statement
|
| + B(Return)}, // could be eliminated.
|
| + 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), // TODO(mythria) redundant return statement
|
| + B(Return)}, // could be eliminated.
|
| + 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; } }"
|
| @@ -1777,6 +1769,32 @@ TEST(IfConditions) {
|
| #undef IF_CONDITION_RETURN
|
| 0,
|
| {unused, unused, unused, unused, unused, unused}},
|
| + {"function f() {"
|
| + " var a = 0;"
|
| + " if (a) {"
|
| + " return 20;"
|
| + "} else {"
|
| + " return -20;}"
|
| + "};"
|
| + "f();",
|
| + 1 * kPointerSize,
|
| + 1,
|
| + 17,
|
| + {
|
| + B(LdaZero), //
|
| + B(Star), R(0), //
|
| + B(Ldar), R(0), //
|
| + B(JumpIfToBooleanFalse), U8(7), //
|
| + B(LdaSmi8), U8(20), //
|
| + B(Return), //
|
| + B(Jump), U8(5), //
|
| + B(LdaSmi8), U8(-20), //
|
| + B(Return), //
|
| + B(LdaUndefined), //
|
| + B(Return)
|
| + },
|
| + 0,
|
| + {unused, unused, unused, unused, unused, unused}}
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
| @@ -1952,38 +1970,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;"
|
| @@ -2086,11 +2102,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), //
|
| @@ -2105,9 +2120,8 @@ 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), //
|
| },
|
| @@ -2139,8 +2153,8 @@ TEST(BasicLoops) {
|
| B(Ldar), R(1), //
|
| B(Return), //
|
| },
|
| - 0},
|
| - {"var x = 10;"
|
| + 0},
|
| + {"var x = 10;"
|
| "var y = 1;"
|
| "do {"
|
| " y = y * 12;"
|
| @@ -2166,16 +2180,16 @@ TEST(BasicLoops) {
|
| B(Ldar), R(1), //
|
| B(Return), //
|
| },
|
| - 0},
|
| - {"var y = 1;"
|
| - "for (var x = 10; x; --x) {"
|
| - " y = y * 12;"
|
| - "}"
|
| - "return y;",
|
| - 2 * kPointerSize,
|
| - 1,
|
| - 29,
|
| - {
|
| + 0},
|
| + {"var y = 1;"
|
| + "for (var x = 10; x; --x) {"
|
| + " y = y * 12;"
|
| + "}"
|
| + "return y;",
|
| + 2 * kPointerSize,
|
| + 1,
|
| + 29,
|
| + {
|
| B(LdaSmi8), U8(1), //
|
| B(Star), R(0), //
|
| B(LdaSmi8), U8(10), //
|
| @@ -2192,8 +2206,140 @@ TEST(BasicLoops) {
|
| B(JumpIfToBooleanTrue), U8(-14), //
|
| B(Ldar), R(0), //
|
| B(Return), //
|
| - },
|
| - 0}};
|
| + },
|
| + 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++) {
|
| Handle<BytecodeArray> bytecode_array =
|
| @@ -3294,17 +3440,15 @@ TEST(Throw) {
|
| {"if ('test') { throw 'Error'; };",
|
| 0,
|
| 1,
|
| - 9,
|
| + 5,
|
| {
|
| - B(LdaConstant), U8(0), //
|
| - B(JumpIfToBooleanFalse), U8(5), //
|
| - B(LdaConstant), U8(1), //
|
| - B(Throw), //
|
| - B(LdaUndefined), //
|
| - B(Return), //
|
| + B(LdaConstant), U8(0), //
|
| + B(Throw), //
|
| + B(LdaUndefined), //
|
| + B(Return), //
|
| },
|
| - 2,
|
| - {"test", "Error"}},
|
| + 1,
|
| + {"Error"}},
|
| };
|
|
|
| for (size_t i = 0; i < arraysize(snippets); i++) {
|
|
|