blob: 7ec70aea7e352e35cbb2084c905eb48f02cd5162 [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// 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_COMMON_NODE_CACHE_H_
6#define V8_COMPILER_COMMON_NODE_CACHE_H_
7
Ben Murdochb8a8cc12014-11-26 15:28:44 +00008#include "src/compiler/node-cache.h"
9
10namespace v8 {
11namespace internal {
Emily Bernierd0a1eb72015-03-24 16:35:39 -040012
13// Forward declarations.
14class ExternalReference;
15
16
Ben Murdochb8a8cc12014-11-26 15:28:44 +000017namespace compiler {
18
19// Bundles various caches for common nodes.
Emily Bernierd0a1eb72015-03-24 16:35:39 -040020class CommonNodeCache FINAL {
Ben Murdochb8a8cc12014-11-26 15:28:44 +000021 public:
22 explicit CommonNodeCache(Zone* zone) : zone_(zone) {}
Emily Bernierd0a1eb72015-03-24 16:35:39 -040023 ~CommonNodeCache() {}
Ben Murdochb8a8cc12014-11-26 15:28:44 +000024
25 Node** FindInt32Constant(int32_t value) {
Emily Bernierd0a1eb72015-03-24 16:35:39 -040026 return int32_constants_.Find(zone(), value);
27 }
28
29 Node** FindInt64Constant(int64_t value) {
30 return int64_constants_.Find(zone(), value);
31 }
32
33 Node** FindFloat32Constant(float value) {
34 // We canonicalize float constants at the bit representation level.
35 return float32_constants_.Find(zone(), bit_cast<int32_t>(value));
Ben Murdochb8a8cc12014-11-26 15:28:44 +000036 }
37
38 Node** FindFloat64Constant(double value) {
39 // We canonicalize double constants at the bit representation level.
Emily Bernierd0a1eb72015-03-24 16:35:39 -040040 return float64_constants_.Find(zone(), bit_cast<int64_t>(value));
Ben Murdochb8a8cc12014-11-26 15:28:44 +000041 }
42
Emily Bernierd0a1eb72015-03-24 16:35:39 -040043 Node** FindExternalConstant(ExternalReference value);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000044
45 Node** FindNumberConstant(double value) {
46 // We canonicalize double constants at the bit representation level.
Emily Bernierd0a1eb72015-03-24 16:35:39 -040047 return number_constants_.Find(zone(), bit_cast<int64_t>(value));
Ben Murdochb8a8cc12014-11-26 15:28:44 +000048 }
49
Emily Bernierd0a1eb72015-03-24 16:35:39 -040050 // Return all nodes from the cache.
51 void GetCachedNodes(ZoneVector<Node*>* nodes);
52
Ben Murdochb8a8cc12014-11-26 15:28:44 +000053 Zone* zone() const { return zone_; }
54
55 private:
56 Int32NodeCache int32_constants_;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040057 Int64NodeCache int64_constants_;
58 Int32NodeCache float32_constants_;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000059 Int64NodeCache float64_constants_;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040060 IntPtrNodeCache external_constants_;
Ben Murdochb8a8cc12014-11-26 15:28:44 +000061 Int64NodeCache number_constants_;
62 Zone* zone_;
Emily Bernierd0a1eb72015-03-24 16:35:39 -040063
64 DISALLOW_COPY_AND_ASSIGN(CommonNodeCache);
Ben Murdochb8a8cc12014-11-26 15:28:44 +000065};
Emily Bernierd0a1eb72015-03-24 16:35:39 -040066
67} // namespace compiler
68} // namespace internal
69} // namespace v8
Ben Murdochb8a8cc12014-11-26 15:28:44 +000070
71#endif // V8_COMPILER_COMMON_NODE_CACHE_H_