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:
parent
e97bf94175
commit
9091e87d8f
@ -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],
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user