⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286597 in webkit


Ignore:
Timestamp:
Dec 7, 2021, 8:56:04 AM (5 years ago)
Author:
commit-queue@webkit.org
Message:

Unreviewed, reverting r286502 and r286580.
https://bugs.webkit.org/show_bug.cgi?id=233930

Speedometer2 0.7% regression

Reverted changesets:

"Remove StructureIDBlob"
https://bugs.webkit.org/show_bug.cgi?id=233723
https://commits.webkit.org/r286502

"TypeInfo should be materializable from Structures as a single
load."
https://bugs.webkit.org/show_bug.cgi?id=233875
https://commits.webkit.org/r286580

Location:
trunk/Source/JavaScriptCore
Files:
1 added
15 edited

Legend:

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

    r286502 r286597  
    11871187    runtime/StructureChain.h
    11881188    runtime/StructureID.h
     1189    runtime/StructureIDBlob.h
    11891190    runtime/StructureInlines.h
    11901191    runtime/StructureRareData.h
  • trunk/Source/JavaScriptCore/ChangeLog

    r286592 r286597  
     12021-12-07  Commit Queue  <commit-queue@webkit.org>
     2
     3        Unreviewed, reverting r286502 and r286580.
     4        https://bugs.webkit.org/show_bug.cgi?id=233930
     5
     6        Speedometer2 0.7% regression
     7
     8        Reverted changesets:
     9
     10        "Remove StructureIDBlob"
     11        https://bugs.webkit.org/show_bug.cgi?id=233723
     12        https://commits.webkit.org/r286502
     13
     14        "TypeInfo should be materializable from Structures as a single
     15        load."
     16        https://bugs.webkit.org/show_bug.cgi?id=233875
     17        https://commits.webkit.org/r286580
     18
    1192021-12-07  Zan Dobersek  <zdobersek@igalia.com>
    220
  • trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r286502 r286597  
    853853                2A83638618D7D0EE0000EBCC /* EdenGCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A83638418D7D0EE0000EBCC /* EdenGCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; };
    854854                2A83638A18D7D0FE0000EBCC /* FullGCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; };
     855                2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */; settings = {ATTRIBUTES = (Private, ); }; };
    855856                2AABCDE718EF294200002096 /* GCLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AABCDE618EF294200002096 /* GCLogging.h */; settings = {ATTRIBUTES = (Private, ); }; };
    856857                2AACE63D18CA5A0300ED0191 /* GCActivityCallback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AACE63B18CA5A0300ED0191 /* GCActivityCallback.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    36323633                2A83638718D7D0FE0000EBCC /* FullGCActivityCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FullGCActivityCallback.cpp; sourceTree = "<group>"; };
    36333634                2A83638818D7D0FE0000EBCC /* FullGCActivityCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FullGCActivityCallback.h; sourceTree = "<group>"; };
     3635                2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StructureIDBlob.h; sourceTree = "<group>"; };
    36343636                2AABCDE618EF294200002096 /* GCLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GCLogging.h; sourceTree = "<group>"; };
    36353637                2AACE63A18CA5A0300ED0191 /* GCActivityCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GCActivityCallback.cpp; sourceTree = "<group>"; };
     
    80758077                                7E4EE7080EBB7963005934AA /* StructureChain.h */,
    80768078                                537FEEC82742BDA300C9EFEE /* StructureID.h */,
     8079                                2AAAA31018BD49D100394CC8 /* StructureIDBlob.h */,
    80778080                                0FD2C92316D01EE900C7803F /* StructureInlines.h */,
    80788081                                C2F0F2D016BAEEE900187C19 /* StructureRareData.cpp */,
     
    1015810161                                A54C2AB11C6544F200A18D78 /* HeapSnapshot.h in Headers */,
    1015910162                                A5311C361C77CEC500E6B1B6 /* HeapSnapshotBuilder.h in Headers */,
    10160                                 FE2CC9302756B2B9003F5AB8 /* HeapSubspaceTypes.h in Headers */,
    1016110163                                0FADE6731D4D23BE00768457 /* HeapUtil.h in Headers */,
    1016210164                                FE1BD0251E72053800134BC9 /* HeapVerifier.h in Headers */,
     
    1027510277                                E3BF1BAE238AAEDB003A1C2B /* IsoHeapCellType.h in Headers */,
    1027610278                                E3C8ED4323A1DBCB00131958 /* IsoInlinedHeapCellType.h in Headers */,
    10277                                 FE65B1512748601F00DB5B16 /* IsoInlinedHeapCellTypeInlines.h in Headers */,
    1027810279                                537FEED12742BDE100C9EFEE /* IsoMemoryAllocatorBase.h in Headers */,
    1027910280                                537FEECE2742BDE100C9EFEE /* IsoMemoryAllocatorBaseInlines.h in Headers */,
     
    1042610427                                E33F50791B84225700413856 /* JSInternalPromiseConstructor.h in Headers */,
    1042710428                                E33F50871B8449EF00413856 /* JSInternalPromiseConstructor.lut.h in Headers */,
     10429                                FE65B1512748601F00DB5B16 /* IsoInlinedHeapCellTypeInlines.h in Headers */,
    1042810430                                E33F50751B8421C000413856 /* JSInternalPromisePrototype.h in Headers */,
    1042910431                                A503FA1E188E0FB000110F14 /* JSJavaScriptCallFramePrototype.h in Headers */,
     
    1083110833                                7E4EE7090EBB7963005934AA /* StructureChain.h in Headers */,
    1083210834                                537FEEC92742BDA300C9EFEE /* StructureID.h in Headers */,
     10835                                2AAAA31218BD49D100394CC8 /* StructureIDBlob.h in Headers */,
    1083310836                                0FD2C92416D01EE900C7803F /* StructureInlines.h in Headers */,
    1083410837                                C2FE18A416BAEC4000AF3061 /* StructureRareData.h in Headers */,
     
    1095310956                                526AC4B71E977C5D003500E1 /* WasmCodeBlock.h in Headers */,
    1095410957                                E3BD2B7622F275020011765C /* WasmCompilationMode.h in Headers */,
     10958                                FE2CC9302756B2B9003F5AB8 /* HeapSubspaceTypes.h in Headers */,
    1095510959                                AD412B341E7B2E9E008AF157 /* WasmContext.h in Headers */,
    1095610960                                7593C898BE714A64BE93A6E7 /* WasmContextInlines.h in Headers */,
  • trunk/Source/JavaScriptCore/assembler/testmasm.cpp

    r286580 r286597  
    56145614        uint32_t structureID;
    56155615        uint8_t indexingType;
    5616         uint8_t cellState;
    56175616        JSType type;
    56185617    };
     
    56495648        uint32_t structureID;
    56505649        uint8_t indexingType;
    5651         uint8_t cellState;
    56525650        JSType type;
    56535651    };
  • trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.cpp

    r286580 r286597  
    7979    // Make sure that our explicit assumptions about the StructureIDBlob match reality.
    8080    RELEASE_ASSERT(!(JSCell_indexingTypeAndMisc.offset() & (sizeof(int32_t) - 1)));
    81     RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 1 == JSCell_cellState.offset());
    82     RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 2 == JSCell_typeInfoType.offset());
    83     RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 3 == JSCell_typeInfoFlags.offset());
     81    RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 1 == JSCell_typeInfoType.offset());
     82    RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 2 == JSCell_typeInfoFlags.offset());
     83    RELEASE_ASSERT(JSCell_indexingTypeAndMisc.offset() + 3 == JSCell_cellState.offset());
    8484
    8585    JSCell_structureID.changeParent(&JSCell_header);
  • trunk/Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h

    r286502 r286597  
    150150    macro(Structure_previousOrRareData, Structure::previousOrRareDataOffset()) \
    151151    macro(Structure_prototype, Structure::prototypeOffset()) \
     152    macro(Structure_structureID, Structure::structureIDOffset()) \
    152153    macro(StructureRareData_cachedKeys, StructureRareData::offsetOfCachedPropertyNames(CachedPropertyNamesKind::Keys)) \
    153154    macro(StructureRareData_cachedGetOwnPropertyNames, StructureRareData::offsetOfCachedPropertyNames(CachedPropertyNamesKind::GetOwnPropertyNames)) \
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp

    r286572 r286597  
    1680316803        }
    1680416804
    16805         LValue id = m_out.bitAnd(m_out.castToInt32(structure), m_out.constInt32(structureIDMask));
     16805        LValue id = m_out.load32(structure, m_heaps.Structure_structureID);
    1680616806        m_out.store32(id, object, m_heaps.JSCell_structureID);
    1680716807
  • trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h

    r286572 r286597  
    15881588    void emitStoreStructureWithTypeInfo(RegisterID structure, RegisterID dest, RegisterID scratch)
    15891589    {
     1590#if USE(JSVALUE64)
     1591        load64(MacroAssembler::Address(structure, Structure::structureIDOffset()), scratch);
     1592        store64(scratch, MacroAssembler::Address(dest, JSCell::structureIDOffset()));
     1593#else
    15901594        // Store all the info flags using a single 32-bit wide load and store.
    15911595        load32(MacroAssembler::Address(structure, Structure::indexingModeIncludingHistoryOffset()), scratch);
    15921596        store32(scratch, MacroAssembler::Address(dest, JSCell::indexingTypeAndMiscOffset()));
    15931597
    1594 #if CPU(ADDRESS64)
    1595         and32(MacroAssembler::TrustedImm32(structureIDMask), structure, scratch);
    1596         store32(scratch, MacroAssembler::Address(dest, JSCell::structureIDOffset()));
    1597 #else
    15981598        // Store the StructureID
    15991599        storePtr(structure, MacroAssembler::Address(dest, JSCell::structureIDOffset()));
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp

    r286502 r286597  
    24652465            emitGetVirtualRegisterPayload(scope, scopeGPR);
    24662466            addSlowCase(branchTestPtr(Zero, scratchGPR1));
    2467             and32(TrustedImm32(structureIDMask), scratchGPR1);
     2467            load32(Address(scratchGPR1, Structure::structureIDOffset()), scratchGPR1);
    24682468            addSlowCase(branch32(NotEqual, Address(scopeGPR, JSCell::structureIDOffset()), scratchGPR1));
    24692469
  • trunk/Source/JavaScriptCore/runtime/JSCell.h

    r286580 r286597  
    267267    StructureID m_structureID;
    268268    IndexingType m_indexingTypeAndMisc; // DO NOT store to this field. Always CAS.
    269     CellState m_cellState;
    270269    JSType m_type;
    271270    TypeInfo::InlineTypeFlags m_flags;
     271    CellState m_cellState;
    272272};
    273273
  • trunk/Source/JavaScriptCore/runtime/JSCellInlines.h

    r286580 r286597  
    5959    : m_structureID(structure->id())
    6060    , m_indexingTypeAndMisc(structure->indexingModeIncludingHistory())
    61     , m_cellState(CellState::DefinitelyWhite)
    6261    , m_type(structure->typeInfo().type())
    6362    , m_flags(structure->typeInfo().inlineTypeFlags())
     63    , m_cellState(CellState::DefinitelyWhite)
    6464{
    6565    ASSERT(!isCompilationThread());
  • trunk/Source/JavaScriptCore/runtime/Structure.cpp

    r286502 r286597  
    198198Structure::Structure(VM& vm, JSGlobalObject* globalObject, JSValue prototype, const TypeInfo& typeInfo, const ClassInfo* classInfo, IndexingType indexingType, unsigned inlineCapacity)
    199199    : JSCell(vm, vm.structureStructure.get())
    200     , m_cellHeaderIndexingModeIncludingHistory(indexingType)
    201     , m_cellHeaderType(typeInfo.type())
    202     , m_cellHeaderInlineTypeFlags(typeInfo.inlineTypeFlags())
     200    , m_blob(StructureID::encode(this), indexingType, typeInfo)
    203201    , m_outOfLineTypeFlags(typeInfo.outOfLineTypeFlags())
    204202    , m_inlineCapacity(inlineCapacity)
     
    241239Structure::Structure(VM& vm, CreatingEarlyCellTag)
    242240    : JSCell(CreatingEarlyCell)
    243     , m_cellHeaderIndexingModeIncludingHistory(NoIndexingShape)
    244     , m_cellHeaderType(StructureType)
    245241    , m_inlineCapacity(0)
    246242    , m_bitField(0)
     
    269265 
    270266    TypeInfo typeInfo = TypeInfo(StructureType, StructureFlags);
    271     m_cellHeaderInlineTypeFlags = typeInfo.inlineTypeFlags();
     267    m_blob = StructureIDBlob(StructureID::encode(this), 0, typeInfo);
    272268    m_outOfLineTypeFlags = typeInfo.outOfLineTypeFlags();
    273269
     
    279275Structure::Structure(VM& vm, Structure* previous, DeferredStructureTransitionWatchpointFire* deferred)
    280276    : JSCell(vm, vm.structureStructure.get())
    281     , m_cellHeaderIndexingModeIncludingHistory(previous->m_cellHeaderIndexingModeIncludingHistory)
    282     , m_cellHeaderType(previous->m_cellHeaderType)
    283     , m_cellHeaderInlineTypeFlags(previous->m_cellHeaderInlineTypeFlags)
    284     , m_outOfLineTypeFlags(previous->m_outOfLineTypeFlags)
    285277    , m_inlineCapacity(previous->m_inlineCapacity)
    286278    , m_bitField(0)
     
    309301    setMaxOffset(vm, invalidOffset);
    310302 
     303    TypeInfo typeInfo = previous->typeInfo();
     304    m_blob = StructureIDBlob(StructureID::encode(this), previous->indexingModeIncludingHistory(), typeInfo);
     305    m_outOfLineTypeFlags = typeInfo.outOfLineTypeFlags();
     306
    311307    ASSERT(!previous->typeInfo().structureIsImmortal());
    312308    setPreviousID(vm, previous);
     
    534530    }
    535531
    536     transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite;
     532    transition->m_blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);
    537533    transition->m_transitionPropertyName = propertyName.uid();
    538534    transition->setTransitionPropertyAttributes(attributes);
     
    631627    }
    632628
    633     transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite;
     629    transition->m_blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);
    634630    transition->m_transitionPropertyName = propertyName.uid();
    635631    transition->setTransitionKind(TransitionKind::PropertyDeletion);
     
    725721    }
    726722
    727     transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory() & ~CopyOnWrite;
     723    transition->m_blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory() & ~CopyOnWrite);
    728724    transition->m_transitionPropertyName = propertyName.uid();
    729725    transition->setTransitionPropertyAttributes(attributes);
     
    823819    Structure* transition = create(vm, structure);
    824820    transition->setTransitionKind(transitionKind);
    825     transition->m_cellHeaderIndexingModeIncludingHistory = indexingModeIncludingHistory;
     821    transition->m_blob.setIndexingModeIncludingHistory(indexingModeIncludingHistory);
    826822   
    827823    if (preventsExtensions(transitionKind))
     
    15511547
    15521548    transition->m_cachedPrototypeChain.setMayBeNull(vm, transition, structure->m_cachedPrototypeChain.get());
    1553     transition->m_cellHeaderIndexingModeIncludingHistory = structure->indexingModeIncludingHistory();
     1549    transition->m_blob.setIndexingModeIncludingHistory(structure->indexingModeIncludingHistory());
    15541550    transition->m_transitionPropertyName = &brand->uid();
    15551551    transition->setTransitionPropertyAttributes(0);
  • trunk/Source/JavaScriptCore/runtime/Structure.h

    r286580 r286597  
    3838#include "PropertyOffset.h"
    3939#include "PutPropertySlot.h"
     40#include "StructureIDBlob.h"
    4041#include "StructureRareData.h"
    4142#include "StructureTransitionTable.h"
     
    165166
    166167public:
    167     StructureID id() const { return StructureID::encode(this); }
    168     int32_t objectInitializationBlob() const { return *reinterpret_cast_ptr<const uint32_t*>(&m_cellHeaderIndexingModeIncludingHistory); }
    169     int64_t idBlob() const { return static_cast<uint64_t>(objectInitializationBlob()) << 32 | id().bits(); }
     168    StructureID id() const { ASSERT(m_blob.structureID() == StructureID::encode(this)); return m_blob.structureID(); }
     169    int32_t objectInitializationBlob() const { return m_blob.blobExcludingStructureID(); }
     170    int64_t idBlob() const { return m_blob.blob(); }
    170171
    171172    bool isProxy() const
    172173    {
    173         return m_cellHeaderType == PureForwardingProxyType || m_cellHeaderType == ProxyObjectType;
     174        JSType type = m_blob.type();
     175        return type == PureForwardingProxyType || type == ProxyObjectType;
    174176    }
    175177
     
    262264   
    263265    // Type accessors.
    264 #if CPU(NEEDS_ALIGNED_ACCESS)
    265     TypeInfo typeInfo() const { return TypeInfo(m_cellHeaderType, m_cellHeaderInlineTypeFlags, m_outOfLineTypeFlags); }
    266 #else
    267     TypeInfo typeInfo() const { return *reinterpret_cast_ptr<const TypeInfo*>(&m_cellHeaderType); }
    268 #endif
     266    TypeInfo typeInfo() const { return m_blob.typeInfo(m_outOfLineTypeFlags); }
    269267    bool isObject() const { return typeInfo().isObject(); }
    270268protected:
     
    273271public:
    274272
    275     IndexingType indexingType() const { return indexingModeIncludingHistory() & AllWritableArrayTypes; }
    276     IndexingType indexingMode() const  { return indexingModeIncludingHistory() & AllArrayTypes; }
     273    IndexingType indexingType() const { return m_blob.indexingModeIncludingHistory() & AllWritableArrayTypes; }
     274    IndexingType indexingMode() const  { return m_blob.indexingModeIncludingHistory() & AllArrayTypes; }
    277275    Dependency fencedIndexingMode(IndexingType& indexingType)
    278276    {
    279         Dependency dependency = Dependency::loadAndFence(&m_cellHeaderIndexingModeIncludingHistory, indexingType);
     277        Dependency dependency = m_blob.fencedIndexingModeIncludingHistory(indexingType);
    280278        indexingType &= AllArrayTypes;
    281279        return dependency;
    282280    }
    283     IndexingType indexingModeIncludingHistory() const { return m_cellHeaderIndexingModeIncludingHistory; }
     281    IndexingType indexingModeIncludingHistory() const { return m_blob.indexingModeIncludingHistory(); }
    284282       
    285283    inline bool mayInterceptIndexedAccesses() const;
     
    560558    const ClassInfo* classInfo() const { return m_classInfo; }
    561559
     560    static ptrdiff_t structureIDOffset()
     561    {
     562        return OBJECT_OFFSETOF(Structure, m_blob) + StructureIDBlob::structureIDOffset();
     563    }
     564
    562565    static ptrdiff_t prototypeOffset()
    563566    {
     
    582585    static ptrdiff_t indexingModeIncludingHistoryOffset()
    583586    {
    584         return OBJECT_OFFSETOF(Structure, m_cellHeaderIndexingModeIncludingHistory);
     587        return OBJECT_OFFSETOF(Structure, m_blob) + StructureIDBlob::indexingModeIncludingHistoryOffset();
    585588    }
    586589   
     
    858861
    859862    // These need to be properly aligned at the beginning of the 'Structure'
    860     // part of the object. And need to match the order of the equivalent properties in
    861     // JSCell.
    862     IndexingType m_cellHeaderIndexingModeIncludingHistory;
    863     const CellState m_cellHeaderDefaultCellState { CellState::DefinitelyWhite };
    864     const JSType m_cellHeaderType;
    865     TypeInfo::InlineTypeFlags m_cellHeaderInlineTypeFlags;
     863    // part of the object.
     864    StructureIDBlob m_blob;
    866865    TypeInfo::OutOfLineTypeFlags m_outOfLineTypeFlags;
    867866
  • trunk/Source/JavaScriptCore/runtime/StructureInlines.h

    r286502 r286597  
    257257        return true;
    258258   
    259     if (!isTypedView(typedArrayTypeForType(m_cellHeaderType)))
     259    if (!isTypedView(typedArrayTypeForType(m_blob.type())))
    260260        return false;
    261261
  • trunk/Source/JavaScriptCore/tools/VMInspectorInlines.h

    r286502 r286597  
    4646    const ClassInfo* classInfo = structure->classInfo();
    4747    JSType cellType = cell->type();
    48     AUDIT_VERIFY(action, verifier, cellType == structure->typeInfo().type(), cell, cellType, structure->typeInfo().type());
     48    AUDIT_VERIFY(action, verifier, cellType == structure->m_blob.type(), cell, cellType, structure->m_blob.type());
    4949
    5050    size_t size = cellSize(vm, cell);
Note: See TracChangeset for help on using the changeset viewer.