Changeset 267624 in webkit


Ignore:
Timestamp:
Sep 26, 2020 12:52:14 PM (4 years ago)
Author:
ysuzuki@apple.com
Message:

Unreviewed, follow-up after r267373 to resolve post-commit review comments
https://bugs.webkit.org/show_bug.cgi?id=216667

  • dfg/DFGAbstractInterpreterInlines.h:

(JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

  • dfg/DFGConstantFoldingPhase.cpp:

(JSC::DFG::ConstantFoldingPhase::foldConstants):

  • dfg/DFGOperations.cpp:
  • dfg/DFGOperations.h:
  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • ftl/FTLLowerDFGToB3.cpp:

(JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
(JSC::FTL::DFG::LowerDFGToB3::compileNormalizeMapKey):

  • runtime/HashMapImpl.h:

(JSC::jsMapHash):

Location:
trunk/Source/JavaScriptCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r267603 r267624  
     12020-09-26  Yusuke Suzuki  <ysuzuki@apple.com>
     2
     3        Unreviewed, follow-up after r267373 to resolve post-commit review comments
     4        https://bugs.webkit.org/show_bug.cgi?id=216667
     5
     6        * dfg/DFGAbstractInterpreterInlines.h:
     7        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
     8        * dfg/DFGConstantFoldingPhase.cpp:
     9        (JSC::DFG::ConstantFoldingPhase::foldConstants):
     10        * dfg/DFGOperations.cpp:
     11        * dfg/DFGOperations.h:
     12        * dfg/DFGSpeculativeJIT.cpp:
     13        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
     14        * dfg/DFGSpeculativeJIT64.cpp:
     15        (JSC::DFG::SpeculativeJIT::compile):
     16        * ftl/FTLLowerDFGToB3.cpp:
     17        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
     18        (JSC::FTL::DFG::LowerDFGToB3::compileNormalizeMapKey):
     19        * runtime/HashMapImpl.h:
     20        (JSC::jsMapHash):
     21
    1222020-09-25  Ross Kirsling  <ross.kirsling@sony.com>
    223
  • trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h

    r267489 r267624  
    13821382        }
    13831383
    1384         SpeculatedType typeMaybeNormalized = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
    1385         if (!(forNode(node->child1()).m_type & typeMaybeNormalized)) {
     1384        SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
     1385        if (!(forNode(node->child1()).m_type & typesNeedingNormalization)) {
    13861386            m_state.setShouldTryConstantFolding(true);
    13871387            forNode(node) = forNode(node->child1());
  • trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp

    r267489 r267624  
    910910
    911911            case NormalizeMapKey: {
    912                 SpeculatedType typeMaybeNormalized = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
    913                 if (m_state.forNode(node->child1()).m_type & typeMaybeNormalized)
     912                SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
     913                if (m_state.forNode(node->child1()).m_type & typesNeedingNormalization)
    914914                    break;
    915915
  • trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp

    r267373 r267624  
    32133213}
    32143214
    3215 EncodedJSValue JIT_OPERATION operationNormalizeMapKey(VM* vmPointer, EncodedJSValue input)
    3216 {
    3217     VM& vm = *vmPointer;
    3218     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
    3219     JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
    3220     return JSValue::encode(normalizeMapKey(JSValue::decode(input)));
     3215EncodedJSValue JIT_OPERATION operationNormalizeMapKeyHeapBigInt(VM* vmPointer, JSBigInt* input)
     3216{
     3217    VM& vm = *vmPointer;
     3218    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
     3219    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
     3220    return JSValue::encode(normalizeMapKey(input));
    32213221}
    32223222
     
    32283228
    32293229    return toUCPUStrictInt32(jsMapHash(globalObject, vm, JSValue::decode(input)));
     3230}
     3231
     3232UCPUStrictInt32 JIT_OPERATION operationMapHashHeapBigInt(VM* vmPointer, JSBigInt* input)
     3233{
     3234    VM& vm = *vmPointer;
     3235    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
     3236    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
     3237
     3238    return toUCPUStrictInt32(jsMapHash(input));
    32303239}
    32313240
  • trunk/Source/JavaScriptCore/dfg/DFGOperations.h

    r267518 r267624  
    3535
    3636class DateInstance;
     37class JSBigInt;
    3738
    3839namespace DFG {
     
    244245char* JIT_OPERATION operationDoubleToStringWithValidRadix(JSGlobalObject*, double, int32_t);
    245246
    246 EncodedJSValue JIT_OPERATION operationNormalizeMapKey(VM*, EncodedJSValue input) WTF_INTERNAL;
     247EncodedJSValue JIT_OPERATION operationNormalizeMapKeyHeapBigInt(VM*, JSBigInt*) WTF_INTERNAL;
    247248UCPUStrictInt32 JIT_OPERATION operationMapHash(JSGlobalObject*, EncodedJSValue input);
     249UCPUStrictInt32 JIT_OPERATION operationMapHashHeapBigInt(VM*, JSBigInt*);
    248250JSCell* JIT_OPERATION operationJSMapFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t);
    249251JSCell* JIT_OPERATION operationJSSetFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t);
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

    r267489 r267624  
    1258312583    passThroughCases.link(&m_jit);
    1258412584    m_jit.moveValueRegs(keyRegs, resultRegs);
    12585     addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKey, resultRegs, &vm(), keyRegs));
     12585    addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKeyHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultRegs, &vm(), keyRegs.payloadGPR()));
    1258612586
    1258712587    doneCases.link(&m_jit);
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp

    r267489 r267624  
    44734473            GPRFlushedCallResult result(this);
    44744474            GPRReg resultGPR = result.gpr();
    4475             callOperation(operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR);
    4476             m_jit.exceptionCheck();
     4475            callOperation(operationMapHashHeapBigInt, resultGPR, &vm(), inputGPR);
    44774476            strictInt32Result(resultGPR, node);
    44784477            break;
     
    45034502                m_jit.move(inputGPR, resultGPR);
    45044503                m_jit.wangsInt64Hash(resultGPR, tempGPR);
    4505                 addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR));
     4504                addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHashHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultGPR, &vm(), inputGPR));
    45064505                done.append(m_jit.jump());
    45074506                isString.link(&m_jit);
     
    45574556        m_jit.move(inputGPR, resultGPR);
    45584557        m_jit.wangsInt64Hash(resultGPR, tempGPR);
    4559         addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR));
     4558        addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHashHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultGPR, &vm(), inputGPR));
    45604559        done.append(m_jit.jump());
    45614560
     
    46494648            loopAround.append(m_jit.branchIfNotCell(JSValueRegs(bucketGPR)));
    46504649
    4651             auto isBucketString = m_jit.branchIfString(bucketGPR);
     4650            auto bucketIsString = m_jit.branchIfString(bucketGPR);
    46524651            loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR));
    46534652
     
    46574656
    46584657            // bucket is String.
    4659             isBucketString.link(&m_jit);
     4658            bucketIsString.link(&m_jit);
    46604659            loopAround.append(m_jit.branchIfNotString(keyGPR));
    46614660            slowPathCases.append(m_jit.jump());
     
    46834682            loopAround.append(m_jit.branchIfNotCell(JSValueRegs(keyGPR)));
    46844683            // Both are cells here.
    4685             auto isBucketString = m_jit.branchIfString(bucketGPR);
     4684            auto bucketIsString = m_jit.branchIfString(bucketGPR);
    46864685            // bucket is not String.
    46874686            loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR));
     
    46904689            loopAround.append(m_jit.jump());
    46914690            // bucket is String.
    4692             isBucketString.link(&m_jit);
     4691            bucketIsString.link(&m_jit);
    46934692            loopAround.append(m_jit.branchIfNotString(keyGPR));
    46944693            slowPathCases.append(m_jit.jump());
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp

    r267489 r267624  
    1129811298        case HeapBigIntUse: {
    1129911299            LValue key = lowHeapBigInt(m_node->child1());
    11300             setInt32(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), key)));
     11300            setInt32(m_out.castToInt32(vmCall(Int64, operationMapHashHeapBigInt, m_vmValue, key)));
    1130111301            return;
    1130211302        }
     
    1130611306            LBasicBlock notString = m_out.newBlock();
    1130711307            LBasicBlock isHeapBigIntCase = m_out.newBlock();
    11308             LBasicBlock notStringHeapBigIntCase = m_out.newBlock();
     11308            LBasicBlock notStringNorHeapBigIntCase = m_out.newBlock();
    1130911309            LBasicBlock continuation = m_out.newBlock();
    1131011310
     
    1131911319
    1132011320            m_out.appendTo(notString, isHeapBigIntCase);
    11321             m_out.branch(isHeapBigInt(value, (provenType(m_node->child1()) & ~SpecString)), unsure(isHeapBigIntCase), unsure(notStringHeapBigIntCase));
    11322 
    11323             m_out.appendTo(isHeapBigIntCase, notStringHeapBigIntCase);
    11324             ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), value)));
     11321            m_out.branch(isHeapBigInt(value, (provenType(m_node->child1()) & ~SpecString)), unsure(isHeapBigIntCase), unsure(notStringNorHeapBigIntCase));
     11322
     11323            m_out.appendTo(isHeapBigIntCase, notStringNorHeapBigIntCase);
     11324            ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHashHeapBigInt, m_vmValue, value)));
    1132511325            m_out.jump(continuation);
    1132611326
    11327             m_out.appendTo(notStringHeapBigIntCase, continuation);
     11327            m_out.appendTo(notStringNorHeapBigIntCase, continuation);
    1132811328            ValueFromBlock notStringResult = m_out.anchor(wangsInt64Hash(value));
    1132911329            m_out.jump(continuation);
     
    1141111411
    1141211412        m_out.appendTo(isHeapBigIntCase, notCellCase);
    11413         ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKey, m_vmValue, key));
     11413        ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKeyHeapBigInt, m_vmValue, key));
    1141411414        m_out.jump(continuation);
    1141511415
  • trunk/Source/JavaScriptCore/runtime/HashMapImpl.h

    r267373 r267624  
    280280}
    281281
     282ALWAYS_INLINE uint32_t jsMapHash(JSBigInt* bigInt)
     283{
     284    return bigInt->hash();
     285}
     286
    282287ALWAYS_INLINE uint32_t jsMapHash(JSGlobalObject* globalObject, VM& vm, JSValue value)
    283288{
     
    292297
    293298    if (value.isHeapBigInt())
    294         return value.asHeapBigInt()->hash();
     299        return jsMapHash(value.asHeapBigInt());
    295300
    296301    return wangsInt64Hash(JSValue::encode(value));
Note: See TracChangeset for help on using the changeset viewer.