17d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Copyright 2014 the V8 project authors. All rights reserved.
27d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
37d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// found in the LICENSE file.
47d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
57d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#ifndef V8_COMPILER_COMMON_NODE_CACHE_H_
67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#define V8_COMPILER_COMMON_NODE_CACHE_H_
77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/assembler.h"
97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node-cache.h"
107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace v8 {
127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace internal {
137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgnamespace compiler {
147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org// Bundles various caches for common nodes.
16ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.orgclass CommonNodeCache FINAL : public ZoneObject {
177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public:
187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  explicit CommonNodeCache(Zone* zone) : zone_(zone) {}
197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node** FindInt32Constant(int32_t value) {
217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    return int32_constants_.Find(zone_, value);
227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node** FindFloat64Constant(double value) {
257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    // We canonicalize double constants at the bit representation level.
26e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org    return float64_constants_.Find(zone_, bit_cast<int64_t>(value));
277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node** FindExternalConstant(ExternalReference reference) {
307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    return external_constants_.Find(zone_, reference.address());
317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Node** FindNumberConstant(double value) {
347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org    // We canonicalize double constants at the bit representation level.
35e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org    return number_constants_.Find(zone_, bit_cast<int64_t>(value));
367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  }
377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Zone* zone() const { return zone_; }
397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org private:
417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Int32NodeCache int32_constants_;
427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Int64NodeCache float64_constants_;
437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  PtrNodeCache external_constants_;
447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Int64NodeCache number_constants_;
457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org  Zone* zone_;
467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org};
477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}
497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}  // namespace v8::internal::compiler
507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org
517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#endif  // V8_COMPILER_COMMON_NODE_CACHE_H_
52