Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(921)

Side by Side Diff: test/cctest/compiler/test-run-machops.cc

Issue 1366543003: Reland "[turbofan] Checking of input counts on node creation" (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « test/cctest/compiler/test-node.cc ('k') | test/cctest/compiler/test-simplified-lowering.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <cmath> 5 #include <cmath>
6 #include <functional> 6 #include <functional>
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/base/bits.h" 9 #include "src/base/bits.h"
10 #include "src/base/utils/random-number-generator.h" 10 #include "src/base/utils/random-number-generator.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 m.machine()->Uint32Mod(), m.machine()->Uint32MulHigh(), 65 m.machine()->Uint32Mod(), m.machine()->Uint32MulHigh(),
66 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(), 66 m.machine()->Int32LessThan(), m.machine()->Int32LessThanOrEqual(),
67 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()}; 67 m.machine()->Uint32LessThan(), m.machine()->Uint32LessThanOrEqual()};
68 68
69 for (size_t i = 0; i < arraysize(kOps); ++i) { 69 for (size_t i = 0; i < arraysize(kOps); ++i) {
70 for (int j = 0; j < 8; j++) { 70 for (int j = 0; j < 8; j++) {
71 for (int k = 0; k < 8; k++) { 71 for (int k = 0; k < 8; k++) {
72 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); 72 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
73 Node* a = Int32Input(&m, j); 73 Node* a = Int32Input(&m, j);
74 Node* b = Int32Input(&m, k); 74 Node* b = Int32Input(&m, k);
75 m.Return(m.NewNode(kOps[i], a, b)); 75 m.Return(m.AddNode(kOps[i], a, b));
76 m.GenerateCode(); 76 m.GenerateCode();
77 } 77 }
78 } 78 }
79 } 79 }
80 } 80 }
81 81
82 82
83 TEST(CodeGenNop) { 83 TEST(CodeGenNop) {
84 RawMachineAssemblerTester<void> m; 84 RawMachineAssemblerTester<void> m;
85 m.Return(m.Int32Constant(0)); 85 m.Return(m.Int32Constant(0));
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 m.machine()->Uint64Mod(), m.machine()->Int64LessThan(), 125 m.machine()->Uint64Mod(), m.machine()->Int64LessThan(),
126 m.machine()->Int64LessThanOrEqual(), m.machine()->Uint64LessThan(), 126 m.machine()->Int64LessThanOrEqual(), m.machine()->Uint64LessThan(),
127 m.machine()->Uint64LessThanOrEqual()}; 127 m.machine()->Uint64LessThanOrEqual()};
128 128
129 for (size_t i = 0; i < arraysize(kOps); ++i) { 129 for (size_t i = 0; i < arraysize(kOps); ++i) {
130 for (int j = 0; j < 8; j++) { 130 for (int j = 0; j < 8; j++) {
131 for (int k = 0; k < 8; k++) { 131 for (int k = 0; k < 8; k++) {
132 RawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64); 132 RawMachineAssemblerTester<int64_t> m(kMachInt64, kMachInt64);
133 Node* a = Int64Input(&m, j); 133 Node* a = Int64Input(&m, j);
134 Node* b = Int64Input(&m, k); 134 Node* b = Int64Input(&m, k);
135 m.Return(m.NewNode(kOps[i], a, b)); 135 m.Return(m.AddNode(kOps[i], a, b));
136 m.GenerateCode(); 136 m.GenerateCode();
137 } 137 }
138 } 138 }
139 } 139 }
140 } 140 }
141 141
142 142
143 // TODO(titzer): add tests that run 64-bit integer operations. 143 // TODO(titzer): add tests that run 64-bit integer operations.
144 #endif // V8_TARGET_ARCH_64_BIT 144 #endif // V8_TARGET_ARCH_64_BIT
145 145
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 m.Bind(case_labels[i]); 619 m.Bind(case_labels[i]);
620 results[i] = m.Int32Constant(values[i]); 620 results[i] = m.Int32Constant(values[i]);
621 m.Goto(&end); 621 m.Goto(&end);
622 } 622 }
623 m.Bind(&def); 623 m.Bind(&def);
624 results[kNumCases] = m.Int32Constant(values[kNumCases]); 624 results[kNumCases] = m.Int32Constant(values[kNumCases]);
625 m.Goto(&end); 625 m.Goto(&end);
626 m.Bind(&end); 626 m.Bind(&end);
627 const int num_results = static_cast<int>(arraysize(results)); 627 const int num_results = static_cast<int>(arraysize(results));
628 Node* phi = 628 Node* phi =
629 m.NewNode(m.common()->Phi(kMachInt32, num_results), num_results, results); 629 m.AddNode(m.common()->Phi(kMachInt32, num_results), num_results, results);
630 m.Return(phi); 630 m.Return(phi);
631 631
632 for (size_t i = 0; i < kNumValues; ++i) { 632 for (size_t i = 0; i < kNumValues; ++i) {
633 CHECK_EQ(values[i], m.Call(static_cast<int>(i))); 633 CHECK_EQ(values[i], m.Call(static_cast<int>(i)));
634 } 634 }
635 } 635 }
636 636
637 637
638 TEST(RunLoadInt32) { 638 TEST(RunLoadInt32) {
639 RawMachineAssemblerTester<int32_t> m; 639 RawMachineAssemblerTester<int32_t> m;
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
1046 { 1046 {
1047 RawMachineAssemblerTester<void> m; 1047 RawMachineAssemblerTester<void> m;
1048 const Operator* shops[] = {m.machine()->Word32Sar(), 1048 const Operator* shops[] = {m.machine()->Word32Sar(),
1049 m.machine()->Word32Shl(), 1049 m.machine()->Word32Shl(),
1050 m.machine()->Word32Shr()}; 1050 m.machine()->Word32Shr()};
1051 for (size_t n = 0; n < arraysize(shops); n++) { 1051 for (size_t n = 0; n < arraysize(shops); n++) {
1052 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 1052 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
1053 kMachUint32); 1053 kMachUint32);
1054 MLabel blocka, blockb; 1054 MLabel blocka, blockb;
1055 m.Branch(m.Word32Equal(m.Int32Add(m.Parameter(0), 1055 m.Branch(m.Word32Equal(m.Int32Add(m.Parameter(0),
1056 m.NewNode(shops[n], m.Parameter(1), 1056 m.AddNode(shops[n], m.Parameter(1),
1057 m.Parameter(2))), 1057 m.Parameter(2))),
1058 m.Int32Constant(0)), 1058 m.Int32Constant(0)),
1059 &blocka, &blockb); 1059 &blocka, &blockb);
1060 m.Bind(&blocka); 1060 m.Bind(&blocka);
1061 m.Return(m.Int32Constant(constant)); 1061 m.Return(m.Int32Constant(constant));
1062 m.Bind(&blockb); 1062 m.Bind(&blockb);
1063 m.Return(m.Int32Constant(0 - constant)); 1063 m.Return(m.Int32Constant(0 - constant));
1064 FOR_UINT32_INPUTS(i) { 1064 FOR_UINT32_INPUTS(i) {
1065 FOR_INT32_INPUTS(j) { 1065 FOR_INT32_INPUTS(j) {
1066 FOR_UINT32_SHIFTS(shift) { 1066 FOR_UINT32_SHIFTS(shift) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 { 1138 {
1139 RawMachineAssemblerTester<void> m; 1139 RawMachineAssemblerTester<void> m;
1140 const Operator* shops[] = {m.machine()->Word32Sar(), 1140 const Operator* shops[] = {m.machine()->Word32Sar(),
1141 m.machine()->Word32Shl(), 1141 m.machine()->Word32Shl(),
1142 m.machine()->Word32Shr()}; 1142 m.machine()->Word32Shr()};
1143 for (size_t n = 0; n < arraysize(shops); n++) { 1143 for (size_t n = 0; n < arraysize(shops); n++) {
1144 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 1144 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
1145 kMachUint32); 1145 kMachUint32);
1146 m.Return(m.Word32Equal( 1146 m.Return(m.Word32Equal(
1147 m.Int32Add(m.Parameter(0), 1147 m.Int32Add(m.Parameter(0),
1148 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), 1148 m.AddNode(shops[n], m.Parameter(1), m.Parameter(2))),
1149 m.Int32Constant(0))); 1149 m.Int32Constant(0)));
1150 FOR_UINT32_INPUTS(i) { 1150 FOR_UINT32_INPUTS(i) {
1151 FOR_INT32_INPUTS(j) { 1151 FOR_INT32_INPUTS(j) {
1152 FOR_UINT32_SHIFTS(shift) { 1152 FOR_UINT32_SHIFTS(shift) {
1153 int32_t right; 1153 int32_t right;
1154 switch (shops[n]->opcode()) { 1154 switch (shops[n]->opcode()) {
1155 default: 1155 default:
1156 UNREACHABLE(); 1156 UNREACHABLE();
1157 case IrOpcode::kWord32Sar: 1157 case IrOpcode::kWord32Sar:
1158 right = *j >> shift; 1158 right = *j >> shift;
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 { 1383 {
1384 RawMachineAssemblerTester<void> m; 1384 RawMachineAssemblerTester<void> m;
1385 const Operator* shops[] = {m.machine()->Word32Sar(), 1385 const Operator* shops[] = {m.machine()->Word32Sar(),
1386 m.machine()->Word32Shl(), 1386 m.machine()->Word32Shl(),
1387 m.machine()->Word32Shr()}; 1387 m.machine()->Word32Shr()};
1388 for (size_t n = 0; n < arraysize(shops); n++) { 1388 for (size_t n = 0; n < arraysize(shops); n++) {
1389 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 1389 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
1390 kMachUint32); 1390 kMachUint32);
1391 MLabel blocka, blockb; 1391 MLabel blocka, blockb;
1392 m.Branch(m.Word32Equal(m.Int32Sub(m.Parameter(0), 1392 m.Branch(m.Word32Equal(m.Int32Sub(m.Parameter(0),
1393 m.NewNode(shops[n], m.Parameter(1), 1393 m.AddNode(shops[n], m.Parameter(1),
1394 m.Parameter(2))), 1394 m.Parameter(2))),
1395 m.Int32Constant(0)), 1395 m.Int32Constant(0)),
1396 &blocka, &blockb); 1396 &blocka, &blockb);
1397 m.Bind(&blocka); 1397 m.Bind(&blocka);
1398 m.Return(m.Int32Constant(constant)); 1398 m.Return(m.Int32Constant(constant));
1399 m.Bind(&blockb); 1399 m.Bind(&blockb);
1400 m.Return(m.Int32Constant(0 - constant)); 1400 m.Return(m.Int32Constant(0 - constant));
1401 FOR_UINT32_INPUTS(i) { 1401 FOR_UINT32_INPUTS(i) {
1402 FOR_INT32_INPUTS(j) { 1402 FOR_INT32_INPUTS(j) {
1403 FOR_UINT32_SHIFTS(shift) { 1403 FOR_UINT32_SHIFTS(shift) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1475 { 1475 {
1476 RawMachineAssemblerTester<void> m; 1476 RawMachineAssemblerTester<void> m;
1477 const Operator* shops[] = {m.machine()->Word32Sar(), 1477 const Operator* shops[] = {m.machine()->Word32Sar(),
1478 m.machine()->Word32Shl(), 1478 m.machine()->Word32Shl(),
1479 m.machine()->Word32Shr()}; 1479 m.machine()->Word32Shr()};
1480 for (size_t n = 0; n < arraysize(shops); n++) { 1480 for (size_t n = 0; n < arraysize(shops); n++) {
1481 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 1481 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
1482 kMachUint32); 1482 kMachUint32);
1483 m.Return(m.Word32Equal( 1483 m.Return(m.Word32Equal(
1484 m.Int32Sub(m.Parameter(0), 1484 m.Int32Sub(m.Parameter(0),
1485 m.NewNode(shops[n], m.Parameter(1), m.Parameter(2))), 1485 m.AddNode(shops[n], m.Parameter(1), m.Parameter(2))),
1486 m.Int32Constant(0))); 1486 m.Int32Constant(0)));
1487 FOR_UINT32_INPUTS(i) { 1487 FOR_UINT32_INPUTS(i) {
1488 FOR_INT32_INPUTS(j) { 1488 FOR_INT32_INPUTS(j) {
1489 FOR_UINT32_SHIFTS(shift) { 1489 FOR_UINT32_SHIFTS(shift) {
1490 int32_t right; 1490 int32_t right;
1491 switch (shops[n]->opcode()) { 1491 switch (shops[n]->opcode()) {
1492 default: 1492 default:
1493 UNREACHABLE(); 1493 UNREACHABLE();
1494 case IrOpcode::kWord32Sar: 1494 case IrOpcode::kWord32Sar:
1495 right = *j >> shift; 1495 right = *j >> shift;
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
2052 { 2052 {
2053 RawMachineAssemblerTester<void> m; 2053 RawMachineAssemblerTester<void> m;
2054 const Operator* shops[] = {m.machine()->Word32Sar(), 2054 const Operator* shops[] = {m.machine()->Word32Sar(),
2055 m.machine()->Word32Shl(), 2055 m.machine()->Word32Shl(),
2056 m.machine()->Word32Shr()}; 2056 m.machine()->Word32Shr()};
2057 for (size_t n = 0; n < arraysize(shops); n++) { 2057 for (size_t n = 0; n < arraysize(shops); n++) {
2058 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 2058 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
2059 kMachUint32); 2059 kMachUint32);
2060 MLabel blocka, blockb; 2060 MLabel blocka, blockb;
2061 m.Branch(m.Word32Equal(m.Word32And(m.Parameter(0), 2061 m.Branch(m.Word32Equal(m.Word32And(m.Parameter(0),
2062 m.NewNode(shops[n], m.Parameter(1), 2062 m.AddNode(shops[n], m.Parameter(1),
2063 m.Parameter(2))), 2063 m.Parameter(2))),
2064 m.Int32Constant(0)), 2064 m.Int32Constant(0)),
2065 &blocka, &blockb); 2065 &blocka, &blockb);
2066 m.Bind(&blocka); 2066 m.Bind(&blocka);
2067 m.Return(m.Int32Constant(constant)); 2067 m.Return(m.Int32Constant(constant));
2068 m.Bind(&blockb); 2068 m.Bind(&blockb);
2069 m.Return(m.Int32Constant(0 - constant)); 2069 m.Return(m.Int32Constant(0 - constant));
2070 FOR_UINT32_INPUTS(i) { 2070 FOR_UINT32_INPUTS(i) {
2071 FOR_INT32_INPUTS(j) { 2071 FOR_INT32_INPUTS(j) {
2072 FOR_UINT32_SHIFTS(shift) { 2072 FOR_UINT32_SHIFTS(shift) {
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
2280 { 2280 {
2281 RawMachineAssemblerTester<void> m; 2281 RawMachineAssemblerTester<void> m;
2282 const Operator* shops[] = {m.machine()->Word32Sar(), 2282 const Operator* shops[] = {m.machine()->Word32Sar(),
2283 m.machine()->Word32Shl(), 2283 m.machine()->Word32Shl(),
2284 m.machine()->Word32Shr()}; 2284 m.machine()->Word32Shr()};
2285 for (size_t n = 0; n < arraysize(shops); n++) { 2285 for (size_t n = 0; n < arraysize(shops); n++) {
2286 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 2286 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
2287 kMachUint32); 2287 kMachUint32);
2288 MLabel blocka, blockb; 2288 MLabel blocka, blockb;
2289 m.Branch(m.Word32Equal(m.Word32Or(m.Parameter(0), 2289 m.Branch(m.Word32Equal(m.Word32Or(m.Parameter(0),
2290 m.NewNode(shops[n], m.Parameter(1), 2290 m.AddNode(shops[n], m.Parameter(1),
2291 m.Parameter(2))), 2291 m.Parameter(2))),
2292 m.Int32Constant(0)), 2292 m.Int32Constant(0)),
2293 &blocka, &blockb); 2293 &blocka, &blockb);
2294 m.Bind(&blocka); 2294 m.Bind(&blocka);
2295 m.Return(m.Int32Constant(constant)); 2295 m.Return(m.Int32Constant(constant));
2296 m.Bind(&blockb); 2296 m.Bind(&blockb);
2297 m.Return(m.Int32Constant(0 - constant)); 2297 m.Return(m.Int32Constant(0 - constant));
2298 FOR_UINT32_INPUTS(i) { 2298 FOR_UINT32_INPUTS(i) {
2299 FOR_INT32_INPUTS(j) { 2299 FOR_INT32_INPUTS(j) {
2300 FOR_UINT32_SHIFTS(shift) { 2300 FOR_UINT32_SHIFTS(shift) {
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
2505 { 2505 {
2506 RawMachineAssemblerTester<void> m; 2506 RawMachineAssemblerTester<void> m;
2507 const Operator* shops[] = {m.machine()->Word32Sar(), 2507 const Operator* shops[] = {m.machine()->Word32Sar(),
2508 m.machine()->Word32Shl(), 2508 m.machine()->Word32Shl(),
2509 m.machine()->Word32Shr()}; 2509 m.machine()->Word32Shr()};
2510 for (size_t n = 0; n < arraysize(shops); n++) { 2510 for (size_t n = 0; n < arraysize(shops); n++) {
2511 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32, 2511 RawMachineAssemblerTester<int32_t> m(kMachUint32, kMachInt32,
2512 kMachUint32); 2512 kMachUint32);
2513 MLabel blocka, blockb; 2513 MLabel blocka, blockb;
2514 m.Branch(m.Word32Equal(m.Word32Xor(m.Parameter(0), 2514 m.Branch(m.Word32Equal(m.Word32Xor(m.Parameter(0),
2515 m.NewNode(shops[n], m.Parameter(1), 2515 m.AddNode(shops[n], m.Parameter(1),
2516 m.Parameter(2))), 2516 m.Parameter(2))),
2517 m.Int32Constant(0)), 2517 m.Int32Constant(0)),
2518 &blocka, &blockb); 2518 &blocka, &blockb);
2519 m.Bind(&blocka); 2519 m.Bind(&blocka);
2520 m.Return(m.Int32Constant(constant)); 2520 m.Return(m.Int32Constant(constant));
2521 m.Bind(&blockb); 2521 m.Bind(&blockb);
2522 m.Return(m.Int32Constant(0 - constant)); 2522 m.Return(m.Int32Constant(0 - constant));
2523 FOR_UINT32_INPUTS(i) { 2523 FOR_UINT32_INPUTS(i) {
2524 FOR_INT32_INPUTS(j) { 2524 FOR_INT32_INPUTS(j) {
2525 FOR_UINT32_SHIFTS(shift) { 2525 FOR_UINT32_SHIFTS(shift) {
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
3015 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(), 3015 m.machine()->Int32Mul(), m.machine()->Int32MulHigh(),
3016 m.machine()->Int32Div(), m.machine()->Uint32Div(), 3016 m.machine()->Int32Div(), m.machine()->Uint32Div(),
3017 m.machine()->Int32Mod(), m.machine()->Uint32Mod(), 3017 m.machine()->Int32Mod(), m.machine()->Uint32Mod(),
3018 m.machine()->Uint32MulHigh(), m.machine()->Int32LessThan(), 3018 m.machine()->Uint32MulHigh(), m.machine()->Int32LessThan(),
3019 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(), 3019 m.machine()->Int32LessThanOrEqual(), m.machine()->Uint32LessThan(),
3020 m.machine()->Uint32LessThanOrEqual()}; 3020 m.machine()->Uint32LessThanOrEqual()};
3021 3021
3022 for (size_t i = 0; i < arraysize(kOps); ++i) { 3022 for (size_t i = 0; i < arraysize(kOps); ++i) {
3023 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32); 3023 RawMachineAssemblerTester<int32_t> m(kMachInt32, kMachInt32);
3024 int32_t constant = static_cast<int32_t>(0x55555 + i); 3024 int32_t constant = static_cast<int32_t>(0x55555 + i);
3025 m.NewNode(kOps[i], m.Parameter(0), m.Parameter(1)); 3025 m.AddNode(kOps[i], m.Parameter(0), m.Parameter(1));
3026 m.Return(m.Int32Constant(constant)); 3026 m.Return(m.Int32Constant(constant));
3027 3027
3028 CHECK_EQ(constant, m.Call(1, 1)); 3028 CHECK_EQ(constant, m.Call(1, 1));
3029 } 3029 }
3030 } 3030 }
3031 3031
3032 3032
3033 template <typename Type> 3033 template <typename Type>
3034 static void RunLoadImmIndex(MachineType rep) { 3034 static void RunLoadImmIndex(MachineType rep) {
3035 const int kNumElems = 3; 3035 const int kNumElems = 3;
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
3130 m.common()->Float32Constant(-1.0f), m.common()->Float32Constant(0.0f), 3130 m.common()->Float32Constant(-1.0f), m.common()->Float32Constant(0.0f),
3131 m.common()->Float32Constant(0.22f), m.common()->Float32Constant(-1.22f), 3131 m.common()->Float32Constant(0.22f), m.common()->Float32Constant(-1.22f),
3132 m.common()->Float32Constant(-1.22f), m.common()->Float32Constant(0.22f), 3132 m.common()->Float32Constant(-1.22f), m.common()->Float32Constant(0.22f),
3133 m.common()->Float32Constant(inf), m.common()->Float32Constant(0.22f), 3133 m.common()->Float32Constant(inf), m.common()->Float32Constant(0.22f),
3134 m.common()->Float32Constant(inf), m.common()->Float32Constant(-inf), 3134 m.common()->Float32Constant(inf), m.common()->Float32Constant(-inf),
3135 NULL}; 3135 NULL};
3136 3136
3137 for (int i = 0; ops[i] != NULL; i++) { 3137 for (int i = 0; ops[i] != NULL; i++) {
3138 for (int j = 0; inputs[j] != NULL; j += 2) { 3138 for (int j = 0; inputs[j] != NULL; j += 2) {
3139 RawMachineAssemblerTester<int32_t> m; 3139 RawMachineAssemblerTester<int32_t> m;
3140 Node* a = m.NewNode(inputs[j]); 3140 Node* a = m.AddNode(inputs[j]);
3141 Node* b = m.NewNode(inputs[j + 1]); 3141 Node* b = m.AddNode(inputs[j + 1]);
3142 Node* binop = m.NewNode(ops[i], a, b); 3142 Node* binop = m.AddNode(ops[i], a, b);
3143 Node* base = m.PointerConstant(&result); 3143 Node* base = m.PointerConstant(&result);
3144 Node* zero = m.IntPtrConstant(0); 3144 Node* zero = m.IntPtrConstant(0);
3145 m.Store(kMachFloat32, base, zero, binop); 3145 m.Store(kMachFloat32, base, zero, binop);
3146 m.Return(m.Int32Constant(i + j)); 3146 m.Return(m.Int32Constant(i + j));
3147 CHECK_EQ(i + j, m.Call()); 3147 CHECK_EQ(i + j, m.Call());
3148 } 3148 }
3149 } 3149 }
3150 } 3150 }
3151 3151
3152 3152
(...skipping 13 matching lines...) Expand all
3166 m.common()->Float64Constant(-1), m.common()->Float64Constant(0), 3166 m.common()->Float64Constant(-1), m.common()->Float64Constant(0),
3167 m.common()->Float64Constant(0.22), m.common()->Float64Constant(-1.22), 3167 m.common()->Float64Constant(0.22), m.common()->Float64Constant(-1.22),
3168 m.common()->Float64Constant(-1.22), m.common()->Float64Constant(0.22), 3168 m.common()->Float64Constant(-1.22), m.common()->Float64Constant(0.22),
3169 m.common()->Float64Constant(inf), m.common()->Float64Constant(0.22), 3169 m.common()->Float64Constant(inf), m.common()->Float64Constant(0.22),
3170 m.common()->Float64Constant(inf), m.common()->Float64Constant(-inf), 3170 m.common()->Float64Constant(inf), m.common()->Float64Constant(-inf),
3171 NULL}; 3171 NULL};
3172 3172
3173 for (int i = 0; ops[i] != NULL; i++) { 3173 for (int i = 0; ops[i] != NULL; i++) {
3174 for (int j = 0; inputs[j] != NULL; j += 2) { 3174 for (int j = 0; inputs[j] != NULL; j += 2) {
3175 RawMachineAssemblerTester<int32_t> m; 3175 RawMachineAssemblerTester<int32_t> m;
3176 Node* a = m.NewNode(inputs[j]); 3176 Node* a = m.AddNode(inputs[j]);
3177 Node* b = m.NewNode(inputs[j + 1]); 3177 Node* b = m.AddNode(inputs[j + 1]);
3178 Node* binop = m.NewNode(ops[i], a, b); 3178 Node* binop = m.AddNode(ops[i], a, b);
3179 Node* base = m.PointerConstant(&result); 3179 Node* base = m.PointerConstant(&result);
3180 Node* zero = m.Int32Constant(0); 3180 Node* zero = m.Int32Constant(0);
3181 m.Store(kMachFloat64, base, zero, binop); 3181 m.Store(kMachFloat64, base, zero, binop);
3182 m.Return(m.Int32Constant(i + j)); 3182 m.Return(m.Int32Constant(i + j));
3183 CHECK_EQ(i + j, m.Call()); 3183 CHECK_EQ(i + j, m.Call());
3184 } 3184 }
3185 } 3185 }
3186 } 3186 }
3187 3187
3188 3188
3189 TEST(RunDeadFloat32Binops) { 3189 TEST(RunDeadFloat32Binops) {
3190 RawMachineAssemblerTester<int32_t> m; 3190 RawMachineAssemblerTester<int32_t> m;
3191 3191
3192 const Operator* ops[] = {m.machine()->Float32Add(), m.machine()->Float32Sub(), 3192 const Operator* ops[] = {m.machine()->Float32Add(), m.machine()->Float32Sub(),
3193 m.machine()->Float32Mul(), m.machine()->Float32Div(), 3193 m.machine()->Float32Mul(), m.machine()->Float32Div(),
3194 NULL}; 3194 NULL};
3195 3195
3196 for (int i = 0; ops[i] != NULL; i++) { 3196 for (int i = 0; ops[i] != NULL; i++) {
3197 RawMachineAssemblerTester<int32_t> m; 3197 RawMachineAssemblerTester<int32_t> m;
3198 int constant = 0x53355 + i; 3198 int constant = 0x53355 + i;
3199 m.NewNode(ops[i], m.Float32Constant(0.1f), m.Float32Constant(1.11f)); 3199 m.AddNode(ops[i], m.Float32Constant(0.1f), m.Float32Constant(1.11f));
3200 m.Return(m.Int32Constant(constant)); 3200 m.Return(m.Int32Constant(constant));
3201 CHECK_EQ(constant, m.Call()); 3201 CHECK_EQ(constant, m.Call());
3202 } 3202 }
3203 } 3203 }
3204 3204
3205 3205
3206 TEST(RunDeadFloat64Binops) { 3206 TEST(RunDeadFloat64Binops) {
3207 RawMachineAssemblerTester<int32_t> m; 3207 RawMachineAssemblerTester<int32_t> m;
3208 3208
3209 const Operator* ops[] = {m.machine()->Float64Add(), m.machine()->Float64Sub(), 3209 const Operator* ops[] = {m.machine()->Float64Add(), m.machine()->Float64Sub(),
3210 m.machine()->Float64Mul(), m.machine()->Float64Div(), 3210 m.machine()->Float64Mul(), m.machine()->Float64Div(),
3211 m.machine()->Float64Mod(), NULL}; 3211 m.machine()->Float64Mod(), NULL};
3212 3212
3213 for (int i = 0; ops[i] != NULL; i++) { 3213 for (int i = 0; ops[i] != NULL; i++) {
3214 RawMachineAssemblerTester<int32_t> m; 3214 RawMachineAssemblerTester<int32_t> m;
3215 int constant = 0x53355 + i; 3215 int constant = 0x53355 + i;
3216 m.NewNode(ops[i], m.Float64Constant(0.1), m.Float64Constant(1.11)); 3216 m.AddNode(ops[i], m.Float64Constant(0.1), m.Float64Constant(1.11));
3217 m.Return(m.Int32Constant(constant)); 3217 m.Return(m.Int32Constant(constant));
3218 CHECK_EQ(constant, m.Call()); 3218 CHECK_EQ(constant, m.Call());
3219 } 3219 }
3220 } 3220 }
3221 3221
3222 3222
3223 TEST(RunFloat32AddP) { 3223 TEST(RunFloat32AddP) {
3224 RawMachineAssemblerTester<int32_t> m; 3224 RawMachineAssemblerTester<int32_t> m;
3225 Float32BinopTester bt(&m); 3225 Float32BinopTester bt(&m);
3226 3226
(...skipping 1055 matching lines...) Expand 10 before | Expand all | Expand 10 after
4282 4282
4283 double nan = std::numeric_limits<double>::quiet_NaN(); 4283 double nan = std::numeric_limits<double>::quiet_NaN();
4284 4284
4285 FOR_FLOAT64_INPUTS(i) { 4285 FOR_FLOAT64_INPUTS(i) {
4286 for (size_t o = 0; o < arraysize(operators); ++o) { 4286 for (size_t o = 0; o < arraysize(operators); ++o) {
4287 for (int j = 0; j < 2; j++) { 4287 for (int j = 0; j < 2; j++) {
4288 RawMachineAssemblerTester<int32_t> m; 4288 RawMachineAssemblerTester<int32_t> m;
4289 Node* a = m.Float64Constant(*i); 4289 Node* a = m.Float64Constant(*i);
4290 Node* b = m.Float64Constant(nan); 4290 Node* b = m.Float64Constant(nan);
4291 if (j == 1) std::swap(a, b); 4291 if (j == 1) std::swap(a, b);
4292 m.Return(m.NewNode(operators[o], a, b)); 4292 m.Return(m.AddNode(operators[o], a, b));
4293 CHECK_EQ(0, m.Call()); 4293 CHECK_EQ(0, m.Call());
4294 } 4294 }
4295 } 4295 }
4296 } 4296 }
4297 } 4297 }
4298 4298
4299 4299
4300 TEST(RunFloat64Equal) { 4300 TEST(RunFloat64Equal) {
4301 double input_a = 0.0; 4301 double input_a = 0.0;
4302 double input_b = 0.0; 4302 double input_b = 0.0;
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after
5280 #endif // USE_SIMULATOR 5280 #endif // USE_SIMULATOR
5281 5281
5282 #if V8_TARGET_ARCH_64_BIT 5282 #if V8_TARGET_ARCH_64_BIT
5283 TEST(RunCheckedLoadInt64) { 5283 TEST(RunCheckedLoadInt64) {
5284 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL}; 5284 int64_t buffer[] = {0x66bbccddeeff0011LL, 0x1122334455667788LL};
5285 RawMachineAssemblerTester<int64_t> m(kMachInt32); 5285 RawMachineAssemblerTester<int64_t> m(kMachInt32);
5286 Node* base = m.PointerConstant(buffer); 5286 Node* base = m.PointerConstant(buffer);
5287 Node* index = m.Parameter(0); 5287 Node* index = m.Parameter(0);
5288 Node* length = m.Int32Constant(16); 5288 Node* length = m.Int32Constant(16);
5289 Node* load = 5289 Node* load =
5290 m.NewNode(m.machine()->CheckedLoad(kMachInt64), base, index, length); 5290 m.AddNode(m.machine()->CheckedLoad(kMachInt64), base, index, length);
5291 m.Return(load); 5291 m.Return(load);
5292 5292
5293 CHECK_EQ(buffer[0], m.Call(0)); 5293 CHECK_EQ(buffer[0], m.Call(0));
5294 CHECK_EQ(buffer[1], m.Call(8)); 5294 CHECK_EQ(buffer[1], m.Call(8));
5295 CHECK_EQ(0, m.Call(16)); 5295 CHECK_EQ(0, m.Call(16));
5296 } 5296 }
5297 5297
5298 5298
5299 TEST(RunCheckedStoreInt64) { 5299 TEST(RunCheckedStoreInt64) {
5300 const int64_t write = 0x5566778899aabbLL; 5300 const int64_t write = 0x5566778899aabbLL;
5301 const int64_t before = 0x33bbccddeeff0011LL; 5301 const int64_t before = 0x33bbccddeeff0011LL;
5302 int64_t buffer[] = {before, before}; 5302 int64_t buffer[] = {before, before};
5303 RawMachineAssemblerTester<int32_t> m(kMachInt32); 5303 RawMachineAssemblerTester<int32_t> m(kMachInt32);
5304 Node* base = m.PointerConstant(buffer); 5304 Node* base = m.PointerConstant(buffer);
5305 Node* index = m.Parameter(0); 5305 Node* index = m.Parameter(0);
5306 Node* length = m.Int32Constant(16); 5306 Node* length = m.Int32Constant(16);
5307 Node* value = m.Int64Constant(write); 5307 Node* value = m.Int64Constant(write);
5308 Node* store = m.NewNode(m.machine()->CheckedStore(kMachInt64), base, index, 5308 Node* store = m.AddNode(m.machine()->CheckedStore(kMachInt64), base, index,
5309 length, value); 5309 length, value);
5310 USE(store); 5310 USE(store);
5311 m.Return(m.Int32Constant(11)); 5311 m.Return(m.Int32Constant(11));
5312 5312
5313 CHECK_EQ(11, m.Call(16)); 5313 CHECK_EQ(11, m.Call(16));
5314 CHECK_EQ(before, buffer[0]); 5314 CHECK_EQ(before, buffer[0]);
5315 CHECK_EQ(before, buffer[1]); 5315 CHECK_EQ(before, buffer[1]);
5316 5316
5317 CHECK_EQ(11, m.Call(0)); 5317 CHECK_EQ(11, m.Call(0));
5318 CHECK_EQ(write, buffer[0]); 5318 CHECK_EQ(write, buffer[0]);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
5381 &output, kMachFloat32, 5381 &output, kMachFloat32,
5382 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, kMachInt32))); 5382 m.BitcastInt32ToFloat32(m.LoadFromPointer(&input, kMachInt32)));
5383 m.Return(m.Int32Constant(11)); 5383 m.Return(m.Int32Constant(11));
5384 FOR_INT32_INPUTS(i) { 5384 FOR_INT32_INPUTS(i) {
5385 input = *i; 5385 input = *i;
5386 CHECK_EQ(11, m.Call()); 5386 CHECK_EQ(11, m.Call());
5387 float expected = bit_cast<float>(input); 5387 float expected = bit_cast<float>(input);
5388 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output)); 5388 CHECK_EQ(bit_cast<int32_t>(expected), bit_cast<int32_t>(output));
5389 } 5389 }
5390 } 5390 }
OLDNEW
« no previous file with comments | « test/cctest/compiler/test-node.cc ('k') | test/cctest/compiler/test-simplified-lowering.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698