author | Hannes Verschore <hv1989@gmail.com> |
Fri, 02 May 2014 22:23:17 +0200 | |
changeset 181373 | f8497c9757f136708aea52f06e2d0efce18fdab9 |
parent 181372 | b3a88dc52da78d6de5a31eca1d0a4512f2481979 |
child 181403 | 43c5be10eae0b874634fc6456a11ab4bec2d0f50 |
push id | 43043 |
push user | hv1989@gmail.com |
push date | Fri, 02 May 2014 20:23:36 +0000 |
treeherder | mozilla-inbound@f8497c9757f1 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | bhackett |
bugs | 1005030 |
milestone | 32.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/IonBuilder.cpp +++ b/js/src/jit/IonBuilder.cpp @@ -4968,17 +4968,17 @@ IonBuilder::jsop_funcall(uint32_t argc) bool IonBuilder::jsop_funapply(uint32_t argc) { int calleeDepth = -((int)argc + 2); types::TemporaryTypeSet *calleeTypes = current->peek(calleeDepth)->resultTypeSet(); JSFunction *native = getSingleCallTarget(calleeTypes); - if (argc != 2) { + if (argc != 2 || info().executionMode() == ArgumentsUsageAnalysis) { CallInfo callInfo(alloc(), false); if (!callInfo.init(current, argc)) return false; return makeCall(native, callInfo, false); } // Disable compilation if the second argument to |apply| cannot be guaranteed // to be either definitely |arguments| or definitely not |arguments|. @@ -4993,19 +4993,19 @@ IonBuilder::jsop_funapply(uint32_t argc) // Fallback to regular call if arg 2 is not definitely |arguments|. if (argument->type() != MIRType_MagicOptimizedArguments) { CallInfo callInfo(alloc(), false); if (!callInfo.init(current, argc)) return false; return makeCall(native, callInfo, false); } - if (!native || - !native->isNative() || - native->native() != js_fun_apply) + if ((!native || !native->isNative() || + native->native() != js_fun_apply) && + info().executionMode() != DefinitePropertiesAnalysis) { return abort("fun.apply speculation failed"); } current->peek(calleeDepth)->setImplicitlyUsedUnchecked(); // Use funapply that definitely uses |arguments| return jsop_funapplyarguments(argc);