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 "graph-tester.h" 87d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/common-operator.h" 97d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org#include "src/compiler/node-cache.h" 107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal; 127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgusing namespace v8::internal::compiler; 137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Int32Constant_back_to_back) { 157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Int32NodeCache cache; 177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = -2000000000; i < 2000000000; i += 3315177) { 197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), i); 207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(NULL, pos); 217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < 3; j++) { 227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** npos = cache.Find(graph.zone(), i); 237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(pos, npos); 247d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Int32Constant_five) { 307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Int32NodeCache cache; 327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common(graph.zone()); 337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t constants[] = {static_cast<int32_t>(0x80000000), -77, 0, 1, -1}; 357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 36fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org Node* nodes[arraysize(constants)]; 377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 38fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t i = 0; i < arraysize(constants); i++) { 397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t k = constants[i]; 407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* node = graph.NewNode(common.Int32Constant(k)); 417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org *cache.Find(graph.zone(), k) = nodes[i] = node; 427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 437d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 44fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t i = 0; i < arraysize(constants); i++) { 457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t k = constants[i]; 467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(nodes[i], *cache.Find(graph.zone(), k)); 477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 517d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Int32Constant_hits) { 527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Int32NodeCache cache; 547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org const int32_t kSize = 1500; 557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** nodes = graph.zone()->NewArray<Node*>(kSize); 567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common(graph.zone()); 577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < kSize; i++) { 597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t v = i * -55; 607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org nodes[i] = graph.NewNode(common.Int32Constant(v)); 617d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org *cache.Find(graph.zone(), v) = nodes[i]; 627d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 637d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 647d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int hits = 0; 657d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < kSize; i++) { 667d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t v = i * -55; 677d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), v); 687d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (*pos != NULL) { 697d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(nodes[i], *pos); 707d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org hits++; 717d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 727d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 737d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_LT(4, hits); 747d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 757d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 767d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 777d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Int64Constant_back_to_back) { 787d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 797d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Int64NodeCache cache; 807d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 817d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int64_t i = -2000000000; i < 2000000000; i += 3315177) { 827d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), i); 837d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(NULL, pos); 847d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < 3; j++) { 857d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** npos = cache.Find(graph.zone(), i); 867d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(pos, npos); 877d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 887d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 897d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 907d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 917d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 927d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(Int64Constant_hits) { 937d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 947d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Int64NodeCache cache; 957d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org const int32_t kSize = 1500; 967d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** nodes = graph.zone()->NewArray<Node*>(kSize); 977d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common(graph.zone()); 987d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 997d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < kSize; i++) { 1007d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int64_t v = static_cast<int64_t>(i) * static_cast<int64_t>(5003001); 1017d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org nodes[i] = graph.NewNode(common.Int32Constant(i)); 1027d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org *cache.Find(graph.zone(), v) = nodes[i]; 1037d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1047d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1057d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int hits = 0; 1067d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int i = 0; i < kSize; i++) { 1077d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int64_t v = static_cast<int64_t>(i) * static_cast<int64_t>(5003001); 1087d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), v); 1097d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (*pos != NULL) { 1107d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(nodes[i], *pos); 1117d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org hits++; 1127d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1137d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1147d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_LT(4, hits); 1157d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1167d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1177d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1187d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(PtrConstant_back_to_back) { 1197d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 1207d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org PtrNodeCache cache; 1217d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t buffer[50]; 1227d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1237d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int32_t* p = buffer; 124fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org (p - buffer) < static_cast<ptrdiff_t>(arraysize(buffer)); p++) { 1257d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), p); 1267d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_NE(NULL, pos); 1277d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org for (int j = 0; j < 3; j++) { 1287d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** npos = cache.Find(graph.zone(), p); 1297d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(pos, npos); 1307d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1317d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1327d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 1337d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1347d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1357d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.orgTEST(PtrConstant_hits) { 1367d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org GraphTester graph; 1377d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org PtrNodeCache cache; 1387d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org const int32_t kSize = 50; 1397d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t buffer[kSize]; 1407d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node* nodes[kSize]; 1417d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CommonOperatorBuilder common(graph.zone()); 1427d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 143fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t i = 0; i < arraysize(buffer); i++) { 1447d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int k = static_cast<int>(i); 1457d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t* p = &buffer[i]; 1467d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org nodes[i] = graph.NewNode(common.Int32Constant(k)); 1477d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org *cache.Find(graph.zone(), p) = nodes[i]; 1487d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1497d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org 1507d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int hits = 0; 151fa7f914e3bacba481b13da5cf2bc4c935567ebc4machenbach@chromium.org for (size_t i = 0; i < arraysize(buffer); i++) { 1527d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org int32_t* p = &buffer[i]; 1537d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org Node** pos = cache.Find(graph.zone(), p); 1547d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org if (*pos != NULL) { 1557d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_EQ(nodes[i], *pos); 1567d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org hits++; 1577d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1587d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org } 1597d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org CHECK_LT(4, hits); 1607d299ad4dc0ca26e0017b190b48362ad71328ce4machenbach@chromium.org} 161