Record the HashSet/HashMap operations in DFG/FTL/B3 and replay them in a benchmark
https://bugs.webkit.org/show_bug.cgi?id=169590
Reviewed by Saam Barati.
Source/JavaScriptCore:
Adds code to support logging some hashtable stuff in the DFG.
- dfg/DFGAvailabilityMap.cpp:
(JSC::DFG::AvailabilityMap::pruneHeap):
- dfg/DFGCombinedLiveness.cpp:
(JSC::DFG::liveNodesAtHead):
(JSC::DFG::CombinedLiveness::CombinedLiveness):
- dfg/DFGCombinedLiveness.h:
- dfg/DFGLivenessAnalysisPhase.cpp:
(JSC::DFG::LivenessAnalysisPhase::run):
(JSC::DFG::LivenessAnalysisPhase::processBlock):
- dfg/DFGNode.cpp:
- dfg/DFGNode.h:
- dfg/DFGObjectAllocationSinkingPhase.cpp:
Source/WTF:
This adds LoggingHashSet and LoggingHashMap, which are drop-in replacements for HashSet and
HashMap that log everything that they do, so that you can replay it later.
This also adds a benchmark (HashSetDFGReplay) based on doing a recording of some of the HashSets
in the DFG compiler.
- WTF.xcodeproj/project.pbxproj:
- benchmarks/HashSetDFGReplay.cpp: Added.
(benchmark):
(main):
- wtf/CMakeLists.txt:
- wtf/GlobalVersion.cpp: Added.
(WTF::newGlobalVersion):
- wtf/GlobalVersion.h: Added.
- wtf/HashMap.h:
(WTF::X>::swap):
(WTF::V>::addVoid):
- wtf/LoggingHashID.h: Added.
(WTF::LoggingHashID::LoggingHashID):
(WTF::LoggingHashID::dump):
- wtf/LoggingHashMap.h: Added.
- wtf/LoggingHashSet.h: Added.
- wtf/LoggingHashTraits.h: Added.
(WTF::LoggingHashKeyTraits::print):
(WTF::LoggingHashValueTraits::print):