Add more inlining unit tests.

- Scheduler can inline a function with a loop.
- Inlining strict into non-strict works correctly.
- Inlining non-strict into strict works correctly.

R=mstarzinger@chromium.org

Review URL: https://codereview.chromium.org/515103002

git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@23511 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
sigurds@chromium.org 2014-08-29 08:58:51 +00:00
parent e97bf94175
commit 9091e87d8f
2 changed files with 54 additions and 0 deletions

View File

@ -80,6 +80,9 @@
##############################################################################
# TurboFan compiler failures.
# Scheduler cannot handle free-floating loops yet
'test-run-inlining/InlineLoop': [SKIP],
# TODO(mstarzinger): Sometimes the try-catch blacklist fails.
'test-debug/DebugEvaluateWithoutStack': [PASS, NO_VARIANTS],
'test-debug/MessageQueues': [PASS, NO_VARIANTS],

View File

@ -192,4 +192,55 @@ TEST(InlineTwiceDependentDiamondDifferent) {
T.CheckCall(T.Val(-329), T.Val(11), T.Val(4));
}
TEST(InlineLoop) {
FunctionTester T(
"(function () {"
"var x = 41;"
"function foo(s) { AssertStackDepth(1); while (s > 0) {"
" s = s - 1; }; return s; };"
"function bar(s,t) { return foo(foo(s)); };"
"return bar;"
"})();",
CompilationInfo::kInliningEnabled |
CompilationInfo::kContextSpecializing);
InstallAssertStackDepthHelper(CcTest::isolate());
T.CheckCall(T.Val(0.0), T.Val(11), T.Val(4));
}
TEST(InlineStrictIntoNonStrict) {
FunctionTester T(
"(function () {"
"var x = Object.create({}, { y: { value:42, writable:false } });"
"function foo(s) { 'use strict';"
" x.y = 9; };"
"function bar(s,t) { return foo(s); };"
"return bar;"
"})();",
CompilationInfo::kInliningEnabled |
CompilationInfo::kContextSpecializing);
InstallAssertStackDepthHelper(CcTest::isolate());
T.CheckThrows(T.undefined(), T.undefined());
}
TEST(InlineNonStrictIntoStrict) {
FunctionTester T(
"(function () {"
"var x = Object.create({}, { y: { value:42, writable:false } });"
"function foo(s) { x.y = 9; return x.y; };"
"function bar(s,t) { \'use strict\'; return foo(s); };"
"return bar;"
"})();",
CompilationInfo::kInliningEnabled |
CompilationInfo::kContextSpecializing);
InstallAssertStackDepthHelper(CcTest::isolate());
T.CheckCall(T.Val(42), T.undefined(), T.undefined());
}
#endif // V8_TURBOFAN_TARGET