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

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

Issue 968773004: [turbofan] Use the typer to statically detect Smis. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 9 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 | « src/compiler/typer.cc ('k') | test/unittests/compiler/change-lowering-unittest.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 <limits> 5 #include <limits>
6 6
7 #include "src/compiler/access-builder.h" 7 #include "src/compiler/access-builder.h"
8 #include "src/compiler/change-lowering.h" 8 #include "src/compiler/change-lowering.h"
9 #include "src/compiler/control-builders.h" 9 #include "src/compiler/control-builders.h"
10 #include "src/compiler/graph-reducer.h" 10 #include "src/compiler/graph-reducer.h"
(...skipping 1423 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 CHECK_EQ(t.p0, load->InputAt(0)); 1434 CHECK_EQ(t.p0, load->InputAt(0));
1435 CheckFieldAccessArithmetic(access, load); 1435 CheckFieldAccessArithmetic(access, load);
1436 1436
1437 MachineType rep = OpParameter<MachineType>(load); 1437 MachineType rep = OpParameter<MachineType>(load);
1438 CHECK_EQ(kMachineReps[i], rep); 1438 CHECK_EQ(kMachineReps[i], rep);
1439 } 1439 }
1440 } 1440 }
1441 1441
1442 1442
1443 TEST(LowerStoreField_to_store) { 1443 TEST(LowerStoreField_to_store) {
1444 TestingGraph t(Type::Any(), Type::Signed32()); 1444 {
1445 TestingGraph t(Type::Any(), Type::Signed32());
1445 1446
1446 for (size_t i = 0; i < arraysize(kMachineReps); i++) { 1447 for (size_t i = 0; i < arraysize(kMachineReps); i++) {
1447 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1448 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1448 Handle<Name>::null(), Type::Any(), kMachineReps[i]}; 1449 Handle<Name>::null(), Type::Any(), kMachineReps[i]};
1449 1450
1450 1451
1451 Node* val = t.ExampleWithOutput(kMachineReps[i]); 1452 Node* val = t.ExampleWithOutput(kMachineReps[i]);
1453 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1454 val, t.start, t.start);
1455 t.Effect(store);
1456 t.Lower();
1457 CHECK_EQ(IrOpcode::kStore, store->opcode());
1458 CHECK_EQ(val, store->InputAt(2));
1459 CheckFieldAccessArithmetic(access, store);
1460
1461 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1462 if (kMachineReps[i] & kRepTagged) {
1463 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
1464 }
1465 CHECK_EQ(kMachineReps[i], rep.machine_type());
1466 }
1467 }
1468 {
1469 TestingGraph t(Type::Any(),
1470 Type::Intersect(Type::SignedSmall(), Type::TaggedSigned()));
1471 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1472 Handle<Name>::null(), Type::Any(), kMachAnyTagged};
1452 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0, 1473 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1453 val, t.start, t.start); 1474 t.p1, t.start, t.start);
1454 t.Effect(store); 1475 t.Effect(store);
1455 t.Lower(); 1476 t.Lower();
1456 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1477 CHECK_EQ(IrOpcode::kStore, store->opcode());
1457 CHECK_EQ(val, store->InputAt(2)); 1478 CHECK_EQ(t.p1, store->InputAt(2));
1458 CheckFieldAccessArithmetic(access, store);
1459
1460 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1461 if (kMachineReps[i] & kRepTagged) {
1462 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
1463 }
1464 CHECK_EQ(kMachineReps[i], rep.machine_type());
1465 }
1466
1467 if (t.machine()->Is64()) {
1468 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1469 Handle<Name>::null(), Type::Any(), kMachAnyTagged};
1470 Node* val = t.graph()->NewNode(t.simplified()->ChangeInt32ToTagged(), t.p0);
1471 Node* store = t.graph()->NewNode(t.simplified()->StoreField(access), t.p0,
1472 val, t.start, t.start);
1473 t.Effect(store);
1474 t.Lower();
1475 CHECK_EQ(IrOpcode::kStore, store->opcode());
1476 CHECK_EQ(val, store->InputAt(2));
1477 StoreRepresentation rep = OpParameter<StoreRepresentation>(store); 1479 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1478 CHECK_EQ(kNoWriteBarrier, rep.write_barrier_kind()); 1480 CHECK_EQ(kNoWriteBarrier, rep.write_barrier_kind());
1479 } 1481 }
1480 } 1482 }
1481 1483
1482 1484
1483 TEST(LowerLoadElement_to_load) { 1485 TEST(LowerLoadElement_to_load) {
1484 TestingGraph t(Type::Any(), Type::Signed32()); 1486 TestingGraph t(Type::Any(), Type::Signed32());
1485 1487
1486 for (size_t i = 0; i < arraysize(kMachineReps); i++) { 1488 for (size_t i = 0; i < arraysize(kMachineReps); i++) {
1487 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1489 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1488 Type::Any(), kMachineReps[i]}; 1490 Type::Any(), kMachineReps[i]};
1489 1491
1490 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, 1492 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0,
1491 t.p1, t.start, t.start); 1493 t.p1, t.start, t.start);
1492 Node* use = t.Use(load, kMachineReps[i]); 1494 Node* use = t.Use(load, kMachineReps[i]);
1493 t.Return(use); 1495 t.Return(use);
1494 t.Lower(); 1496 t.Lower();
1495 CHECK_EQ(IrOpcode::kLoad, load->opcode()); 1497 CHECK_EQ(IrOpcode::kLoad, load->opcode());
1496 CHECK_EQ(t.p0, load->InputAt(0)); 1498 CHECK_EQ(t.p0, load->InputAt(0));
1497 CheckElementAccessArithmetic(access, load); 1499 CheckElementAccessArithmetic(access, load);
1498 1500
1499 MachineType rep = OpParameter<MachineType>(load); 1501 MachineType rep = OpParameter<MachineType>(load);
1500 CHECK_EQ(kMachineReps[i], rep); 1502 CHECK_EQ(kMachineReps[i], rep);
1501 } 1503 }
1502 } 1504 }
1503 1505
1504 1506
1505 TEST(LowerStoreElement_to_store) { 1507 TEST(LowerStoreElement_to_store) {
1506 TestingGraph t(Type::Any(), Type::Signed32()); 1508 {
1509 TestingGraph t(Type::Any(), Type::Signed32());
1507 1510
1508 for (size_t i = 0; i < arraysize(kMachineReps); i++) { 1511 for (size_t i = 0; i < arraysize(kMachineReps); i++) {
1512 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1513 Type::Any(), kMachineReps[i]};
1514
1515 Node* val = t.ExampleWithOutput(kMachineReps[i]);
1516 Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access),
1517 t.p0, t.p1, val, t.start, t.start);
1518 t.Effect(store);
1519 t.Lower();
1520 CHECK_EQ(IrOpcode::kStore, store->opcode());
1521 CHECK_EQ(val, store->InputAt(2));
1522 CheckElementAccessArithmetic(access, store);
1523
1524 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1525 if (kMachineReps[i] & kRepTagged) {
1526 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
1527 }
1528 CHECK_EQ(kMachineReps[i], rep.machine_type());
1529 }
1530 }
1531 {
1532 TestingGraph t(Type::Any(), Type::Signed32(),
1533 Type::Intersect(Type::SignedSmall(), Type::TaggedSigned()));
1509 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, 1534 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize,
1510 Type::Any(), kMachineReps[i]}; 1535 Type::Any(), kMachAnyTagged};
1511
1512 Node* val = t.ExampleWithOutput(kMachineReps[i]);
1513 Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0, 1536 Node* store = t.graph()->NewNode(t.simplified()->StoreElement(access), t.p0,
1514 t.p1, val, t.start, t.start); 1537 t.p1, t.p2, t.start, t.start);
1515 t.Effect(store); 1538 t.Effect(store);
1516 t.Lower(); 1539 t.Lower();
1517 CHECK_EQ(IrOpcode::kStore, store->opcode()); 1540 CHECK_EQ(IrOpcode::kStore, store->opcode());
1518 CHECK_EQ(val, store->InputAt(2)); 1541 CHECK_EQ(t.p2, store->InputAt(2));
1519 CheckElementAccessArithmetic(access, store);
1520
1521 StoreRepresentation rep = OpParameter<StoreRepresentation>(store); 1542 StoreRepresentation rep = OpParameter<StoreRepresentation>(store);
1522 if (kMachineReps[i] & kRepTagged) { 1543 CHECK_EQ(kNoWriteBarrier, rep.write_barrier_kind());
1523 CHECK_EQ(kFullWriteBarrier, rep.write_barrier_kind());
1524 }
1525 CHECK_EQ(kMachineReps[i], rep.machine_type());
1526 } 1544 }
1527 } 1545 }
1528 1546
1529 1547
1530 TEST(InsertChangeForLoadElementIndex) { 1548 TEST(InsertChangeForLoadElementIndex) {
1531 // LoadElement(obj: Tagged, index: kTypeInt32 | kRepTagged, length) => 1549 // LoadElement(obj: Tagged, index: kTypeInt32 | kRepTagged, length) =>
1532 // Load(obj, Int32Add(Int32Mul(ChangeTaggedToInt32(index), #k), #k)) 1550 // Load(obj, Int32Add(Int32Mul(ChangeTaggedToInt32(index), #k), #k))
1533 TestingGraph t(Type::Any(), Type::Signed32()); 1551 TestingGraph t(Type::Any(), Type::Signed32());
1534 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), 1552 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(),
1535 kMachAnyTagged}; 1553 kMachAnyTagged};
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z); 2072 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z);
2055 NodeProperties::SetBounds(phi, phi_bounds); 2073 NodeProperties::SetBounds(phi, phi_bounds);
2056 2074
2057 Node* use = t.Use(phi, d.use); 2075 Node* use = t.Use(phi, d.use);
2058 t.Return(use); 2076 t.Return(use);
2059 t.Lower(); 2077 t.Lower();
2060 2078
2061 CHECK_EQ(d.expected, OpParameter<MachineType>(phi)); 2079 CHECK_EQ(d.expected, OpParameter<MachineType>(phi));
2062 } 2080 }
2063 } 2081 }
OLDNEW
« no previous file with comments | « src/compiler/typer.cc ('k') | test/unittests/compiler/change-lowering-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698