Changeset 230549 in webkit


Ignore:
Timestamp:
Apr 11, 2018 3:09:09 PM (6 years ago)
Author:
mark.lam@apple.com
Message:

Replace CompactJITCodeMap with JITCodeMap.
https://bugs.webkit.org/show_bug.cgi?id=184512
<rdar://problem/35391728>

Reviewed by Filip Pizlo.

  • CMakeLists.txt:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • bytecode/CodeBlock.h:

(JSC::CodeBlock::setJITCodeMap):
(JSC::CodeBlock::jitCodeMap const):
(JSC::CodeBlock::jitCodeMap): Deleted.

  • dfg/DFGOSRExit.cpp:

(JSC::DFG::OSRExit::executeOSRExit):

  • dfg/DFGOSRExitCompilerCommon.cpp:

(JSC::DFG::adjustAndJumpToTarget):

  • jit/AssemblyHelpers.cpp:

(JSC::AssemblyHelpers::decodedCodeMapFor): Deleted.

  • jit/AssemblyHelpers.h:
  • jit/CompactJITCodeMap.h: Removed.
  • jit/JIT.cpp:

(JSC::JIT::link):

  • jit/JITCodeMap.h: Added.

(JSC::JITCodeMap::Entry::Entry):
(JSC::JITCodeMap::Entry::bytecodeIndex const):
(JSC::JITCodeMap::Entry::codeLocation):
(JSC::JITCodeMap::append):
(JSC::JITCodeMap::finish):
(JSC::JITCodeMap::find const):
(JSC::JITCodeMap::operator bool const):

  • llint/LLIntSlowPaths.cpp:

(JSC::LLInt::LLINT_SLOW_PATH_DECL):

Location:
trunk/Source/JavaScriptCore
Files:
1 added
1 deleted
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/CMakeLists.txt

    r230294 r230549  
    616616    jit/AssemblyHelpers.h
    617617    jit/CCallHelpers.h
    618     jit/CompactJITCodeMap.h
    619618    jit/ExecutableAllocator.h
    620619    jit/FPRInfo.h
     
    623622    jit/JITAllocator.h
    624623    jit/JITCode.h
     624    jit/JITCodeMap.h
    625625    jit/JITCompilationEffort.h
    626626    jit/JITMathICForwards.h
  • trunk/Source/JavaScriptCore/ChangeLog

    r230543 r230549  
     12018-04-11  Mark Lam  <mark.lam@apple.com>
     2
     3        Replace CompactJITCodeMap with JITCodeMap.
     4        https://bugs.webkit.org/show_bug.cgi?id=184512
     5        <rdar://problem/35391728>
     6
     7        Reviewed by Filip Pizlo.
     8
     9        * CMakeLists.txt:
     10        * JavaScriptCore.xcodeproj/project.pbxproj:
     11        * bytecode/CodeBlock.h:
     12        (JSC::CodeBlock::setJITCodeMap):
     13        (JSC::CodeBlock::jitCodeMap const):
     14        (JSC::CodeBlock::jitCodeMap): Deleted.
     15        * dfg/DFGOSRExit.cpp:
     16        (JSC::DFG::OSRExit::executeOSRExit):
     17        * dfg/DFGOSRExitCompilerCommon.cpp:
     18        (JSC::DFG::adjustAndJumpToTarget):
     19        * jit/AssemblyHelpers.cpp:
     20        (JSC::AssemblyHelpers::decodedCodeMapFor): Deleted.
     21        * jit/AssemblyHelpers.h:
     22        * jit/CompactJITCodeMap.h: Removed.
     23        * jit/JIT.cpp:
     24        (JSC::JIT::link):
     25        * jit/JITCodeMap.h: Added.
     26        (JSC::JITCodeMap::Entry::Entry):
     27        (JSC::JITCodeMap::Entry::bytecodeIndex const):
     28        (JSC::JITCodeMap::Entry::codeLocation):
     29        (JSC::JITCodeMap::append):
     30        (JSC::JITCodeMap::finish):
     31        (JSC::JITCodeMap::find const):
     32        (JSC::JITCodeMap::operator bool const):
     33        * llint/LLIntSlowPaths.cpp:
     34        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
     35
    1362018-04-11  Yusuke Suzuki  <utatane.tea@gmail.com>
    237
  • trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r230543 r230549  
    550550                0FD79A2D1EBBBDBB00DA88D3 /* Synchronousness.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD79A2C1EBBBDB200DA88D3 /* Synchronousness.h */; settings = {ATTRIBUTES = (Private, ); }; };
    551551                0FD81AD3154FB4F000983E72 /* DFGDominators.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD81AD0154FB4EB00983E72 /* DFGDominators.h */; };
    552                 0FD82E39141AB14D00179C94 /* CompactJITCodeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
    553552                0FD82E54141DAEEE00179C94 /* SpeculatedType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E4F141DAEA100179C94 /* SpeculatedType.h */; settings = {ATTRIBUTES = (Private, ); }; };
    554553                0FD82E57141DAF1000179C94 /* DFGOSREntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E53141DAEDE00179C94 /* DFGOSREntry.h */; };
     
    17561755                FE3A06BE1C11041200390FDD /* JITLeftShiftGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3A06B71C1103D900390FDD /* JITLeftShiftGenerator.h */; };
    17571756                FE3A06C01C11041A00390FDD /* JITRightShiftGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3A06B91C1103D900390FDD /* JITRightShiftGenerator.h */; };
     1757                FE476FF4207E85D50093CA2D /* JITCodeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FE476FF3207E85D40093CA2D /* JITCodeMap.h */; settings = {ATTRIBUTES = (Private, ); }; };
    17581758                FE48E6381EB118D2005D7A96 /* ObjectInitializationScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48E6361EB1188F005D7A96 /* ObjectInitializationScope.h */; settings = {ATTRIBUTES = (Private, ); }; };
    17591759                FE4BFF2C1AD476E700088F87 /* FunctionOverrides.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4BFF2A1AD476E700088F87 /* FunctionOverrides.h */; };
     
    27102710                0FD82E1E14172C2F00179C94 /* DFGCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGCapabilities.cpp; path = dfg/DFGCapabilities.cpp; sourceTree = "<group>"; };
    27112711                0FD82E1F14172C2F00179C94 /* DFGCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGCapabilities.h; path = dfg/DFGCapabilities.h; sourceTree = "<group>"; };
    2712                 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompactJITCodeMap.h; sourceTree = "<group>"; };
    27132712                0FD82E4F141DAEA100179C94 /* SpeculatedType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeculatedType.h; sourceTree = "<group>"; };
    27142713                0FD82E52141DAEDE00179C94 /* DFGOSREntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGOSREntry.cpp; path = dfg/DFGOSREntry.cpp; sourceTree = "<group>"; };
     
    46814680                FE3A06B91C1103D900390FDD /* JITRightShiftGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITRightShiftGenerator.h; sourceTree = "<group>"; };
    46824681                FE42388F1BE18C1200514737 /* JITSubGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITSubGenerator.cpp; sourceTree = "<group>"; };
     4682                FE476FF3207E85D40093CA2D /* JITCodeMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITCodeMap.h; sourceTree = "<group>"; };
    46834683                FE48E6361EB1188F005D7A96 /* ObjectInitializationScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectInitializationScope.h; sourceTree = "<group>"; };
    46844684                FE48E6371EB118AD005D7A96 /* ObjectInitializationScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjectInitializationScope.cpp; sourceTree = "<group>"; };
     
    54785478                                DC17E8161C9C802B008A6AB3 /* CCallHelpers.cpp */,
    54795479                                0F24E53D17EA9F5900ABB217 /* CCallHelpers.h */,
    5480                                 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */,
    54815480                                0FF054F71AC35B4400E5BE57 /* ExecutableAllocationFuzz.cpp */,
    54825481                                0FF054F81AC35B4400E5BE57 /* ExecutableAllocationFuzz.h */,
     
    55115510                                0F8F94431667635200D61971 /* JITCode.cpp */,
    55125511                                86CCEFDD0F413F8900FD7F9E /* JITCode.h */,
     5512                                FE476FF3207E85D40093CA2D /* JITCodeMap.h */,
    55135513                                0F0776BD14FF002800102332 /* JITCompilationEffort.h */,
    55145514                                0FAF7EFA165BA919000C8455 /* JITDisassembler.cpp */,
     
    84188418                                0F15F15F14B7A73E005DE37D /* CommonSlowPaths.h in Headers */,
    84198419                                6553A33217A1F1EE008CF6F3 /* CommonSlowPathsExceptions.h in Headers */,
    8420                                 0FD82E39141AB14D00179C94 /* CompactJITCodeMap.h in Headers */,
    84218420                                A7E5A3A81797432D00E893C0 /* CompilationResult.h in Headers */,
    84228421                                0FDCE12A1FAFA85F006F3901 /* CompleteSubspace.h in Headers */,
     
    87388737                                E322E5A71DA644A8006E7709 /* FTLSnippetParams.h in Headers */,
    87398738                                0F235BD717178E1C00690C7F /* FTLStackmapArgumentList.h in Headers */,
     8739                                FE476FF4207E85D50093CA2D /* JITCodeMap.h in Headers */,
    87408740                                0FEA0A12170513DB00BB722C /* FTLState.h in Headers */,
    87418741                                A7FCC26D17A0B6AA00786D1A /* FTLSwitchCase.h in Headers */,
  • trunk/Source/JavaScriptCore/bytecode/CodeBlock.h

    r230129 r230549  
    3737#include "CodeOrigin.h"
    3838#include "CodeType.h"
    39 #include "CompactJITCodeMap.h"
    4039#include "CompilationResult.h"
    4140#include "ConcurrentJSLock.h"
     
    4948#include "Instruction.h"
    5049#include "JITCode.h"
     50#include "JITCodeMap.h"
    5151#include "JITMathICForwards.h"
    5252#include "JSCPoison.h"
     
    302302    void linkIncomingCall(ExecState* callerFrame, LLIntCallLinkInfo*);
    303303
    304     void setJITCodeMap(std::unique_ptr<CompactJITCodeMap> jitCodeMap)
     304    void setJITCodeMap(JITCodeMap&& jitCodeMap)
    305305    {
    306306        m_jitCodeMap = WTFMove(jitCodeMap);
    307307    }
    308     CompactJITCodeMap* jitCodeMap()
    309     {
    310         return m_jitCodeMap.get();
     308    const JITCodeMap& jitCodeMap() const
     309    {
     310        return m_jitCodeMap;
    311311    }
    312312   
     
    988988    std::unique_ptr<PCToCodeOriginMap> m_pcToCodeOriginMap;
    989989#endif
    990     std::unique_ptr<CompactJITCodeMap> m_jitCodeMap;
     990    JITCodeMap m_jitCodeMap;
    991991#if ENABLE(DFG_JIT)
    992992    // This is relevant to non-DFG code blocks that serve as the profiled code block
  • trunk/Source/JavaScriptCore/dfg/DFGOSRExit.cpp

    r230294 r230549  
    390390
    391391        CodeBlock* codeBlockForExit = baselineCodeBlockForOriginAndBaselineCodeBlock(exit.m_codeOrigin, baselineCodeBlock);
    392         Vector<BytecodeAndMachineOffset> decodedCodeMap;
    393         codeBlockForExit->jitCodeMap()->decode(decodedCodeMap);
    394 
    395         BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(decodedCodeMap, decodedCodeMap.size(), exit.m_codeOrigin.bytecodeIndex, BytecodeAndMachineOffset::getBytecodeIndex);
    396 
    397         ASSERT(mapping);
    398         ASSERT(mapping->m_bytecodeIndex == exit.m_codeOrigin.bytecodeIndex);
    399 
    400         void* jumpTarget = codeBlockForExit->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset);
     392        const JITCodeMap& codeMap = codeBlockForExit->jitCodeMap();
     393        CodeLocationLabel codeLocation = codeMap.find(exit.m_codeOrigin.bytecodeIndex);
     394        ASSERT(codeLocation);
     395
     396        PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlockForExit, exit.m_codeOrigin.bytecodeIndex);
     397        void* jumpTarget = codeLocation.retagged(locationTag, CodeEntryPtrTag).executableAddress();
    401398
    402399        // Compute the value recoveries.
  • trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp

    r230294 r230549  
    318318
    319319    CodeBlock* codeBlockForExit = jit.baselineCodeBlockFor(exit.m_codeOrigin);
    320     Vector<BytecodeAndMachineOffset>& decodedCodeMap = jit.decodedCodeMapFor(codeBlockForExit);
    321    
    322     BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(decodedCodeMap, decodedCodeMap.size(), exit.m_codeOrigin.bytecodeIndex, BytecodeAndMachineOffset::getBytecodeIndex);
    323    
    324     ASSERT(mapping);
    325     ASSERT(mapping->m_bytecodeIndex == exit.m_codeOrigin.bytecodeIndex);
    326 
     320    ASSERT(codeBlockForExit == codeBlockForExit->baselineVersion());
     321    ASSERT(codeBlockForExit->jitType() == JITCode::BaselineJIT);
     322    CodeLocationLabel codeLocation = codeBlockForExit->jitCodeMap().find(exit.m_codeOrigin.bytecodeIndex);
     323    ASSERT(codeLocation);
     324
     325    PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlockForExit, exit.m_codeOrigin.bytecodeIndex);
    327326    PtrTag exitTag = ptrTag(DFGOSRExitPtrTag, nextPtrTagID());
    328     void* jumpTarget = retagCodePtr(codeBlockForExit->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset), CodeEntryPtrTag, exitTag);
    329 
     327    void* jumpTarget = codeLocation.retagged(locationTag, exitTag).executableAddress();
    330328    jit.addPtr(AssemblyHelpers::TrustedImm32(JIT::stackPointerOffsetFor(codeBlockForExit) * sizeof(Register)), GPRInfo::callFrameRegister, AssemblyHelpers::stackPointerRegister);
    331329    if (exit.isExceptionHandler()) {
  • trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp

    r230516 r230549  
    4949   
    5050    return codeOrigin.inlineCallFrame->baselineCodeBlock->ownerExecutable();
    51 }
    52 
    53 Vector<BytecodeAndMachineOffset>& AssemblyHelpers::decodedCodeMapFor(CodeBlock* codeBlock)
    54 {
    55     ASSERT(codeBlock == codeBlock->baselineVersion());
    56     ASSERT(codeBlock->jitType() == JITCode::BaselineJIT);
    57     ASSERT(codeBlock->jitCodeMap());
    58    
    59     HashMap<CodeBlock*, Vector<BytecodeAndMachineOffset>>::AddResult result = m_decodedCodeMaps.add(codeBlock, Vector<BytecodeAndMachineOffset>());
    60    
    61     if (result.isNewEntry)
    62         codeBlock->jitCodeMap()->decode(result.iterator->value);
    63    
    64     return result.iterator->value;
    6551}
    6652
  • trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h

    r230517 r230549  
    15391539    void emitDumbVirtualCall(VM&, CallLinkInfo*);
    15401540   
    1541     Vector<BytecodeAndMachineOffset>& decodedCodeMapFor(CodeBlock*);
    1542 
    15431541    void makeSpaceOnStackForCCall();
    15441542    void reclaimSpaceOnStackForCCall();
     
    16621660    CodeBlock* m_codeBlock;
    16631661    CodeBlock* m_baselineCodeBlock;
    1664 
    1665     HashMap<CodeBlock*, Vector<BytecodeAndMachineOffset>> m_decodedCodeMaps;
    16661662};
    16671663
  • trunk/Source/JavaScriptCore/jit/JIT.cpp

    r230376 r230549  
    867867    }
    868868
    869     CompactJITCodeMap::Encoder jitCodeMapEncoder;
     869    JITCodeMap jitCodeMap;
    870870    for (unsigned bytecodeOffset = 0; bytecodeOffset < m_labels.size(); ++bytecodeOffset) {
    871         if (m_labels[bytecodeOffset].isSet())
    872             jitCodeMapEncoder.append(bytecodeOffset, patchBuffer.offsetOf(m_labels[bytecodeOffset]));
    873     }
    874     m_codeBlock->setJITCodeMap(jitCodeMapEncoder.finish());
     871        if (m_labels[bytecodeOffset].isSet()) {
     872            PtrTag tag = ptrTag(CodeEntryPtrTag, m_codeBlock, bytecodeOffset);
     873            jitCodeMap.append(bytecodeOffset, patchBuffer.locationOf(m_labels[bytecodeOffset], tag));
     874        }
     875    }
     876    jitCodeMap.finish();
     877    m_codeBlock->setJITCodeMap(WTFMove(jitCodeMap));
    875878
    876879    MacroAssemblerCodePtr withArityCheck = patchBuffer.locationOf(m_arityCheck, CodeEntryWithArityCheckPtrTag);
  • trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp

    r230376 r230549  
    443443
    444444    ASSERT(codeBlock->jitType() == JITCode::BaselineJIT);
    445    
    446     Vector<BytecodeAndMachineOffset> map;
    447     codeBlock->jitCodeMap()->decode(map);
    448     BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(map, map.size(), loopOSREntryBytecodeOffset, BytecodeAndMachineOffset::getBytecodeIndex);
    449     ASSERT(mapping);
    450     ASSERT(mapping->m_bytecodeIndex == loopOSREntryBytecodeOffset);
    451    
    452     void* jumpTarget = codeBlock->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset);
     445
     446    const JITCodeMap& codeMap = codeBlock->jitCodeMap();
     447    CodeLocationLabel codeLocation = codeMap.find(loopOSREntryBytecodeOffset);
     448    ASSERT(codeLocation);
     449
     450    PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlock, loopOSREntryBytecodeOffset);
     451    void* jumpTarget = codeLocation.retagged(locationTag, CodeEntryPtrTag).executableAddress();
    453452    ASSERT(jumpTarget);
    454453   
Note: See TracChangeset for help on using the changeset viewer.