Changeset 267624 in webkit
- Timestamp:
- Sep 26, 2020 12:52:14 PM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r267603 r267624 1 2020-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 1 22 2020-09-25 Ross Kirsling <ross.kirsling@sony.com> 2 23 -
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r267489 r267624 1382 1382 } 1383 1383 1384 SpeculatedType type MaybeNormalized= (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;1385 if (!(forNode(node->child1()).m_type & type MaybeNormalized)) {1384 SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt; 1385 if (!(forNode(node->child1()).m_type & typesNeedingNormalization)) { 1386 1386 m_state.setShouldTryConstantFolding(true); 1387 1387 forNode(node) = forNode(node->child1()); -
trunk/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp
r267489 r267624 910 910 911 911 case NormalizeMapKey: { 912 SpeculatedType type MaybeNormalized= (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt;913 if (m_state.forNode(node->child1()).m_type & type MaybeNormalized)912 SpeculatedType typesNeedingNormalization = (SpecFullNumber & ~SpecInt32Only) | SpecHeapBigInt; 913 if (m_state.forNode(node->child1()).m_type & typesNeedingNormalization) 914 914 break; 915 915 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp
r267373 r267624 3213 3213 } 3214 3214 3215 EncodedJSValue JIT_OPERATION operationNormalizeMapKey (VM* vmPointer, EncodedJSValueinput)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)));3215 EncodedJSValue 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)); 3221 3221 } 3222 3222 … … 3228 3228 3229 3229 return toUCPUStrictInt32(jsMapHash(globalObject, vm, JSValue::decode(input))); 3230 } 3231 3232 UCPUStrictInt32 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)); 3230 3239 } 3231 3240 -
trunk/Source/JavaScriptCore/dfg/DFGOperations.h
r267518 r267624 35 35 36 36 class DateInstance; 37 class JSBigInt; 37 38 38 39 namespace DFG { … … 244 245 char* JIT_OPERATION operationDoubleToStringWithValidRadix(JSGlobalObject*, double, int32_t); 245 246 246 EncodedJSValue JIT_OPERATION operationNormalizeMapKey (VM*, EncodedJSValue input) WTF_INTERNAL;247 EncodedJSValue JIT_OPERATION operationNormalizeMapKeyHeapBigInt(VM*, JSBigInt*) WTF_INTERNAL; 247 248 UCPUStrictInt32 JIT_OPERATION operationMapHash(JSGlobalObject*, EncodedJSValue input); 249 UCPUStrictInt32 JIT_OPERATION operationMapHashHeapBigInt(VM*, JSBigInt*); 248 250 JSCell* JIT_OPERATION operationJSMapFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t); 249 251 JSCell* JIT_OPERATION operationJSSetFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r267489 r267624 12583 12583 passThroughCases.link(&m_jit); 12584 12584 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())); 12586 12586 12587 12587 doneCases.link(&m_jit); -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp
r267489 r267624 4473 4473 GPRFlushedCallResult result(this); 4474 4474 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); 4477 4476 strictInt32Result(resultGPR, node); 4478 4477 break; … … 4503 4502 m_jit.move(inputGPR, resultGPR); 4504 4503 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)); 4506 4505 done.append(m_jit.jump()); 4507 4506 isString.link(&m_jit); … … 4557 4556 m_jit.move(inputGPR, resultGPR); 4558 4557 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)); 4560 4559 done.append(m_jit.jump()); 4561 4560 … … 4649 4648 loopAround.append(m_jit.branchIfNotCell(JSValueRegs(bucketGPR))); 4650 4649 4651 auto isBucketString = m_jit.branchIfString(bucketGPR);4650 auto bucketIsString = m_jit.branchIfString(bucketGPR); 4652 4651 loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR)); 4653 4652 … … 4657 4656 4658 4657 // bucket is String. 4659 isBucketString.link(&m_jit);4658 bucketIsString.link(&m_jit); 4660 4659 loopAround.append(m_jit.branchIfNotString(keyGPR)); 4661 4660 slowPathCases.append(m_jit.jump()); … … 4683 4682 loopAround.append(m_jit.branchIfNotCell(JSValueRegs(keyGPR))); 4684 4683 // Both are cells here. 4685 auto isBucketString = m_jit.branchIfString(bucketGPR);4684 auto bucketIsString = m_jit.branchIfString(bucketGPR); 4686 4685 // bucket is not String. 4687 4686 loopAround.append(m_jit.branchIfNotHeapBigInt(bucketGPR)); … … 4690 4689 loopAround.append(m_jit.jump()); 4691 4690 // bucket is String. 4692 isBucketString.link(&m_jit);4691 bucketIsString.link(&m_jit); 4693 4692 loopAround.append(m_jit.branchIfNotString(keyGPR)); 4694 4693 slowPathCases.append(m_jit.jump()); -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r267489 r267624 11298 11298 case HeapBigIntUse: { 11299 11299 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))); 11301 11301 return; 11302 11302 } … … 11306 11306 LBasicBlock notString = m_out.newBlock(); 11307 11307 LBasicBlock isHeapBigIntCase = m_out.newBlock(); 11308 LBasicBlock notString HeapBigIntCase = m_out.newBlock();11308 LBasicBlock notStringNorHeapBigIntCase = m_out.newBlock(); 11309 11309 LBasicBlock continuation = m_out.newBlock(); 11310 11310 … … 11319 11319 11320 11320 m_out.appendTo(notString, isHeapBigIntCase); 11321 m_out.branch(isHeapBigInt(value, (provenType(m_node->child1()) & ~SpecString)), unsure(isHeapBigIntCase), unsure(notString HeapBigIntCase));11322 11323 m_out.appendTo(isHeapBigIntCase, notString HeapBigIntCase);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))); 11325 11325 m_out.jump(continuation); 11326 11326 11327 m_out.appendTo(notString HeapBigIntCase, continuation);11327 m_out.appendTo(notStringNorHeapBigIntCase, continuation); 11328 11328 ValueFromBlock notStringResult = m_out.anchor(wangsInt64Hash(value)); 11329 11329 m_out.jump(continuation); … … 11411 11411 11412 11412 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)); 11414 11414 m_out.jump(continuation); 11415 11415 -
trunk/Source/JavaScriptCore/runtime/HashMapImpl.h
r267373 r267624 280 280 } 281 281 282 ALWAYS_INLINE uint32_t jsMapHash(JSBigInt* bigInt) 283 { 284 return bigInt->hash(); 285 } 286 282 287 ALWAYS_INLINE uint32_t jsMapHash(JSGlobalObject* globalObject, VM& vm, JSValue value) 283 288 { … … 292 297 293 298 if (value.isHeapBigInt()) 294 return value.asHeapBigInt()->hash();299 return jsMapHash(value.asHeapBigInt()); 295 300 296 301 return wangsInt64Hash(JSValue::encode(value));
Note: See TracChangeset
for help on using the changeset viewer.