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#include "src/v8.h" 67d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 77d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/js-graph.h" 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node-properties-inl.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/typer.h" 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/types.h" 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/cctest.h" 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "test/cctest/compiler/value-helper.h" 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal; 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler; 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass JSCacheTesterHelper { 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org protected: 197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org explicit JSCacheTesterHelper(Zone* zone) 20b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org : main_graph_(zone), 21b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org main_common_(zone), 22b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org main_javascript_(zone), 23b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org main_typer_(zone), 24b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org main_machine_() {} 257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Graph main_graph_; 267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder main_common_; 27b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org JSOperatorBuilder main_javascript_; 287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Typer main_typer_; 29b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org MachineOperatorBuilder main_machine_; 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}; 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgclass JSConstantCacheTester : public HandleAndZoneScope, 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public JSCacheTesterHelper, 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public JSGraph { 367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org public: 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester() 387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org : JSCacheTesterHelper(main_zone()), 39b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org JSGraph(&main_graph_, &main_common_, &main_javascript_, &main_typer_, 40b376fed08cb9d90a3f67f655adf63c4b35feb106machenbach@chromium.org &main_machine_) {} 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* upper(Node* node) { return NodeProperties::GetBounds(node).upper; } 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> handle(Node* node) { 457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kHeapConstant, node->opcode()); 46e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org return OpParameter<Unique<Object> >(node).handle(); 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Factory* factory() { return main_isolate()->factory(); } 507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org}; 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(ZeroConstant1) { 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* zero = T.ZeroConstant(); 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kNumberConstant, zero->opcode()); 597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(zero, T.Constant(0)); 607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(-0.0)); 617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(1.0)); 627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(v8::base::OS::nan_value())); 637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Float64Constant(0)); 647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Int32Constant(0)); 657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* t = T.upper(zero); 677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Number())); 697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Integral32())); 707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Signed32())); 717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Unsigned32())); 727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::SignedSmall())); 737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::UnsignedSmall())); 747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(MinusZeroConstant) { 787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* minus_zero = T.Constant(-0.0); 817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* zero = T.ZeroConstant(); 827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kNumberConstant, minus_zero->opcode()); 847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(minus_zero, T.Constant(-0.0)); 857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, minus_zero); 867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* t = T.upper(minus_zero); 887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Number())); 907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::MinusZero())); 917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(!t->Is(Type::Integral32())); 927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(!t->Is(Type::Signed32())); 937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(!t->Is(Type::Unsigned32())); 947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(!t->Is(Type::SignedSmall())); 957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(!t->Is(Type::UnsignedSmall())); 967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 97e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org double zero_value = OpParameter<double>(zero); 98e20e19efeef112c26d0e63b1e5118e695b42d855machenbach@chromium.org double minus_zero_value = OpParameter<double>(minus_zero); 997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(0.0, zero_value); 1017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(-0.0, zero_value); 1027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(-0.0, minus_zero_value); 1037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(0.0, minus_zero_value); 1047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(ZeroConstant2) { 1087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 1097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* zero = T.Constant(0); 1117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kNumberConstant, zero->opcode()); 1137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(zero, T.ZeroConstant()); 1147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(-0.0)); 1157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(1.0)); 1167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Constant(v8::base::OS::nan_value())); 1177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Float64Constant(0)); 1187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(zero, T.Int32Constant(0)); 1197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* t = T.upper(zero); 1217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Number())); 1237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Integral32())); 1247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Signed32())); 1257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Unsigned32())); 1267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::SignedSmall())); 1277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::UnsignedSmall())); 1287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(OneConstant1) { 1327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 1337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* one = T.OneConstant(); 1357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kNumberConstant, one->opcode()); 1377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(one, T.Constant(1)); 1387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(one, T.Constant(1.0)); 1397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(1.01)); 1407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(-1.01)); 1417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(v8::base::OS::nan_value())); 1427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Float64Constant(1.0)); 1437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Int32Constant(1)); 1447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* t = T.upper(one); 1467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Number())); 1487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Integral32())); 1497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Signed32())); 1507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Unsigned32())); 1517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::SignedSmall())); 1527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::UnsignedSmall())); 1537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(OneConstant2) { 1577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 1587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* one = T.Constant(1); 1607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(IrOpcode::kNumberConstant, one->opcode()); 1627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(one, T.OneConstant()); 1637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(one, T.Constant(1.0)); 1647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(1.01)); 1657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(-1.01)); 1667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Constant(v8::base::OS::nan_value())); 1677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Float64Constant(1.0)); 1687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(one, T.Int32Constant(1)); 1697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Type* t = T.upper(one); 1717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Number())); 1737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Integral32())); 1747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Signed32())); 1757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::Unsigned32())); 1767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::SignedSmall())); 1777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(t->Is(Type::UnsignedSmall())); 1787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Canonicalizations) { 1827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 1837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.ZeroConstant(), T.ZeroConstant()); 1857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.UndefinedConstant(), T.UndefinedConstant()); 1867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.TheHoleConstant(), T.TheHoleConstant()); 1877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.TrueConstant(), T.TrueConstant()); 1887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.FalseConstant(), T.FalseConstant()); 1897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.NullConstant(), T.NullConstant()); 1907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.ZeroConstant(), T.ZeroConstant()); 1917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.OneConstant(), T.OneConstant()); 1927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.NaNConstant(), T.NaNConstant()); 1937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(NoAliasing) { 1977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 1987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nodes[] = {T.UndefinedConstant(), T.TheHoleConstant(), T.TrueConstant(), 2007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org T.FalseConstant(), T.NullConstant(), T.ZeroConstant(), 2017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org T.OneConstant(), T.NaNConstant(), T.Constant(21), 2027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org T.Constant(22.2)}; 2037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 204fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t i = 0; i < arraysize(nodes); i++) { 205fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t j = 0; j < arraysize(nodes); j++) { 2067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (i != j) CHECK_NE(nodes[i], nodes[j]); 2077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(CanonicalizingNumbers) { 2137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org FOR_FLOAT64_INPUTS(i) { 2167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node = T.Constant(*i); 2177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < 5; j++) { 2187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(node, T.Constant(*i)); 2197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(NumberTypes) { 2257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org FOR_FLOAT64_INPUTS(i) { 2287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org double value = *i; 2297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node = T.Constant(value); 2307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(node)->Equals(Type::Of(value, T.main_zone()))); 2317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(HeapNumbers) { 2367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org FOR_FLOAT64_INPUTS(i) { 2397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org double value = *i; 2407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<Object> num = T.factory()->NewNumber(value); 2417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Handle<HeapNumber> heap = T.factory()->NewHeapNumber(value); 2427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node1 = T.Constant(value); 2437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node2 = T.Constant(num); 2447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node3 = T.Constant(heap); 2457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(node1, node2); 2467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(node1, node3); 2477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 2487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(OddballHandle) { 2527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.UndefinedConstant(), T.Constant(T.factory()->undefined_value())); 2557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.TheHoleConstant(), T.Constant(T.factory()->the_hole_value())); 2567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.TrueConstant(), T.Constant(T.factory()->true_value())); 2577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.FalseConstant(), T.Constant(T.factory()->false_value())); 2587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.NullConstant(), T.Constant(T.factory()->null_value())); 2597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(T.NaNConstant(), T.Constant(T.factory()->nan_value())); 2607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(OddballValues) { 2647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(*T.factory()->undefined_value(), *T.handle(T.UndefinedConstant())); 2677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(*T.factory()->the_hole_value(), *T.handle(T.TheHoleConstant())); 2687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(*T.factory()->true_value(), *T.handle(T.TrueConstant())); 2697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(*T.factory()->false_value(), *T.handle(T.FalseConstant())); 2707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(*T.factory()->null_value(), *T.handle(T.NullConstant())); 2717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(OddballTypes) { 2757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org JSConstantCacheTester T; 2767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.UndefinedConstant())->Is(Type::Undefined())); 2787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // TODO(dcarney): figure this out. 2797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // CHECK(T.upper(T.TheHoleConstant())->Is(Type::Internal())); 2807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.TrueConstant())->Is(Type::Boolean())); 2817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.FalseConstant())->Is(Type::Boolean())); 2827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.NullConstant())->Is(Type::Null())); 2837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.ZeroConstant())->Is(Type::Number())); 2847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.OneConstant())->Is(Type::Number())); 2857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK(T.upper(T.NaNConstant())->Is(Type::NaN())); 2867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 2877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 2897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(ExternalReferences) { 2907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org // TODO(titzer): test canonicalization of external references. 2917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 292