Ignore:
Timestamp:
Sep 7, 2013, 9:08:01 PM (12 years ago)
Author:
[email protected]
Message:

FTL should support typed array PutByVal
https://bugs.webkit.org/show_bug.cgi?id=120972

Reviewed by Oliver Hunt.

Due to increased FTL coverage, this revealed a bug in LICM where we were trying to
have AI execute the tail of a block that !cfaDidFinish. We don't need to execute AI
for such blocks since LICM will bail for them anyway, and AI asserts that cfaDidFinish
is true.

  • dfg/DFGLICMPhase.cpp:

(JSC::DFG::LICMPhase::attemptHoist):

  • ftl/FTLAbbreviations.h:

(JSC::FTL::buildFPToUI):

  • ftl/FTLCapabilities.cpp:

(JSC::FTL::canCompile):

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

(JSC::FTL::LowerDFGToLLVM::compilePutByVal):
(JSC::FTL::LowerDFGToLLVM::doubleToInt32):
(JSC::FTL::LowerDFGToLLVM::doubleToUInt32):

  • ftl/FTLOutput.h:

(JSC::FTL::Output::fpToUInt):
(JSC::FTL::Output::fpToUInt32):
(JSC::FTL::Output::store8):
(JSC::FTL::Output::store16):
(JSC::FTL::Output::storeFloat):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ftl/FTLOutput.h

    r155260 r155281  
    175175    LValue zeroExt(LValue value, LType type) { return buildZExt(m_builder, value, type); }
    176176    LValue fpToInt(LValue value, LType type) { return buildFPToSI(m_builder, value, type); }
     177    LValue fpToUInt(LValue value, LType type) { return buildFPToUI(m_builder, value, type); }
    177178    LValue fpToInt32(LValue value) { return fpToInt(value, int32); }
     179    LValue fpToUInt32(LValue value) { return fpToUInt(value, int32); }
    178180    LValue intToFP(LValue value, LType type) { return buildSIToFP(m_builder, value, type); }
    179181    LValue intToDouble(LValue value) { return intToFP(value, doubleType); }
     
    208210    LValue loadFloat(TypedPointer pointer) { return load(pointer, refFloat); }
    209211    LValue loadDouble(TypedPointer pointer) { return load(pointer, refDouble); }
     212    void store8(LValue value, TypedPointer pointer) { store(value, pointer, ref8); }
     213    void store16(LValue value, TypedPointer pointer) { store(value, pointer, ref16); }
    210214    void store32(LValue value, TypedPointer pointer) { store(value, pointer, ref32); }
    211215    void store64(LValue value, TypedPointer pointer) { store(value, pointer, ref64); }
    212216    void storePtr(LValue value, TypedPointer pointer) { store(value, pointer, refPtr); }
     217    void storeFloat(LValue value, TypedPointer pointer) { store(value, pointer, refFloat); }
    213218    void storeDouble(LValue value, TypedPointer pointer) { store(value, pointer, refDouble); }
    214219
Note: See TracChangeset for help on using the changeset viewer.