| 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/ast/scopes.h" | 7 #include "src/ast/scopes.h" |
| 8 #include "src/compiler/access-builder.h" | 8 #include "src/compiler/access-builder.h" |
| 9 #include "src/compiler/control-builders.h" | 9 #include "src/compiler/control-builders.h" |
| 10 #include "src/compiler/effect-control-linearizer.h" | 10 #include "src/compiler/effect-control-linearizer.h" |
| (...skipping 1149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1160 CheckChangeInsertion(IrOpcode::kTruncateFloat64ToWord32, | 1160 CheckChangeInsertion(IrOpcode::kTruncateFloat64ToWord32, |
| 1161 MachineType::Float64(), MachineType::Uint32(), | 1161 MachineType::Float64(), MachineType::Uint32(), |
| 1162 Type::Integral32()); | 1162 Type::Integral32()); |
| 1163 CheckChangeInsertion(IrOpcode::kChangeTaggedToInt32, MachineType::AnyTagged(), | 1163 CheckChangeInsertion(IrOpcode::kChangeTaggedToInt32, MachineType::AnyTagged(), |
| 1164 MachineType::Int32(), Type::Signed32()); | 1164 MachineType::Int32(), Type::Signed32()); |
| 1165 CheckChangeInsertion(IrOpcode::kChangeTaggedToUint32, | 1165 CheckChangeInsertion(IrOpcode::kChangeTaggedToUint32, |
| 1166 MachineType::AnyTagged(), MachineType::Uint32(), | 1166 MachineType::AnyTagged(), MachineType::Uint32(), |
| 1167 Type::Unsigned32()); | 1167 Type::Unsigned32()); |
| 1168 | 1168 |
| 1169 CheckChangeInsertion(IrOpcode::kChangeFloat64ToTagged, MachineType::Float64(), | 1169 CheckChangeInsertion(IrOpcode::kChangeFloat64ToTagged, MachineType::Float64(), |
| 1170 MachineType::AnyTagged()); | 1170 MachineType::AnyTagged(), Type::Number()); |
| 1171 CheckChangeInsertion(IrOpcode::kChangeTaggedToFloat64, | 1171 CheckChangeInsertion(IrOpcode::kChangeTaggedToFloat64, |
| 1172 MachineType::AnyTagged(), MachineType::Float64(), | 1172 MachineType::AnyTagged(), MachineType::Float64(), |
| 1173 Type::Number()); | 1173 Type::Number()); |
| 1174 | 1174 |
| 1175 CheckChangeInsertion(IrOpcode::kChangeInt32ToFloat64, MachineType::Int32(), | 1175 CheckChangeInsertion(IrOpcode::kChangeInt32ToFloat64, MachineType::Int32(), |
| 1176 MachineType::Float64(), Type::Signed32()); | 1176 MachineType::Float64(), Type::Signed32()); |
| 1177 CheckChangeInsertion(IrOpcode::kChangeInt32ToTagged, MachineType::Int32(), | 1177 CheckChangeInsertion(IrOpcode::kChangeInt32ToTagged, MachineType::Int32(), |
| 1178 MachineType::AnyTagged(), Type::Signed32()); | 1178 MachineType::AnyTagged(), Type::Signed32()); |
| 1179 | 1179 |
| 1180 CheckChangeInsertion(IrOpcode::kChangeUint32ToFloat64, MachineType::Uint32(), | 1180 CheckChangeInsertion(IrOpcode::kChangeUint32ToFloat64, MachineType::Uint32(), |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1251 TestingGraph t(Type::Number(), Type::Number()); | 1251 TestingGraph t(Type::Number(), Type::Number()); |
| 1252 | 1252 |
| 1253 const Operator* ops[] = { | 1253 const Operator* ops[] = { |
| 1254 t.machine()->Float64Add(), t.machine()->Float64Sub(), | 1254 t.machine()->Float64Add(), t.machine()->Float64Sub(), |
| 1255 t.machine()->Float64Mul(), t.machine()->Float64Div(), | 1255 t.machine()->Float64Mul(), t.machine()->Float64Div(), |
| 1256 t.machine()->Float64Mod(), | 1256 t.machine()->Float64Mod(), |
| 1257 }; | 1257 }; |
| 1258 | 1258 |
| 1259 for (size_t i = 0; i < arraysize(ops); i++) { | 1259 for (size_t i = 0; i < arraysize(ops); i++) { |
| 1260 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64, | 1260 CheckChangesAroundBinop(&t, ops[i], IrOpcode::kChangeTaggedToFloat64, |
| 1261 IrOpcode::kChangeFloat64ToTagged); | 1261 IrOpcode::kChangeFloat64ToTagged, Type::Number()); |
| 1262 } | 1262 } |
| 1263 } | 1263 } |
| 1264 | 1264 |
| 1265 | 1265 |
| 1266 TEST(InsertChangesAroundFloat64Cmp) { | 1266 TEST(InsertChangesAroundFloat64Cmp) { |
| 1267 TestingGraph t(Type::Number(), Type::Number()); | 1267 TestingGraph t(Type::Number(), Type::Number()); |
| 1268 | 1268 |
| 1269 const Operator* ops[] = {t.machine()->Float64Equal(), | 1269 const Operator* ops[] = {t.machine()->Float64Equal(), |
| 1270 t.machine()->Float64LessThan(), | 1270 t.machine()->Float64LessThan(), |
| 1271 t.machine()->Float64LessThanOrEqual()}; | 1271 t.machine()->Float64LessThanOrEqual()}; |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 t.Lower(); | 1481 t.Lower(); |
| 1482 CHECK_EQ(IrOpcode::kStoreElement, store->opcode()); | 1482 CHECK_EQ(IrOpcode::kStoreElement, store->opcode()); |
| 1483 CHECK_EQ(t.p0, store->InputAt(0)); | 1483 CHECK_EQ(t.p0, store->InputAt(0)); |
| 1484 CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, store->InputAt(1)); | 1484 CheckChangeOf(IrOpcode::kChangeTaggedToInt32, t.p1, store->InputAt(1)); |
| 1485 } | 1485 } |
| 1486 | 1486 |
| 1487 | 1487 |
| 1488 TEST(InsertChangeForLoadElement) { | 1488 TEST(InsertChangeForLoadElement) { |
| 1489 // TODO(titzer): test all load/store representation change insertions. | 1489 // TODO(titzer): test all load/store representation change insertions. |
| 1490 TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); | 1490 TestingGraph t(Type::Any(), Type::Signed32(), Type::Any()); |
| 1491 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, Type::Any(), | 1491 ElementAccess access = {kTaggedBase, FixedArrayBase::kHeaderSize, |
| 1492 MachineType::Float64(), kNoWriteBarrier}; | 1492 Type::Number(), MachineType::Float64(), |
| 1493 kNoWriteBarrier}; |
| 1493 | 1494 |
| 1494 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, | 1495 Node* load = t.graph()->NewNode(t.simplified()->LoadElement(access), t.p0, |
| 1495 t.p1, t.start, t.start); | 1496 t.p1, t.start, t.start); |
| 1496 t.Return(load); | 1497 t.Return(load); |
| 1497 t.Lower(); | 1498 t.Lower(); |
| 1498 CHECK_EQ(IrOpcode::kLoadElement, load->opcode()); | 1499 CHECK_EQ(IrOpcode::kLoadElement, load->opcode()); |
| 1499 CHECK_EQ(t.p0, load->InputAt(0)); | 1500 CHECK_EQ(t.p0, load->InputAt(0)); |
| 1500 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); | 1501 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
| 1501 } | 1502 } |
| 1502 | 1503 |
| 1503 | 1504 |
| 1504 TEST(InsertChangeForLoadField) { | 1505 TEST(InsertChangeForLoadField) { |
| 1505 // TODO(titzer): test all load/store representation change insertions. | 1506 // TODO(titzer): test all load/store representation change insertions. |
| 1506 TestingGraph t(Type::Any(), Type::Signed32()); | 1507 TestingGraph t(Type::Any(), Type::Signed32()); |
| 1507 FieldAccess access = { | 1508 FieldAccess access = { |
| 1508 kTaggedBase, FixedArrayBase::kHeaderSize, Handle<Name>::null(), | 1509 kTaggedBase, FixedArrayBase::kHeaderSize, Handle<Name>::null(), |
| 1509 Type::Any(), MachineType::Float64(), kNoWriteBarrier}; | 1510 Type::Number(), MachineType::Float64(), kNoWriteBarrier}; |
| 1510 | 1511 |
| 1511 Node* load = t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, | 1512 Node* load = t.graph()->NewNode(t.simplified()->LoadField(access), t.p0, |
| 1512 t.start, t.start); | 1513 t.start, t.start); |
| 1513 t.Return(load); | 1514 t.Return(load); |
| 1514 t.Lower(); | 1515 t.Lower(); |
| 1515 CHECK_EQ(IrOpcode::kLoadField, load->opcode()); | 1516 CHECK_EQ(IrOpcode::kLoadField, load->opcode()); |
| 1516 CHECK_EQ(t.p0, load->InputAt(0)); | 1517 CHECK_EQ(t.p0, load->InputAt(0)); |
| 1517 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); | 1518 CheckChangeOf(IrOpcode::kChangeFloat64ToTagged, load, t.ret->InputAt(0)); |
| 1518 } | 1519 } |
| 1519 | 1520 |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1950 t.Return(use); | 1951 t.Return(use); |
| 1951 t.Lower(); | 1952 t.Lower(); |
| 1952 | 1953 |
| 1953 CHECK_EQ(d.expected, PhiRepresentationOf(phi->op())); | 1954 CHECK_EQ(d.expected, PhiRepresentationOf(phi->op())); |
| 1954 } | 1955 } |
| 1955 } | 1956 } |
| 1956 | 1957 |
| 1957 } // namespace compiler | 1958 } // namespace compiler |
| 1958 } // namespace internal | 1959 } // namespace internal |
| 1959 } // namespace v8 | 1960 } // namespace v8 |
| OLD | NEW |