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 "test/unittests/compiler/instruction-selector-unittest.h" | 5 #include "test/unittests/compiler/instruction-selector-unittest.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace compiler { | 9 namespace compiler { |
10 | 10 |
(...skipping 1162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1173 Stream s = m.Build(); | 1173 Stream s = m.Build(); |
1174 ASSERT_EQ(1U, s.size()); | 1174 ASSERT_EQ(1U, s.size()); |
1175 EXPECT_EQ(kMipsAbsD, s[0]->arch_opcode()); | 1175 EXPECT_EQ(kMipsAbsD, s[0]->arch_opcode()); |
1176 ASSERT_EQ(1U, s[0]->InputCount()); | 1176 ASSERT_EQ(1U, s[0]->InputCount()); |
1177 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); | 1177 EXPECT_EQ(s.ToVreg(p0), s.ToVreg(s[0]->InputAt(0))); |
1178 ASSERT_EQ(1U, s[0]->OutputCount()); | 1178 ASSERT_EQ(1U, s[0]->OutputCount()); |
1179 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 1179 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
1180 } | 1180 } |
1181 | 1181 |
1182 TEST_F(InstructionSelectorTest, Float32AddWithFloat32Mul) { | 1182 TEST_F(InstructionSelectorTest, Float32AddWithFloat32Mul) { |
| 1183 if (!IsMipsArchVariant(kMips32r2) && !IsMipsArchVariant(kMips32r6)) { |
| 1184 return; |
| 1185 } |
1183 { | 1186 { |
1184 StreamBuilder m(this, MachineType::Float32(), MachineType::Float32(), | 1187 StreamBuilder m(this, MachineType::Float32(), MachineType::Float32(), |
1185 MachineType::Float32(), MachineType::Float32()); | 1188 MachineType::Float32(), MachineType::Float32()); |
1186 Node* const p0 = m.Parameter(0); | 1189 Node* const p0 = m.Parameter(0); |
1187 Node* const p1 = m.Parameter(1); | 1190 Node* const p1 = m.Parameter(1); |
1188 Node* const p2 = m.Parameter(2); | 1191 Node* const p2 = m.Parameter(2); |
1189 Node* const n = m.Float32Add(m.Float32Mul(p0, p1), p2); | 1192 Node* const n = m.Float32Add(m.Float32Mul(p0, p1), p2); |
1190 m.Return(n); | 1193 m.Return(n); |
1191 Stream s = m.Build(); | 1194 Stream s = m.Build(); |
1192 ASSERT_EQ(1U, s.size()); | 1195 ASSERT_EQ(1U, s.size()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1236 } else if (IsMipsArchVariant(kMips32r6)) { | 1239 } else if (IsMipsArchVariant(kMips32r6)) { |
1237 EXPECT_TRUE( | 1240 EXPECT_TRUE( |
1238 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy()); | 1241 UnallocatedOperand::cast(s[0]->Output())->HasSameAsInputPolicy()); |
1239 } | 1242 } |
1240 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 1243 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
1241 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); | 1244 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); |
1242 } | 1245 } |
1243 } | 1246 } |
1244 | 1247 |
1245 TEST_F(InstructionSelectorTest, Float64AddWithFloat64Mul) { | 1248 TEST_F(InstructionSelectorTest, Float64AddWithFloat64Mul) { |
| 1249 if (!IsMipsArchVariant(kMips32r2) && !IsMipsArchVariant(kMips32r6)) { |
| 1250 return; |
| 1251 } |
1246 { | 1252 { |
1247 StreamBuilder m(this, MachineType::Float64(), MachineType::Float64(), | 1253 StreamBuilder m(this, MachineType::Float64(), MachineType::Float64(), |
1248 MachineType::Float64(), MachineType::Float64()); | 1254 MachineType::Float64(), MachineType::Float64()); |
1249 Node* const p0 = m.Parameter(0); | 1255 Node* const p0 = m.Parameter(0); |
1250 Node* const p1 = m.Parameter(1); | 1256 Node* const p1 = m.Parameter(1); |
1251 Node* const p2 = m.Parameter(2); | 1257 Node* const p2 = m.Parameter(2); |
1252 Node* const n = m.Float64Add(m.Float64Mul(p0, p1), p2); | 1258 Node* const n = m.Float64Add(m.Float64Mul(p0, p1), p2); |
1253 m.Return(n); | 1259 m.Return(n); |
1254 Stream s = m.Build(); | 1260 Stream s = m.Build(); |
1255 ASSERT_EQ(1U, s.size()); | 1261 ASSERT_EQ(1U, s.size()); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); | 1310 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); |
1305 } | 1311 } |
1306 } | 1312 } |
1307 | 1313 |
1308 TEST_F(InstructionSelectorTest, Float32SubWithFloat32Mul) { | 1314 TEST_F(InstructionSelectorTest, Float32SubWithFloat32Mul) { |
1309 StreamBuilder m(this, MachineType::Float32(), MachineType::Float32(), | 1315 StreamBuilder m(this, MachineType::Float32(), MachineType::Float32(), |
1310 MachineType::Float32(), MachineType::Float32()); | 1316 MachineType::Float32(), MachineType::Float32()); |
1311 Node* const p0 = m.Parameter(0); | 1317 Node* const p0 = m.Parameter(0); |
1312 Node* const p1 = m.Parameter(1); | 1318 Node* const p1 = m.Parameter(1); |
1313 Node* const p2 = m.Parameter(2); | 1319 Node* const p2 = m.Parameter(2); |
1314 Node* n; | 1320 Node* n = nullptr; |
| 1321 |
| 1322 if (!IsMipsArchVariant(kMips32r2) && !IsMipsArchVariant(kMips32r6)) { |
| 1323 return; |
| 1324 } |
| 1325 |
1315 if (IsMipsArchVariant(kMips32r2)) { | 1326 if (IsMipsArchVariant(kMips32r2)) { |
1316 n = m.Float32Sub(m.Float32Mul(p1, p2), p0); | 1327 n = m.Float32Sub(m.Float32Mul(p1, p2), p0); |
1317 } else if (IsMipsArchVariant(kMips32r6)) { | 1328 } else if (IsMipsArchVariant(kMips32r6)) { |
1318 n = m.Float32Sub(p0, m.Float32Mul(p1, p2)); | 1329 n = m.Float32Sub(p0, m.Float32Mul(p1, p2)); |
1319 } | 1330 } |
1320 m.Return(n); | 1331 m.Return(n); |
1321 Stream s = m.Build(); | 1332 Stream s = m.Build(); |
1322 ASSERT_EQ(1U, s.size()); | 1333 ASSERT_EQ(1U, s.size()); |
1323 if (IsMipsArchVariant(kMips32r2)) { | 1334 if (IsMipsArchVariant(kMips32r2)) { |
1324 EXPECT_EQ(kMipsMsubS, s[0]->arch_opcode()); | 1335 EXPECT_EQ(kMipsMsubS, s[0]->arch_opcode()); |
(...skipping 15 matching lines...) Expand all Loading... |
1340 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 1351 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
1341 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); | 1352 EXPECT_EQ(kFlags_none, s[0]->flags_mode()); |
1342 } | 1353 } |
1343 | 1354 |
1344 TEST_F(InstructionSelectorTest, Float64SubWithFloat64Mul) { | 1355 TEST_F(InstructionSelectorTest, Float64SubWithFloat64Mul) { |
1345 StreamBuilder m(this, MachineType::Float64(), MachineType::Float64(), | 1356 StreamBuilder m(this, MachineType::Float64(), MachineType::Float64(), |
1346 MachineType::Float64(), MachineType::Float64()); | 1357 MachineType::Float64(), MachineType::Float64()); |
1347 Node* const p0 = m.Parameter(0); | 1358 Node* const p0 = m.Parameter(0); |
1348 Node* const p1 = m.Parameter(1); | 1359 Node* const p1 = m.Parameter(1); |
1349 Node* const p2 = m.Parameter(2); | 1360 Node* const p2 = m.Parameter(2); |
1350 Node* n; | 1361 Node* n = nullptr; |
| 1362 |
| 1363 if (!IsMipsArchVariant(kMips32r2) && !IsMipsArchVariant(kMips32r6)) { |
| 1364 return; |
| 1365 } |
| 1366 |
1351 if (IsMipsArchVariant(kMips32r2)) { | 1367 if (IsMipsArchVariant(kMips32r2)) { |
1352 n = m.Float64Sub(m.Float64Mul(p1, p2), p0); | 1368 n = m.Float64Sub(m.Float64Mul(p1, p2), p0); |
1353 } else if (IsMipsArchVariant(kMips32r6)) { | 1369 } else if (IsMipsArchVariant(kMips32r6)) { |
1354 n = m.Float64Sub(p0, m.Float64Mul(p1, p2)); | 1370 n = m.Float64Sub(p0, m.Float64Mul(p1, p2)); |
1355 } | 1371 } |
1356 m.Return(n); | 1372 m.Return(n); |
1357 Stream s = m.Build(); | 1373 Stream s = m.Build(); |
1358 ASSERT_EQ(1U, s.size()); | 1374 ASSERT_EQ(1U, s.size()); |
1359 if (IsMipsArchVariant(kMips32r2)) { | 1375 if (IsMipsArchVariant(kMips32r2)) { |
1360 EXPECT_EQ(kMipsMsubD, s[0]->arch_opcode()); | 1376 EXPECT_EQ(kMipsMsubD, s[0]->arch_opcode()); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1404 ASSERT_EQ(1U, s.size()); | 1420 ASSERT_EQ(1U, s.size()); |
1405 EXPECT_EQ(kMipsFloat64Min, s[0]->arch_opcode()); | 1421 EXPECT_EQ(kMipsFloat64Min, s[0]->arch_opcode()); |
1406 ASSERT_EQ(2U, s[0]->InputCount()); | 1422 ASSERT_EQ(2U, s[0]->InputCount()); |
1407 ASSERT_EQ(1U, s[0]->OutputCount()); | 1423 ASSERT_EQ(1U, s[0]->OutputCount()); |
1408 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); | 1424 EXPECT_EQ(s.ToVreg(n), s.ToVreg(s[0]->Output())); |
1409 } | 1425 } |
1410 | 1426 |
1411 } // namespace compiler | 1427 } // namespace compiler |
1412 } // namespace internal | 1428 } // namespace internal |
1413 } // namespace v8 | 1429 } // namespace v8 |
OLD | NEW |