Ignore:
Timestamp:
Mar 14, 2017, 2:37:41 PM (8 years ago)
Author:
[email protected]
Message:

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/HashSet.h:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGCombinedLiveness.cpp

    r208373 r213939  
    3636namespace JSC { namespace DFG {
    3737
    38 HashSet<Node*> liveNodesAtHead(Graph& graph, BasicBlock* block)
     38NodeSet liveNodesAtHead(Graph& graph, BasicBlock* block)
    3939{
    40     HashSet<Node*> seen;
     40    NodeSet seen;
    4141    for (NodeFlowProjection node : block->ssa->liveAtHead) {
    4242        if (node.kind() == NodeFlowProjection::Primary)
    43             seen.add(node.node());
     43            seen.addVoid(node.node());
    4444    }
    4545   
     
    7373        for (BasicBlock* successor : block->successors()) {
    7474            for (Node* node : liveAtHead[successor])
    75                 liveAtTail[block].add(node);
     75                liveAtTail[block].addVoid(node);
    7676        }
    7777    }
Note: See TracChangeset for help on using the changeset viewer.