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

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

Issue 1426913002: [Interpreter] Merges ToBoolean and JumpIfTrue/False bytecodes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Last patch was not complete. Forgot few changes. 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..17fc710c08cca46351b23bef27ffc7581b6a2cf4 100644
--- a/test/cctest/interpreter/test-bytecode-generator.cc
+++ b/test/cctest/interpreter/test-bytecode-generator.cc
@@ -385,6 +385,18 @@ TEST(LogicalExpressions) {
B(LdaSmi8), U8(3), //
B(Return)},
0},
+ {"var x = 0; return (x == 1) || 3;",
+ 1 * kPointerSize,
+ 1,
+ 12,
+ {B(LdaZero), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(1), //
+ B(TestEqual), R(0), //
+ B(JumpIfTrue), U8(4), //
+ B(LdaSmi8), U8(3), //
+ B(Return)},
+ 0},
{"var x = 0; return x && 3;",
1 * kPointerSize,
1,
@@ -396,6 +408,18 @@ TEST(LogicalExpressions) {
B(LdaSmi8), U8(3), //
B(Return)},
0},
+ {"var x = 0; return (x == 0) && 3;",
+ 1 * kPointerSize,
+ 1,
+ 11,
+ {B(LdaZero), //
+ B(Star), R(0), //
+ B(LdaZero), //
+ B(TestEqual), R(0), //
+ B(JumpIfFalse), U8(4), //
+ B(LdaSmi8), U8(3), //
+ B(Return)},
+ 0},
{"var x = 0; return x || (1, 2, 3);",
1 * kPointerSize,
1,
@@ -466,7 +490,55 @@ TEST(LogicalExpressions) {
#define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2),
X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
#undef X
- B(LdaSmi8), U8(3), //
+ B(LdaSmi8), U8(3), //
+ B(Return)},
+ 1,
+ {268, 0, 0, 0}},
+ {"var x = 1; var a = 2, b = 3; return (x > 3) || ("
+#define X "a = 1, b = 2, "
+ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
rmcilroy 2015/10/30 10:50:06 Now that https://codereview.chromium.org/141386301
rmcilroy 2015/10/30 12:09:53 Still this please.
+#undef X
+ "3);",
+ 3 * kPointerSize,
+ 1,
+ 285,
+ {B(LdaSmi8), U8(1), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(2), //
+ B(Star), R(1), //
+ B(LdaSmi8), U8(3), //
+ B(Star), R(2), //
+ B(LdaSmi8), U8(3), //
+ B(TestGreaterThan), R(0), //
+ B(JumpIfTrueConstant), U8(0), //
+#define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2),
+ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
+#undef X
+ B(LdaSmi8), U8(3), //
+ B(Return)},
+ 1,
+ {268, 0, 0, 0}},
+ {"var x = 0; var a = 2, b = 3; return (x < 5) && ("
+#define X "a = 1, b = 2, "
+ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
+#undef X
+ "3);",
+ 3 * kPointerSize,
+ 1,
+ 284,
+ {B(LdaZero), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(2), //
+ B(Star), R(1), //
+ B(LdaSmi8), U8(3), //
+ B(Star), R(2), //
+ B(LdaSmi8), U8(5), //
+ B(TestLessThan), R(0), //
+ B(JumpIfFalseConstant), U8(0), //
+#define X B(LdaSmi8), U8(1), B(Star), R(1), B(LdaSmi8), U8(2), B(Star), R(2),
+ X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X
+#undef X
+ B(LdaSmi8), U8(3), //
B(Return)},
1,
{268, 0, 0, 0}},
@@ -1254,33 +1326,31 @@ 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)}, //
+ 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)}, //
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)}, //
+ 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}},
@@ -1366,6 +1436,38 @@ TEST(IfConditions) {
helper.factory()->NewNumberFromInt(200),
helper.factory()->NewNumberFromInt(199),
helper.factory()->NewNumberFromInt(-200), unused, unused}},
+ {"function f() { var a = 0; var b = 0; if (a) { "
+#define X "b = a; a = b; "
+ X X X X X X X X X X X X X X X X X X X X X X X X
+#undef X
+ " return 200; } else { return -200; } } f()",
+ 2 * kPointerSize,
+ 1,
+ 212,
+ {
+#define X B(Ldar), R(0), B(Star), R(1), B(Ldar), R(1), B(Star), R(0)
+ B(LdaZero), //
+ B(Star), R(0), //
+ B(LdaZero), //
+ B(Star), R(1), //
+ B(Ldar), R(0), //
+ B(JumpIfToBooleanFalseConstant), U8(1), //
+ X, X, X, X, X, X, X, X, X, X, //
+ X, X, X, X, X, X, X, X, X, X, //
+ X, X, X, X, //
+ B(LdaConstant), U8(0), //
+ B(Return), //
+ B(Jump), U8(5), //
+ B(LdaConstant), U8(2), //
+ B(Return), //
+ B(LdaUndefined), //
+ B(Return)}, //
+#undef X
+ 3,
+ {helper.factory()->NewNumberFromInt(200),
+ helper.factory()->NewNumberFromInt(199),
+ helper.factory()->NewNumberFromInt(-200), unused, unused, unused}},
+
{"function f(a, b) {\n"
" if (a == b) { return 1; }\n"
" if (a === b) { return 1; }\n"
@@ -1735,7 +1837,88 @@ TEST(BasicLoops) {
B(Return), //
},
0},
- };
+ {"var x = 10;"
+ "var y = 1;"
+ "while (x) {"
+ " y = y * 12;"
+ " x = x - 1;"
+ "}"
+ "return y;",
+ 2 * kPointerSize,
+ 1,
+ 29,
+ {
+ B(LdaSmi8), U8(10), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(1), //
+ B(Star), R(1), //
+ B(Jump), U8(14), //
+ B(LdaSmi8), U8(12), //
+ B(Mul), R(1), //
+ B(Star), R(1), //
+ B(LdaSmi8), U8(1), //
+ B(Sub), R(0), //
+ B(Star), R(0), //
+ B(Ldar), R(0), //
+ B(JumpIfToBooleanTrue), U8(-14), //
+ B(Ldar), R(1), //
+ B(Return), //
+ },
+ 0},
+ {"var x = 10;"
+ "var y = 1;"
+ "do {"
+ " y = y * 12;"
+ " x = x - 1;"
+ "} while(x);"
+ "return y;",
+ 2 * kPointerSize,
+ 1,
+ 27,
+ {
+ B(LdaSmi8), U8(10), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(1), //
+ B(Star), R(1), //
+ B(LdaSmi8), U8(12), //
+ B(Mul), R(1), //
+ B(Star), R(1), //
+ B(LdaSmi8), U8(1), //
+ B(Sub), R(0), //
+ B(Star), R(0), //
+ B(Ldar), R(0), //
+ B(JumpIfToBooleanTrue), U8(-14), //
+ 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,
+ {
+ B(LdaSmi8), U8(1), //
+ B(Star), R(0), //
+ B(LdaSmi8), U8(10), //
+ B(Star), R(1), //
+ B(Jump), U8(14), //
+ B(LdaSmi8), U8(12), //
+ B(Mul), R(0), //
+ B(Star), R(0), //
+ B(Ldar), R(1), //
+ B(ToNumber), //
+ B(Dec), //
+ B(Star), R(1), //
+ B(Ldar), R(1), //
+ B(JumpIfToBooleanTrue), U8(-14), //
+ B(Ldar), R(0), //
+ B(Return), //
+ },
+ 0}};
for (size_t i = 0; i < arraysize(snippets); i++) {
Handle<BytecodeArray> bytecode_array =
@@ -2836,15 +3019,14 @@ TEST(Throw) {
{"if ('test') { throw 'Error'; };",
0,
1,
- 10,
+ 9,
{
- B(LdaConstant), U8(0), //
- B(ToBoolean), //
- B(JumpIfFalse), U8(5), //
- B(LdaConstant), U8(1), //
- B(Throw), //
- B(LdaUndefined), //
- B(Return), //
+ B(LdaConstant), U8(0), //
+ B(JumpIfToBooleanFalse), U8(5), //
+ B(LdaConstant), U8(1), //
+ B(Throw), //
+ B(LdaUndefined), //
+ B(Return), //
},
2,
{"test", "Error"}},
@@ -3825,33 +4007,30 @@ TEST(Conditional) {
{"return 1 ? 2 : 3;",
0,
1,
- 12,
+ 11,
{
- B(LdaSmi8), U8(1), //
- B(ToBoolean), //
- B(JumpIfFalse), U8(6), //
- B(LdaSmi8), U8(2), //
- B(Jump), U8(4), //
- B(LdaSmi8), U8(3), //
- B(Return), //
+ B(LdaSmi8), U8(1), //
+ B(JumpIfToBooleanFalse), U8(6), //
+ B(LdaSmi8), U8(2), //
+ B(Jump), U8(4), //
+ B(LdaSmi8), U8(3), //
+ B(Return), //
}},
{"return 1 ? 2 ? 3 : 4 : 5;",
0,
1,
- 21,
- {
- B(LdaSmi8), U8(1), //
- B(ToBoolean), //
- B(JumpIfFalse), U8(15), //
- B(LdaSmi8), U8(2), //
- B(ToBoolean), //
- B(JumpIfFalse), U8(6), //
- B(LdaSmi8), U8(3), //
- B(Jump), U8(4), //
- B(LdaSmi8), U8(4), //
- B(Jump), U8(4), //
- B(LdaSmi8), U8(5), //
- B(Return), //
+ 19,
+ {
+ B(LdaSmi8), U8(1), //
+ B(JumpIfToBooleanFalse), U8(14), //
+ B(LdaSmi8), U8(2), //
+ B(JumpIfToBooleanFalse), U8(6), //
+ B(LdaSmi8), U8(3), //
+ B(Jump), U8(4), //
+ B(LdaSmi8), U8(4), //
+ B(Jump), U8(4), //
+ B(LdaSmi8), U8(5), //
+ B(Return), //
}},
};

Powered by Google App Engine
This is Rietveld 408576698