Ignore:
Timestamp:
Feb 10, 2014, 6:41:46 PM (12 years ago)
Author:
[email protected]
Message:

FTL should support ToThis
https://bugs.webkit.org/show_bug.cgi?id=127751

Reviewed by Oliver Hunt.

  • ftl/FTLCapabilities.cpp:

(JSC::FTL::canCompile):

  • ftl/FTLIntrinsicRepository.h:
  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileToThis):

  • tests/stress/to-this-polymorphic.js: Added.

(foo):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp

    r163844 r163851  
    304304            compilePhantom();
    305305            break;
     306        case ToThis:
     307            compileToThis();
     308            break;
    306309        case ValueAdd:
    307310            compileValueAdd();
     
    888891    {
    889892        DFG_NODE_DO_TO_CHILDREN(m_graph, m_node, speculate);
     893    }
     894   
     895    void compileToThis()
     896    {
     897        LValue value = lowJSValue(m_node->child1());
     898       
     899        LBasicBlock isCellCase = FTL_NEW_BLOCK(m_out, ("ToThis is cell case"));
     900        LBasicBlock slowCase = FTL_NEW_BLOCK(m_out, ("ToThis slow case"));
     901        LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("ToThis continuation"));
     902       
     903        m_out.branch(isCell(value), isCellCase, slowCase);
     904       
     905        LBasicBlock lastNext = m_out.appendTo(isCellCase, slowCase);
     906        ValueFromBlock fastResult = m_out.anchor(value);
     907        m_out.branch(isType(value, FinalObjectType), continuation, slowCase);
     908       
     909        m_out.appendTo(slowCase, continuation);
     910        J_JITOperation_EJ function;
     911        if (m_graph.isStrictModeFor(m_node->codeOrigin))
     912            function = operationToThisStrict;
     913        else
     914            function = operationToThis;
     915        ValueFromBlock slowResult = m_out.anchor(
     916            vmCall(m_out.operation(function), m_callFrame, value));
     917        m_out.jump(continuation);
     918       
     919        m_out.appendTo(continuation, lastNext);
     920        setJSValue(m_out.phi(m_out.int64, fastResult, slowResult));
    890921    }
    891922   
Note: See TracChangeset for help on using the changeset viewer.