Title: [267624] trunk/Source/_javascript_Core
Revision
267624
Author
[email protected]
Date
2020-09-26 12:52:14 -0700 (Sat, 26 Sep 2020)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (267623 => 267624)


--- trunk/Source/_javascript_Core/ChangeLog	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/ChangeLog	2020-09-26 19:52:14 UTC (rev 267624)
@@ -1,3 +1,24 @@
+2020-09-26  Yusuke Suzuki  <[email protected]>
+
+        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):
+
 2020-09-25  Ross Kirsling  <[email protected]>
 
         %TypedArray%.{from, of} no longer perform AllocateTypedArray

Modified: trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGAbstractInterpreterInlines.h	2020-09-26 19:52:14 UTC (rev 267624)
@@ -1381,8 +1381,8 @@
             break;
         }
 
-        SpeculatedType typeMaybeNormalized = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
-        if (!(forNode(node->child1()).m_type & typeMaybeNormalized)) {
+        SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
+        if (!(forNode(node->child1()).m_type & typesNeedingNormalization)) {
             m_state.setShouldTryConstantFolding(true);
             forNode(node) = forNode(node->child1());
             break;

Modified: trunk/Source/_javascript_Core/dfg/DFGConstantFoldingPhase.cpp (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGConstantFoldingPhase.cpp	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGConstantFoldingPhase.cpp	2020-09-26 19:52:14 UTC (rev 267624)
@@ -909,8 +909,8 @@
             }
 
             case NormalizeMapKey: {
-                SpeculatedType typeMaybeNormalized = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
-                if (m_state.forNode(node->child1()).m_type & typeMaybeNormalized)
+                SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;
+                if (m_state.forNode(node->child1()).m_type & typesNeedingNormalization)
                     break;
 
                 node->convertToIdentity();

Modified: trunk/Source/_javascript_Core/dfg/DFGOperations.cpp (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGOperations.cpp	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGOperations.cpp	2020-09-26 19:52:14 UTC (rev 267624)
@@ -3212,12 +3212,12 @@
     return putDynamicVar(globalObject, vm, scope, value, impl, getPutInfoBits, isStrictMode);
 }
 
-EncodedJSValue JIT_OPERATION operationNormalizeMapKey(VM* vmPointer, EncodedJSValue input)
+EncodedJSValue JIT_OPERATION operationNormalizeMapKeyHeapBigInt(VM* vmPointer, JSBigInt* input)
 {
     VM& vm = *vmPointer;
     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
     JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
-    return JSValue::encode(normalizeMapKey(JSValue::decode(input)));
+    return JSValue::encode(normalizeMapKey(input));
 }
 
 UCPUStrictInt32 JIT_OPERATION operationMapHash(JSGlobalObject* globalObject, EncodedJSValue input)
@@ -3229,6 +3229,15 @@
     return toUCPUStrictInt32(jsMapHash(globalObject, vm, JSValue::decode(input)));
 }
 
+UCPUStrictInt32 JIT_OPERATION operationMapHashHeapBigInt(VM* vmPointer, JSBigInt* input)
+{
+    VM& vm = *vmPointer;
+    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
+    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
+
+    return toUCPUStrictInt32(jsMapHash(input));
+}
+
 JSCell* JIT_OPERATION operationJSMapFindBucket(JSGlobalObject* globalObject, JSCell* map, EncodedJSValue key, int32_t hash)
 {
     VM& vm = globalObject->vm();

Modified: trunk/Source/_javascript_Core/dfg/DFGOperations.h (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGOperations.h	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGOperations.h	2020-09-26 19:52:14 UTC (rev 267624)
@@ -34,6 +34,7 @@
 namespace JSC {
 
 class DateInstance;
+class JSBigInt;
 
 namespace DFG {
 
@@ -243,8 +244,9 @@
 char* JIT_OPERATION operationInt52ToStringWithValidRadix(JSGlobalObject*, int64_t, int32_t);
 char* JIT_OPERATION operationDoubleToStringWithValidRadix(JSGlobalObject*, double, int32_t);
 
-EncodedJSValue JIT_OPERATION operationNormalizeMapKey(VM*, EncodedJSValue input) WTF_INTERNAL;
+EncodedJSValue JIT_OPERATION operationNormalizeMapKeyHeapBigInt(VM*, JSBigInt*) WTF_INTERNAL;
 UCPUStrictInt32 JIT_OPERATION operationMapHash(JSGlobalObject*, EncodedJSValue input);
+UCPUStrictInt32 JIT_OPERATION operationMapHashHeapBigInt(VM*, JSBigInt*);
 JSCell* JIT_OPERATION operationJSMapFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t);
 JSCell* JIT_OPERATION operationJSSetFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t);
 

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT.cpp	2020-09-26 19:52:14 UTC (rev 267624)
@@ -12582,7 +12582,7 @@
 
     passThroughCases.link(&m_jit);
     m_jit.moveValueRegs(keyRegs, resultRegs);
-    addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKey, resultRegs, &vm(), keyRegs));
+    addSlowPathGenerator(slowPathCall(slowPath, this, operationNormalizeMapKeyHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultRegs, &vm(), keyRegs.payloadGPR()));
 
     doneCases.link(&m_jit);
     jsValueResult(resultRegs, node);

Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (267623 => 267624)


--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp	2020-09-26 19:52:14 UTC (rev 267624)
@@ -4472,8 +4472,7 @@
             flushRegisters();
             GPRFlushedCallResult result(this);
             GPRReg resultGPR = result.gpr();
-            callOperation(operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR);
-            m_jit.exceptionCheck();
+            callOperation(operationMapHashHeapBigInt, resultGPR, &vm(), inputGPR);
             strictInt32Result(resultGPR, node);
             break;
         }
@@ -4502,7 +4501,7 @@
                 auto isHeapBigInt = m_jit.branchIfHeapBigInt(inputGPR);
                 m_jit.move(inputGPR, resultGPR);
                 m_jit.wangsInt64Hash(resultGPR, tempGPR);
-                addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR));
+                addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHashHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultGPR, &vm(), inputGPR));
                 done.append(m_jit.jump());
                 isString.link(&m_jit);
             }
@@ -4556,7 +4555,7 @@
         straightHash.link(&m_jit);
         m_jit.move(inputGPR, resultGPR);
         m_jit.wangsInt64Hash(resultGPR, tempGPR);
-        addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHash, resultGPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), inputGPR));
+        addSlowPathGenerator(slowPathCall(isHeapBigInt, this, operationMapHashHeapBigInt, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, resultGPR, &vm(), inputGPR));
         done.append(m_jit.jump());
 
         slowPath.link(&m_jit);
@@ -4648,7 +4647,7 @@
             done.append(m_jit.branch64(MacroAssembler::Equal, bucketGPR, keyGPR));
             loopAround.append(m_jit.branchIfNotCell(JSValueRegs(bucketGPR)));
 
-            auto isBucketString = m_jit.branchIfString(bucketGPR);
+            auto bucketIsString = m_jit.branchIfString(bucketGPR);
             loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR));
 
             // bucket is HeapBigInt.
@@ -4656,7 +4655,7 @@
             loopAround.append(m_jit.jump());
 
             // bucket is String.
-            isBucketString.link(&m_jit);
+            bucketIsString.link(&m_jit);
             loopAround.append(m_jit.branchIfNotString(keyGPR));
             slowPathCases.append(m_jit.jump());
             break;
@@ -4682,7 +4681,7 @@
             // first is a cell here.
             loopAround.append(m_jit.branchIfNotCell(JSValueRegs(keyGPR)));
             // Both are cells here.
-            auto isBucketString = m_jit.branchIfString(bucketGPR);
+            auto bucketIsString = m_jit.branchIfString(bucketGPR);
             // bucket is not String.
             loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR));
             // bucket is HeapBigInt.
@@ -4689,7 +4688,7 @@
             slowPathCases.append(m_jit.branchIfHeapBigInt(keyGPR));
             loopAround.append(m_jit.jump());
             // bucket is String.
-            isBucketString.link(&m_jit);
+            bucketIsString.link(&m_jit);
             loopAround.append(m_jit.branchIfNotString(keyGPR));
             slowPathCases.append(m_jit.jump());
             break;

Modified: trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp (267623 => 267624)


--- trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/ftl/FTLLowerDFGToB3.cpp	2020-09-26 19:52:14 UTC (rev 267624)
@@ -11297,7 +11297,7 @@
 
         case HeapBigIntUse: {
             LValue key = lowHeapBigInt(m_node->child1());
-            setInt32(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), key)));
+            setInt32(m_out.castToInt32(vmCall(Int64, operationMapHashHeapBigInt, m_vmValue, key)));
             return;
         }
 
@@ -11305,7 +11305,7 @@
             LBasicBlock isString = m_out.newBlock();
             LBasicBlock notString = m_out.newBlock();
             LBasicBlock isHeapBigIntCase = m_out.newBlock();
-            LBasicBlock notStringHeapBigIntCase = m_out.newBlock();
+            LBasicBlock notStringNorHeapBigIntCase = m_out.newBlock();
             LBasicBlock continuation = m_out.newBlock();
 
             LValue value = lowCell(m_node->child1());
@@ -11318,13 +11318,13 @@
             m_out.jump(continuation);
 
             m_out.appendTo(notString, isHeapBigIntCase);
-            m_out.branch(isHeapBigInt(value, (provenType(m_node->child1()) & ~SpecString)), unsure(isHeapBigIntCase), unsure(notStringHeapBigIntCase));
+            m_out.branch(isHeapBigInt(value, (provenType(m_node->child1()) & ~SpecString)), unsure(isHeapBigIntCase), unsure(notStringNorHeapBigIntCase));
 
-            m_out.appendTo(isHeapBigIntCase, notStringHeapBigIntCase);
-            ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, weakPointer(globalObject), value)));
+            m_out.appendTo(isHeapBigIntCase, notStringNorHeapBigIntCase);
+            ValueFromBlock heapBigIntResult = m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHashHeapBigInt, m_vmValue, value)));
             m_out.jump(continuation);
 
-            m_out.appendTo(notStringHeapBigIntCase, continuation);
+            m_out.appendTo(notStringNorHeapBigIntCase, continuation);
             ValueFromBlock notStringResult = m_out.anchor(wangsInt64Hash(value));
             m_out.jump(continuation);
 
@@ -11410,7 +11410,7 @@
         m_out.branch(isNotHeapBigInt(key, (provenType(m_node->child1()) & SpecCellCheck)), unsure(continuation), unsure(isHeapBigIntCase));
 
         m_out.appendTo(isHeapBigIntCase, notCellCase);
-        ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKey, m_vmValue, key));
+        ValueFromBlock bigIntResult = m_out.anchor(vmCall(Int64, operationNormalizeMapKeyHeapBigInt, m_vmValue, key));
         m_out.jump(continuation);
 
         m_out.appendTo(notCellCase, isNumberCase);

Modified: trunk/Source/_javascript_Core/runtime/HashMapImpl.h (267623 => 267624)


--- trunk/Source/_javascript_Core/runtime/HashMapImpl.h	2020-09-26 16:34:32 UTC (rev 267623)
+++ trunk/Source/_javascript_Core/runtime/HashMapImpl.h	2020-09-26 19:52:14 UTC (rev 267624)
@@ -279,6 +279,11 @@
     return static_cast<unsigned>(key);
 }
 
+ALWAYS_INLINE uint32_t jsMapHash(JSBigInt* bigInt)
+{
+    return bigInt->hash();
+}
+
 ALWAYS_INLINE uint32_t jsMapHash(JSGlobalObject* globalObject, VM& vm, JSValue value)
 {
     ASSERT_WITH_MESSAGE(normalizeMapKey(value) == value, "We expect normalized values flowing into this function.");
@@ -291,7 +296,7 @@
     }
 
     if (value.isHeapBigInt())
-        return value.asHeapBigInt()->hash();
+        return jsMapHash(value.asHeapBigInt());
 
     return wangsInt64Hash(JSValue::encode(value));
 }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to