[JSC] Make empty key as deleted mark in HashMapBucket and drop m_deleted field
authorutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Nov 2017 11:04:40 +0000 (11:04 +0000)
committerutatane.tea@gmail.com <utatane.tea@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 24 Nov 2017 11:04:40 +0000 (11:04 +0000)
commitb4b73f485bfc3103de738e00e67215f60d208554
tree093aaae03768de6fe6bcc449f1304840086c6ef3
parent6531c1c9467b671a8db14cf110c33dd1f345b5cd
[JSC] Make empty key as deleted mark in HashMapBucket and drop m_deleted field
https://bugs.webkit.org/show_bug.cgi?id=179923

Reviewed by Darin Adler.

We do not set empty as a key in HashMapBucket since JSMap / JSSet can expose it to users.
So we can use it as a marker of deleted bucket.

This patch uses empty key as a deleted flag, and drop m_deleted field of HashMapBucket.
It shrinks the size of HashMapBucket much.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileGetMapBucketNext):
* ftl/FTLAbstractHeapRepository.h:
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucketNext):
* runtime/HashMapImpl.h:
(JSC::HashMapBucket::createSentinel):
We make sentinel bucket as (undefined, undefined) since DFG/FTL can load a value from sentinels.
While the sentinel's deleted flag becomes false since key is set, it is not a problem since deleted
flag of sentinel bucket is not used.

(JSC::HashMapBucket::HashMapBucket):
(JSC::HashMapBucket::deleted const):
(JSC::HashMapBucket::makeDeleted):
(JSC::HashMapImpl::remove):
(JSC::HashMapImpl::clear):
(JSC::HashMapImpl::setUpHeadAndTail):
(JSC::HashMapImpl::addNormalizedInternal):
(JSC::HashMapBucket::setDeleted): Deleted.
(JSC::HashMapBucket::offsetOfDeleted): Deleted.
(): Deleted.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225130 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
Source/JavaScriptCore/ftl/FTLAbstractHeapRepository.h
Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
Source/JavaScriptCore/runtime/HashMapImpl.h