Changeset 189086 in webkit


Ignore:
Timestamp:
Aug 27, 2015 10:59:44 PM (9 years ago)
Author:
mark.lam@apple.com
Message:

Add noDFG() to jsc to prevent DFG compilation of a specified function.
https://bugs.webkit.org/show_bug.cgi?id=148559

Reviewed by Geoffrey Garen and Saam Barati.

  • API/JSCTestRunnerUtils.cpp:

(JSC::setNeverInline):
(JSC::setNeverOptimize):

  • API/JSCTestRunnerUtils.h:
  • bytecode/CodeBlock.cpp:

(JSC::CodeBlock::dumpAssumingJITType):

  • dfg/DFGCapabilities.cpp:

(JSC::DFG::mightCompileEval):
(JSC::DFG::mightCompileProgram):
(JSC::DFG::mightCompileFunctionForCall):
(JSC::DFG::mightCompileFunctionForConstruct):
(JSC::DFG::mightInlineFunctionForCall):

  • jsc.cpp:

(GlobalObject::finishCreation):
(functionNoDFG):

  • runtime/Executable.h:

(JSC::ScriptExecutable::ecmaMode):
(JSC::ScriptExecutable::setNeverInline):
(JSC::ScriptExecutable::setNeverOptimize):
(JSC::ScriptExecutable::setDidTryToEnterInLoop):
(JSC::ScriptExecutable::neverInline):
(JSC::ScriptExecutable::neverOptimize):
(JSC::ScriptExecutable::didTryToEnterInLoop):
(JSC::ScriptExecutable::isInliningCandidate):
(JSC::ScriptExecutable::isOkToOptimize):
(JSC::ScriptExecutable::addressOfDidTryToEnterInLoop):

  • runtime/TestRunnerUtils.cpp:

(JSC::setNeverInline):
(JSC::setNeverOptimize):
(JSC::optimizeNextInvocation):

  • runtime/TestRunnerUtils.h:
Location:
trunk/Source/JavaScriptCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/API/JSCTestRunnerUtils.cpp

    r169930 r189086  
    4747}
    4848
     49JSValueRef setNeverOptimize(JSContextRef context, JSValueRef theFunctionValueRef)
     50{
     51    ExecState* exec= toJS(context);
     52    JSLockHolder holder(exec);
     53    return toRef(exec, setNeverOptimize(toJS(exec, theFunctionValueRef)));
     54}
     55
    4956} // namespace JSC
    5057
  • trunk/Source/JavaScriptCore/API/JSCTestRunnerUtils.h

    r153191 r189086  
    3434JS_EXPORT_PRIVATE JSValueRef numberOfDFGCompiles(JSContextRef, JSValueRef theFunction);
    3535JS_EXPORT_PRIVATE JSValueRef setNeverInline(JSContextRef, JSValueRef theFunction);
     36JS_EXPORT_PRIVATE JSValueRef setNeverOptimize(JSContextRef, JSValueRef theFunction);
    3637
    3738} // namespace JSC
  • trunk/Source/JavaScriptCore/ChangeLog

    r189085 r189086  
     12015-08-27  Mark Lam  <mark.lam@apple.com>
     2
     3        Add noDFG() to jsc to prevent DFG compilation of a specified function.
     4        https://bugs.webkit.org/show_bug.cgi?id=148559
     5
     6        Reviewed by Geoffrey Garen and Saam Barati.
     7
     8        * API/JSCTestRunnerUtils.cpp:
     9        (JSC::setNeverInline):
     10        (JSC::setNeverOptimize):
     11        * API/JSCTestRunnerUtils.h:
     12        * bytecode/CodeBlock.cpp:
     13        (JSC::CodeBlock::dumpAssumingJITType):
     14        * dfg/DFGCapabilities.cpp:
     15        (JSC::DFG::mightCompileEval):
     16        (JSC::DFG::mightCompileProgram):
     17        (JSC::DFG::mightCompileFunctionForCall):
     18        (JSC::DFG::mightCompileFunctionForConstruct):
     19        (JSC::DFG::mightInlineFunctionForCall):
     20        * jsc.cpp:
     21        (GlobalObject::finishCreation):
     22        (functionNoDFG):
     23        * runtime/Executable.h:
     24        (JSC::ScriptExecutable::ecmaMode):
     25        (JSC::ScriptExecutable::setNeverInline):
     26        (JSC::ScriptExecutable::setNeverOptimize):
     27        (JSC::ScriptExecutable::setDidTryToEnterInLoop):
     28        (JSC::ScriptExecutable::neverInline):
     29        (JSC::ScriptExecutable::neverOptimize):
     30        (JSC::ScriptExecutable::didTryToEnterInLoop):
     31        (JSC::ScriptExecutable::isInliningCandidate):
     32        (JSC::ScriptExecutable::isOkToOptimize):
     33        (JSC::ScriptExecutable::addressOfDidTryToEnterInLoop):
     34        * runtime/TestRunnerUtils.cpp:
     35        (JSC::setNeverInline):
     36        (JSC::setNeverOptimize):
     37        (JSC::optimizeNextInvocation):
     38        * runtime/TestRunnerUtils.h:
     39
    1402015-08-27  Commit Queue  <commit-queue@webkit.org>
    241
  • trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp

    r189082 r189086  
    158158    if (ownerExecutable()->neverInline())
    159159        out.print(" (NeverInline)");
     160    if (ownerExecutable()->neverOptimize())
     161        out.print(" (NeverOptimize)");
    160162    if (ownerExecutable()->didTryToEnterInLoop())
    161163        out.print(" (DidTryToEnterInLoop)");
  • trunk/Source/JavaScriptCore/dfg/DFGCapabilities.cpp

    r189082 r189086  
    5151{
    5252    return isSupported()
    53         && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount();
     53        && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount()
     54        && codeBlock->ownerExecutable()->isOkToOptimize();
    5455}
    5556bool mightCompileProgram(CodeBlock* codeBlock)
    5657{
    5758    return isSupported()
    58         && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount();
     59        && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount()
     60        && codeBlock->ownerExecutable()->isOkToOptimize();
    5961}
    6062bool mightCompileFunctionForCall(CodeBlock* codeBlock)
    6163{
    6264    return isSupported()
    63         && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount();
     65        && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount()
     66        && codeBlock->ownerExecutable()->isOkToOptimize();
    6467}
    6568bool mightCompileFunctionForConstruct(CodeBlock* codeBlock)
    6669{
    6770    return isSupported()
    68         && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount();
     71        && codeBlock->instructionCount() <= Options::maximumOptimizationCandidateInstructionCount()
     72        && codeBlock->ownerExecutable()->isOkToOptimize();
    6973}
    7074
  • trunk/Source/JavaScriptCore/jsc.cpp

    r189071 r189086  
    474474static EncodedJSValue JSC_HOST_CALL functionPreciseTime(ExecState*);
    475475static EncodedJSValue JSC_HOST_CALL functionNeverInlineFunction(ExecState*);
     476static EncodedJSValue JSC_HOST_CALL functionNoDFG(ExecState*);
    476477static EncodedJSValue JSC_HOST_CALL functionOptimizeNextInvocation(ExecState*);
    477478static EncodedJSValue JSC_HOST_CALL functionNumberOfDFGCompiles(ExecState*);
     
    632633        addFunction(vm, "neverInlineFunction", functionNeverInlineFunction, 1);
    633634        addFunction(vm, "noInline", functionNeverInlineFunction, 1);
     635        addFunction(vm, "noDFG", functionNoDFG, 1);
    634636        addFunction(vm, "numberOfDFGCompiles", functionNumberOfDFGCompiles, 1);
    635637        addFunction(vm, "optimizeNextInvocation", functionOptimizeNextInvocation, 1);
     
    11781180{
    11791181    return JSValue::encode(setNeverInline(exec));
     1182}
     1183
     1184EncodedJSValue JSC_HOST_CALL functionNoDFG(ExecState* exec)
     1185{
     1186    return JSValue::encode(setNeverOptimize(exec));
    11801187}
    11811188
  • trunk/Source/JavaScriptCore/runtime/Executable.h

    r189082 r189086  
    375375       
    376376    void setNeverInline(bool value) { m_neverInline = value; }
     377    void setNeverOptimize(bool value) { m_neverOptimize = value; }
    377378    void setDidTryToEnterInLoop(bool value) { m_didTryToEnterInLoop = value; }
    378379    bool neverInline() const { return m_neverInline; }
     380    bool neverOptimize() const { return m_neverOptimize; }
    379381    bool didTryToEnterInLoop() const { return m_didTryToEnterInLoop; }
    380382    bool isInliningCandidate() const { return !neverInline(); }
     383    bool isOkToOptimize() const { return !neverOptimize(); }
    381384   
    382385    bool* addressOfDidTryToEnterInLoop() { return &m_didTryToEnterInLoop; }
     
    432435    bool m_hasCapturedVariables;
    433436    bool m_neverInline;
     437    bool m_neverOptimize { false };
    434438    bool m_didTryToEnterInLoop;
    435439    int m_overrideLineNumber;
  • trunk/Source/JavaScriptCore/runtime/TestRunnerUtils.cpp

    r168406 r189086  
    8484}
    8585
     86JSValue setNeverOptimize(JSValue theFunctionValue)
     87{
     88    if (FunctionExecutable* executable = getExecutableForFunction(theFunctionValue))
     89        executable->setNeverOptimize(true);
     90   
     91    return jsUndefined();
     92}
     93
    8694JSValue optimizeNextInvocation(JSValue theFunctionValue)
    8795{
     
    110118}
    111119
     120JSValue setNeverOptimize(ExecState* exec)
     121{
     122    if (exec->argumentCount() < 1)
     123        return jsUndefined();
     124    return setNeverOptimize(exec->uncheckedArgument(0));
     125}
     126
    112127JSValue optimizeNextInvocation(ExecState* exec)
    113128{
  • trunk/Source/JavaScriptCore/runtime/TestRunnerUtils.h

    r186605 r189086  
    3939JS_EXPORT_PRIVATE JSValue numberOfDFGCompiles(JSValue function);
    4040JS_EXPORT_PRIVATE JSValue setNeverInline(JSValue function);
     41JS_EXPORT_PRIVATE JSValue setNeverOptimize(JSValue function);
    4142JS_EXPORT_PRIVATE JSValue optimizeNextInvocation(JSValue function);
    4243
    4344JS_EXPORT_PRIVATE JSValue numberOfDFGCompiles(ExecState*);
    4445JS_EXPORT_PRIVATE JSValue setNeverInline(ExecState*);
     46JS_EXPORT_PRIVATE JSValue setNeverOptimize(ExecState*);
    4547JS_EXPORT_PRIVATE JSValue optimizeNextInvocation(ExecState*);
    4648
Note: See TracChangeset for help on using the changeset viewer.