OLD | NEW |
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 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 } // namespace | 1436 } // namespace |
1437 | 1437 |
1438 | 1438 |
1439 TEST(LowerLoadField_to_load) { | 1439 TEST(LowerLoadField_to_load) { |
1440 TestingGraph t(Type::Any(), Type::Signed32()); | 1440 TestingGraph t(Type::Any(), Type::Signed32()); |
1441 | 1441 |
1442 for (size_t i = 0; i < arraysize(kMachineReps); i++) { | 1442 for (size_t i = 0; i < arraysize(kMachineReps); i++) { |
1443 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, | 1443 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, |
1444 Handle<Name>::null(), Type::Any(), kMachineReps[i]}; | 1444 Handle<Name>::null(), Type::Any(), kMachineReps[i]}; |
1445 | 1445 |
1446 Node* load = | 1446 Node* load = t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, |
1447 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start); | 1447 t.start, t.start); |
1448 Node* use = t.Use(load, kMachineReps[i]); | 1448 Node* use = t.Use(load, kMachineReps[i]); |
1449 t.Return(use); | 1449 t.Return(use); |
1450 t.Lower(); | 1450 t.Lower(); |
1451 CHECK_EQ(IrOpcode::kLoad, load->opcode()); | 1451 CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
1452 CHECK_EQ(t.p0, load->InputAt(0)); | 1452 CHECK_EQ(t.p0, load->InputAt(0)); |
1453 CheckFieldAccessArithmetic(access, load); | 1453 CheckFieldAccessArithmetic(access, load); |
1454 | 1454 |
1455 MachineType rep = OpParameter<MachineType>(load); | 1455 MachineType rep = OpParameter<MachineType>(load); |
1456 CHECK_EQ(kMachineReps[i], rep); | 1456 CHECK_EQ(kMachineReps[i], rep); |
1457 } | 1457 } |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1617 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); | 1617 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
1618 } | 1618 } |
1619 | 1619 |
1620 | 1620 |
1621 TEST(InsertChangeForLoadField) { | 1621 TEST(InsertChangeForLoadField) { |
1622 // TODO(titzer): test all load/store representation change insertions. | 1622 // TODO(titzer): test all load/store representation change insertions. |
1623 TestingGraph t(Type::Any(), Type::Signed32()); | 1623 TestingGraph t(Type::Any(), Type::Signed32()); |
1624 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, | 1624 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, |
1625 Handle<Name>::null(), Type::Any(), kMachFloat64}; | 1625 Handle<Name>::null(), Type::Any(), kMachFloat64}; |
1626 | 1626 |
1627 Node* load = | 1627 Node* load = t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, |
1628 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start); | 1628 t.start, t.start); |
1629 t.Return(load); | 1629 t.Return(load); |
1630 t.Lower(); | 1630 t.Lower(); |
1631 CHECK_EQ(IrOpcode::kLoad, load->opcode()); | 1631 CHECK_EQ(IrOpcode::kLoad, load->opcode()); |
1632 CHECK_EQ(t.p0, load->InputAt(0)); | 1632 CHECK_EQ(t.p0, load->InputAt(0)); |
1633 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); | 1633 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
1634 } | 1634 } |
1635 | 1635 |
1636 | 1636 |
1637 TEST(InsertChangeForStoreElement) { | 1637 TEST(InsertChangeForStoreElement) { |
1638 // TODO(titzer): test all load/store representation change insertions. | 1638 // TODO(titzer): test all load/store representation change insertions. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1672 TEST(UpdatePhi) { | 1672 TEST(UpdatePhi) { |
1673 TestingGraph t(Type::Any(), Type::Signed32()); | 1673 TestingGraph t(Type::Any(), Type::Signed32()); |
1674 static const MachineType kMachineTypes[] = {kMachInt32, kMachUint32, | 1674 static const MachineType kMachineTypes[] = {kMachInt32, kMachUint32, |
1675 kMachFloat64}; | 1675 kMachFloat64}; |
1676 Type* kTypes[] = {Type::Signed32(), Type::Unsigned32(), Type::Number()}; | 1676 Type* kTypes[] = {Type::Signed32(), Type::Unsigned32(), Type::Number()}; |
1677 | 1677 |
1678 for (size_t i = 0; i < arraysize(kMachineTypes); i++) { | 1678 for (size_t i = 0; i < arraysize(kMachineTypes); i++) { |
1679 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, | 1679 FieldAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, |
1680 Handle<Name>::null(), kTypes[i], kMachineTypes[i]}; | 1680 Handle<Name>::null(), kTypes[i], kMachineTypes[i]}; |
1681 | 1681 |
1682 Node* load0 = | 1682 Node* load0 = t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, |
1683 t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, t.start); | 1683 t.start, t.start); |
1684 Node* load1 = | 1684 Node* load1 = t.graph()->NewNode(t.simplified()->LoadField(access), t.p1, |
1685 t.graph()->NewNode(t.simplified()->LoadField(access), t.p1, t.start); | 1685 t.start, t.start); |
1686 Node* phi = t.graph()->NewNode(t.common()->Phi(kMachAnyTagged, 2), load0, | 1686 Node* phi = t.graph()->NewNode(t.common()->Phi(kMachAnyTagged, 2), load0, |
1687 load1, t.start); | 1687 load1, t.start); |
1688 t.Return(t.Use(phi, kMachineTypes[i])); | 1688 t.Return(t.Use(phi, kMachineTypes[i])); |
1689 t.Lower(); | 1689 t.Lower(); |
1690 | 1690 |
1691 CHECK_EQ(IrOpcode::kPhi, phi->opcode()); | 1691 CHECK_EQ(IrOpcode::kPhi, phi->opcode()); |
1692 CHECK_EQ(RepresentationOf(kMachineTypes[i]), | 1692 CHECK_EQ(RepresentationOf(kMachineTypes[i]), |
1693 RepresentationOf(OpParameter<MachineType>(phi))); | 1693 RepresentationOf(OpParameter<MachineType>(phi))); |
1694 } | 1694 } |
1695 } | 1695 } |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2090 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z); | 2090 Bounds phi_bounds = Bounds::Either(Bounds(d.arg1), Bounds(d.arg2), z); |
2091 NodeProperties::SetBounds(phi, phi_bounds); | 2091 NodeProperties::SetBounds(phi, phi_bounds); |
2092 | 2092 |
2093 Node* use = t.Use(phi, d.use); | 2093 Node* use = t.Use(phi, d.use); |
2094 t.Return(use); | 2094 t.Return(use); |
2095 t.Lower(); | 2095 t.Lower(); |
2096 | 2096 |
2097 CHECK_EQ(d.expected, OpParameter<MachineType>(phi)); | 2097 CHECK_EQ(d.expected, OpParameter<MachineType>(phi)); |
2098 } | 2098 } |
2099 } | 2099 } |
OLD | NEW |