Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Unified Diff: test/cctest/interpreter/test-bytecode-generator.cc

Issue 1414193006: [Interpreter] Removes unnecessary jumps and dead code from If and loops. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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++) {

Powered by Google App Engine
This is Rietveld 408576698