| 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 "src/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 |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 // Immediates (random subset). | 13 // Immediates (random subset). |
| 14 static const int32_t kImmediates[] = { | 14 static const int32_t kImmediates[] = { |
| 15 kMinInt, -42, -1, 0, 1, 2, 3, 4, 5, | 15 kMinInt, -42, -1, 0, 1, 2, 3, 4, 5, |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 const MemoryAccess memacc = GetParam(); | 195 const MemoryAccess memacc = GetParam(); |
| 196 TRACED_FOREACH(int32_t, base, kImmediates) { | 196 TRACED_FOREACH(int32_t, base, kImmediates) { |
| 197 StreamBuilder m(this, memacc.type, kMachPtr); | 197 StreamBuilder m(this, memacc.type, kMachPtr); |
| 198 m.Return(m.Load(memacc.type, m.Int32Constant(base), m.Parameter(0))); | 198 m.Return(m.Load(memacc.type, m.Int32Constant(base), m.Parameter(0))); |
| 199 Stream s = m.Build(); | 199 Stream s = m.Build(); |
| 200 ASSERT_EQ(1U, s.size()); | 200 ASSERT_EQ(1U, s.size()); |
| 201 EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); | 201 EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); |
| 202 if (base == 0) { | 202 if (base == 0) { |
| 203 ASSERT_EQ(1U, s[0]->InputCount()); | 203 ASSERT_EQ(1U, s[0]->InputCount()); |
| 204 } else { | 204 } else { |
| 205 ASSERT_EQ(2U, s[0]->InputCount()); | 205 ASSERT_EQ(2U, s[0]->InputCount()); |
| 206 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); | 206 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); |
| 207 EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); | 207 EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); |
| 208 } | 208 } |
| 209 EXPECT_EQ(1U, s[0]->OutputCount()); | 209 EXPECT_EQ(1U, s[0]->OutputCount()); |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 | 212 |
| 213 | 213 |
| 214 TEST_P(InstructionSelectorMemoryAccessTest, LoadWithImmediateIndex) { | 214 TEST_P(InstructionSelectorMemoryAccessTest, LoadWithImmediateIndex) { |
| 215 const MemoryAccess memacc = GetParam(); | 215 const MemoryAccess memacc = GetParam(); |
| 216 TRACED_FOREACH(int32_t, index, kImmediates) { | 216 TRACED_FOREACH(int32_t, index, kImmediates) { |
| 217 StreamBuilder m(this, memacc.type, kMachPtr); | 217 StreamBuilder m(this, memacc.type, kMachPtr); |
| 218 m.Return(m.Load(memacc.type, m.Parameter(0), m.Int32Constant(index))); | 218 m.Return(m.Load(memacc.type, m.Parameter(0), m.Int32Constant(index))); |
| 219 Stream s = m.Build(); | 219 Stream s = m.Build(); |
| 220 ASSERT_EQ(1U, s.size()); | 220 ASSERT_EQ(1U, s.size()); |
| 221 EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); | 221 EXPECT_EQ(memacc.load_opcode, s[0]->arch_opcode()); |
| 222 if (index == 0) { | 222 if (index == 0) { |
| 223 ASSERT_EQ(1U, s[0]->InputCount()); | 223 ASSERT_EQ(1U, s[0]->InputCount()); |
| 224 } else { | 224 } else { |
| 225 ASSERT_EQ(2U, s[0]->InputCount()); | 225 ASSERT_EQ(2U, s[0]->InputCount()); |
| 226 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); | 226 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); |
| 227 EXPECT_EQ(index, s.ToInt32(s[0]->InputAt(1))); | 227 EXPECT_EQ(index, s.ToInt32(s[0]->InputAt(1))); |
| 228 } | 228 } |
| 229 EXPECT_EQ(1U, s[0]->OutputCount()); | 229 EXPECT_EQ(1U, s[0]->OutputCount()); |
| 230 } | 230 } |
| 231 } | 231 } |
| 232 | 232 |
| 233 | 233 |
| 234 TEST_P(InstructionSelectorMemoryAccessTest, StoreWithParameters) { | 234 TEST_P(InstructionSelectorMemoryAccessTest, StoreWithParameters) { |
| 235 const MemoryAccess memacc = GetParam(); | 235 const MemoryAccess memacc = GetParam(); |
| 236 StreamBuilder m(this, kMachInt32, kMachPtr, kMachInt32, memacc.type); | 236 StreamBuilder m(this, kMachInt32, kMachPtr, kMachInt32, memacc.type); |
| 237 m.Store(memacc.type, m.Parameter(0), m.Parameter(1), m.Parameter(2)); | 237 m.Store(memacc.type, m.Parameter(0), m.Parameter(1), m.Parameter(2)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 249 TRACED_FOREACH(int32_t, base, kImmediates) { | 249 TRACED_FOREACH(int32_t, base, kImmediates) { |
| 250 StreamBuilder m(this, kMachInt32, kMachInt32, memacc.type); | 250 StreamBuilder m(this, kMachInt32, kMachInt32, memacc.type); |
| 251 m.Store(memacc.type, m.Int32Constant(base), m.Parameter(0), m.Parameter(1)); | 251 m.Store(memacc.type, m.Int32Constant(base), m.Parameter(0), m.Parameter(1)); |
| 252 m.Return(m.Int32Constant(0)); | 252 m.Return(m.Int32Constant(0)); |
| 253 Stream s = m.Build(); | 253 Stream s = m.Build(); |
| 254 ASSERT_EQ(1U, s.size()); | 254 ASSERT_EQ(1U, s.size()); |
| 255 EXPECT_EQ(memacc.store_opcode, s[0]->arch_opcode()); | 255 EXPECT_EQ(memacc.store_opcode, s[0]->arch_opcode()); |
| 256 if (base == 0) { | 256 if (base == 0) { |
| 257 ASSERT_EQ(2U, s[0]->InputCount()); | 257 ASSERT_EQ(2U, s[0]->InputCount()); |
| 258 } else { | 258 } else { |
| 259 ASSERT_EQ(3U, s[0]->InputCount()); | 259 ASSERT_EQ(3U, s[0]->InputCount()); |
| 260 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); | 260 ASSERT_EQ(InstructionOperand::IMMEDIATE, s[0]->InputAt(1)->kind()); |
| 261 EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); | 261 EXPECT_EQ(base, s.ToInt32(s[0]->InputAt(1))); |
| 262 } | 262 } |
| 263 EXPECT_EQ(0U, s[0]->OutputCount()); | 263 EXPECT_EQ(0U, s[0]->OutputCount()); |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 | 266 |
| 267 | 267 |
| 268 TEST_P(InstructionSelectorMemoryAccessTest, StoreWithImmediateIndex) { | 268 TEST_P(InstructionSelectorMemoryAccessTest, StoreWithImmediateIndex) { |
| 269 const MemoryAccess memacc = GetParam(); | 269 const MemoryAccess memacc = GetParam(); |
| 270 TRACED_FOREACH(int32_t, index, kImmediates) { | 270 TRACED_FOREACH(int32_t, index, kImmediates) { |
| 271 StreamBuilder m(this, kMachInt32, kMachPtr, memacc.type); | 271 StreamBuilder m(this, kMachInt32, kMachPtr, memacc.type); |
| (...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 510 EXPECT_EQ(param->id(), s.ToVreg(s[0]->InputAt(0))); | 510 EXPECT_EQ(param->id(), s.ToVreg(s[0]->InputAt(0))); |
| 511 } | 511 } |
| 512 | 512 |
| 513 | 513 |
| 514 INSTANTIATE_TEST_CASE_P(InstructionSelectorTest, InstructionSelectorMultTest, | 514 INSTANTIATE_TEST_CASE_P(InstructionSelectorTest, InstructionSelectorMultTest, |
| 515 ::testing::ValuesIn(kMultParams)); | 515 ::testing::ValuesIn(kMultParams)); |
| 516 | 516 |
| 517 } // namespace compiler | 517 } // namespace compiler |
| 518 } // namespace internal | 518 } // namespace internal |
| 519 } // namespace v8 | 519 } // namespace v8 |
| OLD | NEW |