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