V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
node-cache.h
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
explicit
NodeCache
(
unsigned
max = 256)
33
: 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_
v8
Definition:
libplatform.h:13
v8::internal::Zone
Definition:
zone.h:42
v8::internal::compiler::NodeCache::Entry
Definition:
node-cache.cc:25
v8::internal::compiler::Node
Definition:
node.h:43
char
v8::internal::compiler::NodeCache
Definition:
node-cache.h:30
v8::internal::ZoneVector
Definition:
node-cache.h:17
v8
src
compiler
node-cache.h
Generated on Tue Dec 25 2018 14:38:41 by
1.8.14