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

Side by Side Diff: test/cctest/compiler/test-simplified-lowering.cc

Issue 501323002: Replace our homegrown ARRAY_SIZE() with Chrome's arraysize(). (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 3 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 | Annotate | Revision Log
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 <limits> 5 #include <limits>
6 6
7 #include "src/compiler/control-builders.h" 7 #include "src/compiler/control-builders.h"
8 #include "src/compiler/generic-node-inl.h" 8 #include "src/compiler/generic-node-inl.h"
9 #include "src/compiler/graph-visualizer.h" 9 #include "src/compiler/graph-visualizer.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 if (i == (index + 1)) expected = index; 240 if (i == (index + 1)) expected = index;
241 CHECK_EQ(data[i], expected); 241 CHECK_EQ(data[i], expected);
242 } 242 }
243 } 243 }
244 } 244 }
245 245
246 246
247 TEST(RunLoadFieldFromUntaggedBase) { 247 TEST(RunLoadFieldFromUntaggedBase) {
248 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3)}; 248 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3)};
249 249
250 for (size_t i = 0; i < ARRAY_SIZE(smis); i++) { 250 for (size_t i = 0; i < arraysize(smis); i++) {
251 int offset = static_cast<int>(i * sizeof(Smi*)); 251 int offset = static_cast<int>(i * sizeof(Smi*));
252 FieldAccess access = {kUntaggedBase, offset, Handle<Name>(), 252 FieldAccess access = {kUntaggedBase, offset, Handle<Name>(),
253 Type::Integral32(), kMachAnyTagged}; 253 Type::Integral32(), kMachAnyTagged};
254 254
255 SimplifiedLoweringTester<Object*> t; 255 SimplifiedLoweringTester<Object*> t;
256 Node* load = t.LoadField(access, t.PointerConstant(smis)); 256 Node* load = t.LoadField(access, t.PointerConstant(smis));
257 t.Return(load); 257 t.Return(load);
258 t.LowerAllNodes(); 258 t.LowerAllNodes();
259 259
260 if (!Pipeline::SupportedTarget()) continue; 260 if (!Pipeline::SupportedTarget()) continue;
261 261
262 for (int j = -5; j <= 5; j++) { 262 for (int j = -5; j <= 5; j++) {
263 Smi* expected = Smi::FromInt(j); 263 Smi* expected = Smi::FromInt(j);
264 smis[i] = expected; 264 smis[i] = expected;
265 CHECK_EQ(expected, t.Call()); 265 CHECK_EQ(expected, t.Call());
266 } 266 }
267 } 267 }
268 } 268 }
269 269
270 270
271 TEST(RunStoreFieldToUntaggedBase) { 271 TEST(RunStoreFieldToUntaggedBase) {
272 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3)}; 272 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3)};
273 273
274 for (size_t i = 0; i < ARRAY_SIZE(smis); i++) { 274 for (size_t i = 0; i < arraysize(smis); i++) {
275 int offset = static_cast<int>(i * sizeof(Smi*)); 275 int offset = static_cast<int>(i * sizeof(Smi*));
276 FieldAccess access = {kUntaggedBase, offset, Handle<Name>(), 276 FieldAccess access = {kUntaggedBase, offset, Handle<Name>(),
277 Type::Integral32(), kMachAnyTagged}; 277 Type::Integral32(), kMachAnyTagged};
278 278
279 SimplifiedLoweringTester<Object*> t(kMachAnyTagged); 279 SimplifiedLoweringTester<Object*> t(kMachAnyTagged);
280 Node* p0 = t.Parameter(0); 280 Node* p0 = t.Parameter(0);
281 t.StoreField(access, t.PointerConstant(smis), p0); 281 t.StoreField(access, t.PointerConstant(smis), p0);
282 t.Return(p0); 282 t.Return(p0);
283 t.LowerAllNodes(); 283 t.LowerAllNodes();
284 284
285 if (!Pipeline::SupportedTarget()) continue; 285 if (!Pipeline::SupportedTarget()) continue;
286 286
287 for (int j = -5; j <= 5; j++) { 287 for (int j = -5; j <= 5; j++) {
288 Smi* expected = Smi::FromInt(j); 288 Smi* expected = Smi::FromInt(j);
289 smis[i] = Smi::FromInt(-100); 289 smis[i] = Smi::FromInt(-100);
290 CHECK_EQ(expected, t.Call(expected)); 290 CHECK_EQ(expected, t.Call(expected));
291 CHECK_EQ(expected, smis[i]); 291 CHECK_EQ(expected, smis[i]);
292 } 292 }
293 } 293 }
294 } 294 }
295 295
296 296
297 TEST(RunLoadElementFromUntaggedBase) { 297 TEST(RunLoadElementFromUntaggedBase) {
298 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3), 298 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3),
299 Smi::FromInt(4), Smi::FromInt(5)}; 299 Smi::FromInt(4), Smi::FromInt(5)};
300 300
301 for (size_t i = 0; i < ARRAY_SIZE(smis); i++) { // for header sizes 301 for (size_t i = 0; i < arraysize(smis); i++) { // for header sizes
302 for (size_t j = 0; (i + j) < ARRAY_SIZE(smis); j++) { // for element index 302 for (size_t j = 0; (i + j) < arraysize(smis); j++) { // for element index
303 int offset = static_cast<int>(i * sizeof(Smi*)); 303 int offset = static_cast<int>(i * sizeof(Smi*));
304 ElementAccess access = {kUntaggedBase, offset, Type::Integral32(), 304 ElementAccess access = {kUntaggedBase, offset, Type::Integral32(),
305 kMachAnyTagged}; 305 kMachAnyTagged};
306 306
307 SimplifiedLoweringTester<Object*> t; 307 SimplifiedLoweringTester<Object*> t;
308 Node* load = t.LoadElement(access, t.PointerConstant(smis), 308 Node* load = t.LoadElement(access, t.PointerConstant(smis),
309 t.Int32Constant(static_cast<int>(j))); 309 t.Int32Constant(static_cast<int>(j)));
310 t.Return(load); 310 t.Return(load);
311 t.LowerAllNodes(); 311 t.LowerAllNodes();
312 312
313 if (!Pipeline::SupportedTarget()) continue; 313 if (!Pipeline::SupportedTarget()) continue;
314 314
315 for (int k = -5; k <= 5; k++) { 315 for (int k = -5; k <= 5; k++) {
316 Smi* expected = Smi::FromInt(k); 316 Smi* expected = Smi::FromInt(k);
317 smis[i + j] = expected; 317 smis[i + j] = expected;
318 CHECK_EQ(expected, t.Call()); 318 CHECK_EQ(expected, t.Call());
319 } 319 }
320 } 320 }
321 } 321 }
322 } 322 }
323 323
324 324
325 TEST(RunStoreElementFromUntaggedBase) { 325 TEST(RunStoreElementFromUntaggedBase) {
326 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3), 326 Smi* smis[] = {Smi::FromInt(1), Smi::FromInt(2), Smi::FromInt(3),
327 Smi::FromInt(4), Smi::FromInt(5)}; 327 Smi::FromInt(4), Smi::FromInt(5)};
328 328
329 for (size_t i = 0; i < ARRAY_SIZE(smis); i++) { // for header sizes 329 for (size_t i = 0; i < arraysize(smis); i++) { // for header sizes
330 for (size_t j = 0; (i + j) < ARRAY_SIZE(smis); j++) { // for element index 330 for (size_t j = 0; (i + j) < arraysize(smis); j++) { // for element index
331 int offset = static_cast<int>(i * sizeof(Smi*)); 331 int offset = static_cast<int>(i * sizeof(Smi*));
332 ElementAccess access = {kUntaggedBase, offset, Type::Integral32(), 332 ElementAccess access = {kUntaggedBase, offset, Type::Integral32(),
333 kMachAnyTagged}; 333 kMachAnyTagged};
334 334
335 SimplifiedLoweringTester<Object*> t(kMachAnyTagged); 335 SimplifiedLoweringTester<Object*> t(kMachAnyTagged);
336 Node* p0 = t.Parameter(0); 336 Node* p0 = t.Parameter(0);
337 t.StoreElement(access, t.PointerConstant(smis), 337 t.StoreElement(access, t.PointerConstant(smis),
338 t.Int32Constant(static_cast<int>(j)), p0); 338 t.Int32Constant(static_cast<int>(j)), p0);
339 t.Return(p0); 339 t.Return(p0);
340 t.LowerAllNodes(); 340 t.LowerAllNodes();
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 } 550 }
551 } 551 }
552 } 552 }
553 } 553 }
554 } 554 }
555 555
556 556
557 TEST(RunAccessTests_uint8) { 557 TEST(RunAccessTests_uint8) {
558 uint8_t data[] = {0x07, 0x16, 0x25, 0x34, 0x43, 0x99, 558 uint8_t data[] = {0x07, 0x16, 0x25, 0x34, 0x43, 0x99,
559 0xab, 0x78, 0x89, 0x19, 0x2b, 0x38}; 559 0xab, 0x78, 0x89, 0x19, 0x2b, 0x38};
560 RunAccessTest<uint8_t>(kMachInt8, data, ARRAY_SIZE(data)); 560 RunAccessTest<uint8_t>(kMachInt8, data, arraysize(data));
561 } 561 }
562 562
563 563
564 TEST(RunAccessTests_uint16) { 564 TEST(RunAccessTests_uint16) {
565 uint16_t data[] = {0x071a, 0x162b, 0x253c, 0x344d, 0x435e, 0x7777}; 565 uint16_t data[] = {0x071a, 0x162b, 0x253c, 0x344d, 0x435e, 0x7777};
566 RunAccessTest<uint16_t>(kMachInt16, data, ARRAY_SIZE(data)); 566 RunAccessTest<uint16_t>(kMachInt16, data, arraysize(data));
567 } 567 }
568 568
569 569
570 TEST(RunAccessTests_int32) { 570 TEST(RunAccessTests_int32) {
571 int32_t data[] = {-211, 211, 628347, 2000000000, -2000000000, -1, -100000034}; 571 int32_t data[] = {-211, 211, 628347, 2000000000, -2000000000, -1, -100000034};
572 RunAccessTest<int32_t>(kMachInt32, data, ARRAY_SIZE(data)); 572 RunAccessTest<int32_t>(kMachInt32, data, arraysize(data));
573 } 573 }
574 574
575 575
576 #define V8_2PART_INT64(a, b) (((static_cast<int64_t>(a) << 32) + 0x##b##u)) 576 #define V8_2PART_INT64(a, b) (((static_cast<int64_t>(a) << 32) + 0x##b##u))
577 577
578 578
579 TEST(RunAccessTests_int64) { 579 TEST(RunAccessTests_int64) {
580 if (kPointerSize != 8) return; 580 if (kPointerSize != 8) return;
581 int64_t data[] = {V8_2PART_INT64(0x10111213, 14151617), 581 int64_t data[] = {V8_2PART_INT64(0x10111213, 14151617),
582 V8_2PART_INT64(0x20212223, 24252627), 582 V8_2PART_INT64(0x20212223, 24252627),
583 V8_2PART_INT64(0x30313233, 34353637), 583 V8_2PART_INT64(0x30313233, 34353637),
584 V8_2PART_INT64(0xa0a1a2a3, a4a5a6a7), 584 V8_2PART_INT64(0xa0a1a2a3, a4a5a6a7),
585 V8_2PART_INT64(0xf0f1f2f3, f4f5f6f7)}; 585 V8_2PART_INT64(0xf0f1f2f3, f4f5f6f7)};
586 RunAccessTest<int64_t>(kMachInt64, data, ARRAY_SIZE(data)); 586 RunAccessTest<int64_t>(kMachInt64, data, arraysize(data));
587 } 587 }
588 588
589 589
590 TEST(RunAccessTests_float64) { 590 TEST(RunAccessTests_float64) {
591 double data[] = {1.25, -1.25, 2.75, 11.0, 11100.8}; 591 double data[] = {1.25, -1.25, 2.75, 11.0, 11100.8};
592 RunAccessTest<double>(kMachFloat64, data, ARRAY_SIZE(data)); 592 RunAccessTest<double>(kMachFloat64, data, arraysize(data));
593 } 593 }
594 594
595 595
596 TEST(RunAccessTests_Smi) { 596 TEST(RunAccessTests_Smi) {
597 Smi* data[] = {Smi::FromInt(-1), Smi::FromInt(-9), 597 Smi* data[] = {Smi::FromInt(-1), Smi::FromInt(-9),
598 Smi::FromInt(0), Smi::FromInt(666), 598 Smi::FromInt(0), Smi::FromInt(666),
599 Smi::FromInt(77777), Smi::FromInt(Smi::kMaxValue)}; 599 Smi::FromInt(77777), Smi::FromInt(Smi::kMaxValue)};
600 RunAccessTest<Smi*>(kMachAnyTagged, data, ARRAY_SIZE(data)); 600 RunAccessTest<Smi*>(kMachAnyTagged, data, arraysize(data));
601 } 601 }
602 602
603 603
604 // Fills in most of the nodes of the graph in order to make tests shorter. 604 // Fills in most of the nodes of the graph in order to make tests shorter.
605 class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders { 605 class TestingGraph : public HandleAndZoneScope, public GraphAndBuilders {
606 public: 606 public:
607 Typer typer; 607 Typer typer;
608 JSGraph jsgraph; 608 JSGraph jsgraph;
609 Node* p0; 609 Node* p0;
610 Node* p1; 610 Node* p1;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 t.CheckLoweringBinop(IrOpcode::kUint32LessThan, 806 t.CheckLoweringBinop(IrOpcode::kUint32LessThan,
807 t.simplified()->NumberLessThan()); 807 t.simplified()->NumberLessThan());
808 t.CheckLoweringBinop(IrOpcode::kUint32LessThanOrEqual, 808 t.CheckLoweringBinop(IrOpcode::kUint32LessThanOrEqual,
809 t.simplified()->NumberLessThanOrEqual()); 809 t.simplified()->NumberLessThanOrEqual());
810 } 810 }
811 811
812 812
813 TEST(LowerNumberCmp_to_float64) { 813 TEST(LowerNumberCmp_to_float64) {
814 static Type* types[] = {Type::Number(), Type::Any()}; 814 static Type* types[] = {Type::Number(), Type::Any()};
815 815
816 for (size_t i = 0; i < ARRAY_SIZE(types); i++) { 816 for (size_t i = 0; i < arraysize(types); i++) {
817 TestingGraph t(types[i], types[i]); 817 TestingGraph t(types[i], types[i]);
818 818
819 t.CheckLoweringBinop(IrOpcode::kFloat64Equal, 819 t.CheckLoweringBinop(IrOpcode::kFloat64Equal,
820 t.simplified()->NumberEqual()); 820 t.simplified()->NumberEqual());
821 t.CheckLoweringBinop(IrOpcode::kFloat64LessThan, 821 t.CheckLoweringBinop(IrOpcode::kFloat64LessThan,
822 t.simplified()->NumberLessThan()); 822 t.simplified()->NumberLessThan());
823 t.CheckLoweringBinop(IrOpcode::kFloat64LessThanOrEqual, 823 t.CheckLoweringBinop(IrOpcode::kFloat64LessThanOrEqual,
824 t.simplified()->NumberLessThanOrEqual()); 824 t.simplified()->NumberLessThanOrEqual());
825 } 825 }
826 } 826 }
(...skipping 15 matching lines...) Expand all
842 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add, 842 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Add,
843 t.simplified()->NumberAdd(), 843 t.simplified()->NumberAdd(),
844 t.simplified()->NumberToUint32()); 844 t.simplified()->NumberToUint32());
845 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub, 845 t.CheckLoweringTruncatedBinop(IrOpcode::kInt32Sub,
846 t.simplified()->NumberSubtract(), 846 t.simplified()->NumberSubtract(),
847 t.simplified()->NumberToUint32()); 847 t.simplified()->NumberToUint32());
848 } 848 }
849 849
850 850
851 TEST(LowerNumberAddSub_to_float64) { 851 TEST(LowerNumberAddSub_to_float64) {
852 for (size_t i = 0; i < ARRAY_SIZE(test_types); i++) { 852 for (size_t i = 0; i < arraysize(test_types); i++) {
853 TestingGraph t(test_types[i], test_types[i]); 853 TestingGraph t(test_types[i], test_types[i]);
854 854
855 t.CheckLoweringBinop(IrOpcode::kFloat64Add, t.simplified()->NumberAdd()); 855 t.CheckLoweringBinop(IrOpcode::kFloat64Add, t.simplified()->NumberAdd());
856 t.CheckLoweringBinop(IrOpcode::kFloat64Sub, 856 t.CheckLoweringBinop(IrOpcode::kFloat64Sub,
857 t.simplified()->NumberSubtract()); 857 t.simplified()->NumberSubtract());
858 } 858 }
859 } 859 }
860 860
861 861
862 TEST(LowerNumberDivMod_to_float64) { 862 TEST(LowerNumberDivMod_to_float64) {
863 for (size_t i = 0; i < ARRAY_SIZE(test_types); i++) { 863 for (size_t i = 0; i < arraysize(test_types); i++) {
864 TestingGraph t(test_types[i], test_types[i]); 864 TestingGraph t(test_types[i], test_types[i]);
865 865
866 t.CheckLoweringBinop(IrOpcode::kFloat64Div, t.simplified()->NumberDivide()); 866 t.CheckLoweringBinop(IrOpcode::kFloat64Div, t.simplified()->NumberDivide());
867 t.CheckLoweringBinop(IrOpcode::kFloat64Mod, 867 t.CheckLoweringBinop(IrOpcode::kFloat64Mod,
868 t.simplified()->NumberModulus()); 868 t.simplified()->NumberModulus());
869 } 869 }
870 } 870 }
871 871
872 872
873 static void CheckChangeOf(IrOpcode::Value change, Node* of, Node* node) { 873 static void CheckChangeOf(IrOpcode::Value change, Node* of, Node* node) {
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1050 1050
1051 TEST(InsertChangesAroundInt32Binops) { 1051 TEST(InsertChangesAroundInt32Binops) {
1052 TestingGraph t(Type::Signed32(), Type::Signed32()); 1052 TestingGraph t(Type::Signed32(), Type::Signed32());
1053 1053
1054 Operator* ops[] = {t.machine()->Int32Add(), t.machine()->Int32Sub(), 1054 Operator* ops[] = {t.machine()->Int32Add(), t.machine()->Int32Sub(),
1055 t.machine()->Int32Mul(), t.machine()->Int32Div(), 1055 t.machine()->Int32Mul(), t.machine()->Int32Div(),
1056 t.machine()->Int32Mod(), t.machine()->Word32And(), 1056 t.machine()->Int32Mod(), t.machine()->Word32And(),
1057 t.machine()->Word32Or(), t.machine()->Word32Xor(), 1057 t.machine()->Word32Or(), t.machine()->Word32Xor(),
1058 t.machine()->Word32Shl(), t.machine()->Word32Sar()}; 1058 t.machine()->Word32Shl(), t.machine()->Word32Sar()};
1059 1059
1060 for (size_t i = 0; i < ARRAY_SIZE(ops); i++) { 1060 for (size_t i = 0; i < arraysize(ops); i++) {
1061 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToInt32, 1061 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToInt32,
1062 IrOpcode::kChangeInt32ToTagged); 1062 IrOpcode::kChangeInt32ToTagged);
1063 } 1063 }
1064 } 1064 }
1065 1065
1066 1066
1067 TEST(InsertChangesAroundInt32Cmp) { 1067 TEST(InsertChangesAroundInt32Cmp) {
1068 TestingGraph t(Type::Signed32(), Type::Signed32()); 1068 TestingGraph t(Type::Signed32(), Type::Signed32());
1069 1069
1070 Operator* ops[] = {t.machine()->Int32LessThan(), 1070 Operator* ops[] = {t.machine()->Int32LessThan(),
1071 t.machine()->Int32LessThanOrEqual()}; 1071 t.machine()->Int32LessThanOrEqual()};
1072 1072
1073 for (size_t i = 0; i < ARRAY_SIZE(ops); i++) { 1073 for (size_t i = 0; i < arraysize(ops); i++) {
1074 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToInt32, 1074 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToInt32,
1075 IrOpcode::kChangeBitToBool); 1075 IrOpcode::kChangeBitToBool);
1076 } 1076 }
1077 } 1077 }
1078 1078
1079 1079
1080 TEST(InsertChangesAroundUint32Cmp) { 1080 TEST(InsertChangesAroundUint32Cmp) {
1081 TestingGraph t(Type::Unsigned32(), Type::Unsigned32()); 1081 TestingGraph t(Type::Unsigned32(), Type::Unsigned32());
1082 1082
1083 Operator* ops[] = {t.machine()->Uint32LessThan(), 1083 Operator* ops[] = {t.machine()->Uint32LessThan(),
1084 t.machine()->Uint32LessThanOrEqual()}; 1084 t.machine()->Uint32LessThanOrEqual()};
1085 1085
1086 for (size_t i = 0; i < ARRAY_SIZE(ops); i++) { 1086 for (size_t i = 0; i < arraysize(ops); i++) {
1087 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToUint32, 1087 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToUint32,
1088 IrOpcode::kChangeBitToBool); 1088 IrOpcode::kChangeBitToBool);
1089 } 1089 }
1090 } 1090 }
1091 1091
1092 1092
1093 TEST(InsertChangesAroundFloat64Binops) { 1093 TEST(InsertChangesAroundFloat64Binops) {
1094 TestingGraph t(Type::Number(), Type::Number()); 1094 TestingGraph t(Type::Number(), Type::Number());
1095 1095
1096 Operator* ops[] = { 1096 Operator* ops[] = {
1097 t.machine()->Float64Add(), t.machine()->Float64Sub(), 1097 t.machine()->Float64Add(), t.machine()->Float64Sub(),
1098 t.machine()->Float64Mul(), t.machine()->Float64Div(), 1098 t.machine()->Float64Mul(), t.machine()->Float64Div(),
1099 t.machine()->Float64Mod(), 1099 t.machine()->Float64Mod(),
1100 }; 1100 };
1101 1101
1102 for (size_t i = 0; i < ARRAY_SIZE(ops); i++) { 1102 for (size_t i = 0; i < arraysize(ops); i++) {
1103 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64, 1103 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64,
1104 IrOpcode::kChangeFloat64ToTagged); 1104 IrOpcode::kChangeFloat64ToTagged);
1105 } 1105 }
1106 } 1106 }
1107 1107
1108 1108
1109 TEST(InsertChangesAroundFloat64Cmp) { 1109 TEST(InsertChangesAroundFloat64Cmp) {
1110 TestingGraph t(Type::Number(), Type::Number()); 1110 TestingGraph t(Type::Number(), Type::Number());
1111 1111
1112 Operator* ops[] = {t.machine()->Float64Equal(), 1112 Operator* ops[] = {t.machine()->Float64Equal(),
1113 t.machine()->Float64LessThan(), 1113 t.machine()->Float64LessThan(),
1114 t.machine()->Float64LessThanOrEqual()}; 1114 t.machine()->Float64LessThanOrEqual()};
1115 1115
1116 for (size_t i = 0; i < ARRAY_SIZE(ops); i++) { 1116 for (size_t i = 0; i < arraysize(ops); i++) {
1117 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64, 1117 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64,
1118 IrOpcode::kChangeBitToBool); 1118 IrOpcode::kChangeBitToBool);
1119 } 1119 }
1120 } 1120 }
1121 1121
1122 1122
1123 void CheckFieldAccessArithmetic(FieldAccess access, Node* load_or_store) { 1123 void CheckFieldAccessArithmetic(FieldAccess access, Node* load_or_store) {
1124 Int32Matcher index = Int32Matcher(load_or_store->InputAt(1)); 1124 Int32Matcher index = Int32Matcher(load_or_store->InputAt(1));
1125 CHECK(index.Is(access.offset - access.tag())); 1125 CHECK(index.Is(access.offset - access.tag()));
1126 } 1126 }
(...skipping 18 matching lines...) Expand all
1145 1145
1146 1146
1147 static const MachineType machine_reps[] = { 1147 static const MachineType machine_reps[] = {
1148 kRepBit, kMachInt8, kMachInt16, kMachInt32, 1148 kRepBit, kMachInt8, kMachInt16, kMachInt32,
1149 kMachInt64, kMachFloat64, kMachAnyTagged}; 1149 kMachInt64, kMachFloat64, kMachAnyTagged};
1150 1150
1151 1151
1152 TEST(LowerLoadField_to_load) { 1152 TEST(LowerLoadField_to_load) {
1153 TestingGraph t(Type::Any(), Type::Signed32()); 1153 TestingGraph t(Type::Any(), Type::Signed32());
1154 1154
1155 for (size_t i = 0; i < ARRAY_SIZE(machine_reps); i++) { 1155 for (size_t i = 0; i < arraysize(machine_reps); i++) {
1156 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1156 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1157 Handle<Name>::null(), Type::Any(), machine_reps[i]}; 1157 Handle<Name>::null(), Type::Any(), machine_reps[i]};
1158 1158
1159 Node* load = 1159 Node* load =
1160 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start); 1160 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start);
1161 Node* use = t.Use(load, machine_reps[i]); 1161 Node* use = t.Use(load, machine_reps[i]);
1162 t.Return(use); 1162 t.Return(use);
1163 t.Lower(); 1163 t.Lower();
1164 CHECK_EQ(IrOpcode::kLoad, load->opcode()); 1164 CHECK_EQ(IrOpcode::kLoad, load->opcode());
1165 CHECK_EQ(t.p0, load->InputAt(0)); 1165 CHECK_EQ(t.p0, load->InputAt(0));
1166 CheckFieldAccessArithmetic(access, load); 1166 CheckFieldAccessArithmetic(access, load);
1167 1167
1168 MachineType rep = OpParameter<MachineType>(load); 1168 MachineType rep = OpParameter<MachineType>(load);
1169 CHECK_EQ(machine_reps[i], rep); 1169 CHECK_EQ(machine_reps[i], rep);
1170 } 1170 }
1171 } 1171 }
1172 1172
1173 1173
1174 TEST(LowerStoreField_to_store) { 1174 TEST(LowerStoreField_to_store) {
1175 TestingGraph t(Type::Any(), Type::Signed32()); 1175 TestingGraph t(Type::Any(), Type::Signed32());
1176 1176
1177 for (size_t i = 0; i < ARRAY_SIZE(machine_reps); i++) { 1177 for (size_t i = 0; i < arraysize(machine_reps); i++) {
1178 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1178 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1179 Handle<Name>::null(), Type::Any(), machine_reps[i]}; 1179 Handle<Name>::null(), Type::Any(), machine_reps[i]};
1180 1180
1181 1181
1182 Node* val = t.ExampleWithOutput(machine_reps[i]); 1182 Node* val = t.ExampleWithOutput(machine_reps[i]);
1183 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, 1183 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1184 val, t.start, t.start); 1184 val, t.start, t.start);
1185 t.Effect(store); 1185 t.Effect(store);
1186 t.Lower(); 1186 t.Lower();
1187 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1187 CHECK_EQ(IrOpcode::kStore, store->opcode());
1188 CHECK_EQ(val, store->InputAt(2)); 1188 CHECK_EQ(val, store->InputAt(2));
1189 CheckFieldAccessArithmetic(access, store); 1189 CheckFieldAccessArithmetic(access, store);
1190 1190
1191 StoreRepresentation rep = OpParameter<StoreRepresentation>(store); 1191 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1192 if (machine_reps[i] & kRepTagged) { 1192 if (machine_reps[i] & kRepTagged) {
1193 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind); 1193 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind);
1194 } 1194 }
1195 CHECK_EQ(machine_reps[i], rep.machine_type); 1195 CHECK_EQ(machine_reps[i], rep.machine_type);
1196 } 1196 }
1197 } 1197 }
1198 1198
1199 1199
1200 TEST(LowerLoadElement_to_load) { 1200 TEST(LowerLoadElement_to_load) {
1201 TestingGraph t(Type::Any(), Type::Signed32()); 1201 TestingGraph t(Type::Any(), Type::Signed32());
1202 1202
1203 for (size_t i = 0; i < ARRAY_SIZE(machine_reps); i++) { 1203 for (size_t i = 0; i < arraysize(machine_reps); i++) {
1204 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1204 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1205 Type::Any(), machine_reps[i]}; 1205 Type::Any(), machine_reps[i]};
1206 1206
1207 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, 1207 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0,
1208 t.p1, t.start); 1208 t.p1, t.start);
1209 Node* use = t.Use(load, machine_reps[i]); 1209 Node* use = t.Use(load, machine_reps[i]);
1210 t.Return(use); 1210 t.Return(use);
1211 t.Lower(); 1211 t.Lower();
1212 CHECK_EQ(IrOpcode::kLoad, load->opcode()); 1212 CHECK_EQ(IrOpcode::kLoad, load->opcode());
1213 CHECK_EQ(t.p0, load->InputAt(0)); 1213 CHECK_EQ(t.p0, load->InputAt(0));
1214 CheckElementAccessArithmetic(access, load); 1214 CheckElementAccessArithmetic(access, load);
1215 1215
1216 MachineType rep = OpParameter<MachineType>(load); 1216 MachineType rep = OpParameter<MachineType>(load);
1217 CHECK_EQ(machine_reps[i], rep); 1217 CHECK_EQ(machine_reps[i], rep);
1218 } 1218 }
1219 } 1219 }
1220 1220
1221 1221
1222 TEST(LowerStoreElement_to_store) { 1222 TEST(LowerStoreElement_to_store) {
1223 TestingGraph t(Type::Any(), Type::Signed32()); 1223 TestingGraph t(Type::Any(), Type::Signed32());
1224 1224
1225 for (size_t i = 0; i < ARRAY_SIZE(machine_reps); i++) { 1225 for (size_t i = 0; i < arraysize(machine_reps); i++) {
1226 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1226 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1227 Type::Any(), machine_reps[i]}; 1227 Type::Any(), machine_reps[i]};
1228 1228
1229 Node* val = t.ExampleWithOutput(machine_reps[i]); 1229 Node* val = t.ExampleWithOutput(machine_reps[i]);
1230 Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, 1230 Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0,
1231 t.p1, val, t.start, t.start); 1231 t.p1, val, t.start, t.start);
1232 t.Effect(store); 1232 t.Effect(store);
1233 t.Lower(); 1233 t.Lower();
1234 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1234 CHECK_EQ(IrOpcode::kStore, store->opcode());
1235 CHECK_EQ(val, store->InputAt(2)); 1235 CHECK_EQ(val, store->InputAt(2));
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 1341
1342 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, 1342 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1343 t.p1, t.start, t.start); 1343 t.p1, t.start, t.start);
1344 t.Effect(store); 1344 t.Effect(store);
1345 t.Lower(); 1345 t.Lower();
1346 1346
1347 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1347 CHECK_EQ(IrOpcode::kStore, store->opcode());
1348 CHECK_EQ(t.p0, store->InputAt(0)); 1348 CHECK_EQ(t.p0, store->InputAt(0));
1349 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2)); 1349 CheckChangeOf(IrOpcode::kChangeTaggedToFloat64, t.p1, store->InputAt(2));
1350 } 1350 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698