LCOV - code coverage report
Current view: top level - src/compiler - node-cache.h (source / functions) Hit Total Coverage
Test: app.info Lines: 1 2 50.0 %
Date: 2019-01-20 Functions: 0 4 0.0 %

          Line data    Source code
       1             : // Copyright 2014 the V8 project authors. All rights reserved.
       2             : // Use of this source code is governed by a BSD-style license that can be
       3             : // found in the LICENSE file.
       4             : 
       5             : #ifndef V8_COMPILER_NODE_CACHE_H_
       6             : #define V8_COMPILER_NODE_CACHE_H_
       7             : 
       8             : #include "src/base/functional.h"
       9             : #include "src/base/macros.h"
      10             : 
      11             : namespace v8 {
      12             : namespace internal {
      13             : 
      14             : // Forward declarations.
      15             : class Zone;
      16             : template <typename>
      17             : class ZoneVector;
      18             : 
      19             : 
      20             : namespace compiler {
      21             : 
      22             : // Forward declarations.
      23             : class Node;
      24             : 
      25             : 
      26             : // A cache for nodes based on a key. Useful for implementing canonicalization of
      27             : // nodes such as constants, parameters, etc.
      28             : template <typename Key, typename Hash = base::hash<Key>,
      29             :           typename Pred = std::equal_to<Key> >
      30             : class V8_EXPORT_PRIVATE NodeCache final {
      31             :  public:
      32           0 :   explicit NodeCache(unsigned max = 256)
      33     4883292 :       : entries_(nullptr), size_(0), max_(max) {}
      34             :   ~NodeCache() = default;
      35             : 
      36             :   // Search for node associated with {key} and return a pointer to a memory
      37             :   // location in this cache that stores an entry for the key. If the location
      38             :   // returned by this method contains a non-nullptr node, the caller can use
      39             :   // that
      40             :   // node. Otherwise it is the responsibility of the caller to fill the entry
      41             :   // with a new node.
      42             :   // Note that a previous cache entry may be overwritten if the cache becomes
      43             :   // too full or encounters too many hash collisions.
      44             :   Node** Find(Zone* zone, Key key);
      45             : 
      46             :   // Appends all nodes from this cache to {nodes}.
      47             :   void GetCachedNodes(ZoneVector<Node*>* nodes);
      48             : 
      49             :  private:
      50             :   struct Entry;
      51             : 
      52             :   Entry* entries_;  // lazily-allocated hash entries.
      53             :   size_t size_;
      54             :   size_t max_;
      55             :   Hash hash_;
      56             :   Pred pred_;
      57             : 
      58             :   bool Resize(Zone* zone);
      59             : 
      60             :   DISALLOW_COPY_AND_ASSIGN(NodeCache);
      61             : };
      62             : 
      63             : // Various default cache types.
      64             : typedef NodeCache<int32_t> Int32NodeCache;
      65             : typedef NodeCache<int64_t> Int64NodeCache;
      66             : 
      67             : // All we want is the numeric value of the RelocInfo::Mode enum. We typedef
      68             : // below to avoid pulling in assembler.h
      69             : typedef char RelocInfoMode;
      70             : typedef std::pair<int32_t, RelocInfoMode> RelocInt32Key;
      71             : typedef std::pair<int64_t, RelocInfoMode> RelocInt64Key;
      72             : typedef NodeCache<RelocInt32Key> RelocInt32NodeCache;
      73             : typedef NodeCache<RelocInt64Key> RelocInt64NodeCache;
      74             : #if V8_HOST_ARCH_32_BIT
      75             : typedef Int32NodeCache IntPtrNodeCache;
      76             : #else
      77             : typedef Int64NodeCache IntPtrNodeCache;
      78             : #endif
      79             : 
      80             : }  // namespace compiler
      81             : }  // namespace internal
      82             : }  // namespace v8
      83             : 
      84             : #endif  // V8_COMPILER_NODE_CACHE_H_

Generated by: LCOV version 1.10