OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 <functional> | 5 #include <functional> |
6 | 6 |
7 #include "src/codegen.h" | 7 #include "src/codegen.h" |
8 #include "src/compiler/js-operator.h" | 8 #include "src/compiler/js-operator.h" |
9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
10 #include "src/compiler/operator-properties.h" | 10 #include "src/compiler/operator-properties.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 int32s.push_back(+1); | 44 int32s.push_back(+1); |
45 int32s.push_back(kMinInt); | 45 int32s.push_back(kMinInt); |
46 int32s.push_back(kMaxInt); | 46 int32s.push_back(kMaxInt); |
47 for (int i = 0; i < 10; ++i) { | 47 for (int i = 0; i < 10; ++i) { |
48 int32s.push_back(rng_->NextInt()); | 48 int32s.push_back(rng_->NextInt()); |
49 } | 49 } |
50 } | 50 } |
51 | 51 |
52 Types types_; | 52 Types types_; |
53 JSOperatorBuilder javascript_; | 53 JSOperatorBuilder javascript_; |
54 BinaryOperationHints const hints_ = BinaryOperationHints::Any(); | 54 BinaryOperationHint const hints_ = BinaryOperationHint::kAny; |
55 Node* context_node_; | 55 Node* context_node_; |
56 v8::base::RandomNumberGenerator* rng_; | 56 v8::base::RandomNumberGenerator* rng_; |
57 std::vector<double> integers; | 57 std::vector<double> integers; |
58 std::vector<double> int32s; | 58 std::vector<double> int32s; |
59 | 59 |
60 Type* TypeBinaryOp(const Operator* op, Type* lhs, Type* rhs) { | 60 Type* TypeBinaryOp(const Operator* op, Type* lhs, Type* rhs) { |
61 Node* p0 = Parameter(0); | 61 Node* p0 = Parameter(0); |
62 Node* p1 = Parameter(1); | 62 Node* p1 = Parameter(1); |
63 NodeProperties::SetType(p0, lhs); | 63 NodeProperties::SetType(p0, lhs); |
64 NodeProperties::SetType(p1, rhs); | 64 NodeProperties::SetType(p1, rhs); |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
283 TestBinaryBitOp(javascript_.ShiftLeft(hints_), shift_left); | 283 TestBinaryBitOp(javascript_.ShiftLeft(hints_), shift_left); |
284 } | 284 } |
285 | 285 |
286 | 286 |
287 TEST_F(TyperTest, TypeJSShiftRight) { | 287 TEST_F(TyperTest, TypeJSShiftRight) { |
288 TestBinaryBitOp(javascript_.ShiftRight(hints_), shift_right); | 288 TestBinaryBitOp(javascript_.ShiftRight(hints_), shift_right); |
289 } | 289 } |
290 | 290 |
291 | 291 |
292 TEST_F(TyperTest, TypeJSLessThan) { | 292 TEST_F(TyperTest, TypeJSLessThan) { |
293 TestBinaryCompareOp(javascript_.LessThan(CompareOperationHints::Any()), | 293 TestBinaryCompareOp(javascript_.LessThan(CompareOperationHint::kAny), |
294 std::less<double>()); | 294 std::less<double>()); |
295 } | 295 } |
296 | 296 |
297 | 297 |
298 TEST_F(TyperTest, TypeJSLessThanOrEqual) { | 298 TEST_F(TyperTest, TypeJSLessThanOrEqual) { |
299 TestBinaryCompareOp(javascript_.LessThanOrEqual(CompareOperationHints::Any()), | 299 TestBinaryCompareOp(javascript_.LessThanOrEqual(CompareOperationHint::kAny), |
300 std::less_equal<double>()); | 300 std::less_equal<double>()); |
301 } | 301 } |
302 | 302 |
303 | 303 |
304 TEST_F(TyperTest, TypeJSGreaterThan) { | 304 TEST_F(TyperTest, TypeJSGreaterThan) { |
305 TestBinaryCompareOp(javascript_.GreaterThan(CompareOperationHints::Any()), | 305 TestBinaryCompareOp(javascript_.GreaterThan(CompareOperationHint::kAny), |
306 std::greater<double>()); | 306 std::greater<double>()); |
307 } | 307 } |
308 | 308 |
309 | 309 |
310 TEST_F(TyperTest, TypeJSGreaterThanOrEqual) { | 310 TEST_F(TyperTest, TypeJSGreaterThanOrEqual) { |
311 TestBinaryCompareOp( | 311 TestBinaryCompareOp( |
312 javascript_.GreaterThanOrEqual(CompareOperationHints::Any()), | 312 javascript_.GreaterThanOrEqual(CompareOperationHint::kAny), |
313 std::greater_equal<double>()); | 313 std::greater_equal<double>()); |
314 } | 314 } |
315 | 315 |
316 | 316 |
317 TEST_F(TyperTest, TypeJSEqual) { | 317 TEST_F(TyperTest, TypeJSEqual) { |
318 TestBinaryCompareOp(javascript_.Equal(CompareOperationHints::Any()), | 318 TestBinaryCompareOp(javascript_.Equal(CompareOperationHint::kAny), |
319 std::equal_to<double>()); | 319 std::equal_to<double>()); |
320 } | 320 } |
321 | 321 |
322 | 322 |
323 TEST_F(TyperTest, TypeJSNotEqual) { | 323 TEST_F(TyperTest, TypeJSNotEqual) { |
324 TestBinaryCompareOp(javascript_.NotEqual(CompareOperationHints::Any()), | 324 TestBinaryCompareOp(javascript_.NotEqual(CompareOperationHint::kAny), |
325 std::not_equal_to<double>()); | 325 std::not_equal_to<double>()); |
326 } | 326 } |
327 | 327 |
328 | 328 |
329 // For numbers there's no difference between strict and non-strict equality. | 329 // For numbers there's no difference between strict and non-strict equality. |
330 TEST_F(TyperTest, TypeJSStrictEqual) { | 330 TEST_F(TyperTest, TypeJSStrictEqual) { |
331 TestBinaryCompareOp(javascript_.StrictEqual(CompareOperationHints::Any()), | 331 TestBinaryCompareOp(javascript_.StrictEqual(CompareOperationHint::kAny), |
332 std::equal_to<double>()); | 332 std::equal_to<double>()); |
333 } | 333 } |
334 | 334 |
335 | 335 |
336 TEST_F(TyperTest, TypeJSStrictNotEqual) { | 336 TEST_F(TyperTest, TypeJSStrictNotEqual) { |
337 TestBinaryCompareOp(javascript_.StrictNotEqual(CompareOperationHints::Any()), | 337 TestBinaryCompareOp(javascript_.StrictNotEqual(CompareOperationHint::kAny), |
338 std::not_equal_to<double>()); | 338 std::not_equal_to<double>()); |
339 } | 339 } |
340 | 340 |
341 | 341 |
342 //------------------------------------------------------------------------------ | 342 //------------------------------------------------------------------------------ |
343 // Monotonicity | 343 // Monotonicity |
344 | 344 |
345 #define TEST_BINARY_MONOTONICITY(name) \ | 345 #define TEST_BINARY_MONOTONICITY(name) \ |
346 TEST_F(TyperTest, Monotonicity_##name) { \ | 346 TEST_F(TyperTest, Monotonicity_##name) { \ |
347 TestBinaryMonotonicity(javascript_.name(CompareOperationHints::Any())); \ | 347 TestBinaryMonotonicity(javascript_.name(CompareOperationHint::kAny)); \ |
348 } | 348 } |
349 TEST_BINARY_MONOTONICITY(Equal) | 349 TEST_BINARY_MONOTONICITY(Equal) |
350 TEST_BINARY_MONOTONICITY(NotEqual) | 350 TEST_BINARY_MONOTONICITY(NotEqual) |
351 TEST_BINARY_MONOTONICITY(StrictEqual) | 351 TEST_BINARY_MONOTONICITY(StrictEqual) |
352 TEST_BINARY_MONOTONICITY(StrictNotEqual) | 352 TEST_BINARY_MONOTONICITY(StrictNotEqual) |
353 TEST_BINARY_MONOTONICITY(LessThan) | 353 TEST_BINARY_MONOTONICITY(LessThan) |
354 TEST_BINARY_MONOTONICITY(GreaterThan) | 354 TEST_BINARY_MONOTONICITY(GreaterThan) |
355 TEST_BINARY_MONOTONICITY(LessThanOrEqual) | 355 TEST_BINARY_MONOTONICITY(LessThanOrEqual) |
356 TEST_BINARY_MONOTONICITY(GreaterThanOrEqual) | 356 TEST_BINARY_MONOTONICITY(GreaterThanOrEqual) |
357 #undef TEST_BINARY_MONOTONICITY | 357 #undef TEST_BINARY_MONOTONICITY |
358 | 358 |
359 #define TEST_BINARY_MONOTONICITY(name) \ | 359 #define TEST_BINARY_MONOTONICITY(name) \ |
360 TEST_F(TyperTest, Monotonicity_##name) { \ | 360 TEST_F(TyperTest, Monotonicity_##name) { \ |
361 TestBinaryMonotonicity(javascript_.name(BinaryOperationHints::Any())); \ | 361 TestBinaryMonotonicity(javascript_.name(BinaryOperationHint::kAny)); \ |
362 } | 362 } |
363 TEST_BINARY_MONOTONICITY(BitwiseOr) | 363 TEST_BINARY_MONOTONICITY(BitwiseOr) |
364 TEST_BINARY_MONOTONICITY(BitwiseXor) | 364 TEST_BINARY_MONOTONICITY(BitwiseXor) |
365 TEST_BINARY_MONOTONICITY(BitwiseAnd) | 365 TEST_BINARY_MONOTONICITY(BitwiseAnd) |
366 TEST_BINARY_MONOTONICITY(ShiftLeft) | 366 TEST_BINARY_MONOTONICITY(ShiftLeft) |
367 TEST_BINARY_MONOTONICITY(ShiftRight) | 367 TEST_BINARY_MONOTONICITY(ShiftRight) |
368 TEST_BINARY_MONOTONICITY(ShiftRightLogical) | 368 TEST_BINARY_MONOTONICITY(ShiftRightLogical) |
369 TEST_BINARY_MONOTONICITY(Add) | 369 TEST_BINARY_MONOTONICITY(Add) |
370 TEST_BINARY_MONOTONICITY(Subtract) | 370 TEST_BINARY_MONOTONICITY(Subtract) |
371 TEST_BINARY_MONOTONICITY(Multiply) | 371 TEST_BINARY_MONOTONICITY(Multiply) |
(...skipping 11 matching lines...) Expand all Loading... |
383 for (auto i : values) { | 383 for (auto i : values) { |
384 Node* c = graph()->NewNode(common()->Int32Constant(i)); | 384 Node* c = graph()->NewNode(common()->Int32Constant(i)); |
385 Type* type = NodeProperties::GetType(c); | 385 Type* type = NodeProperties::GetType(c); |
386 EXPECT_TRUE(type->Is(NewRange(i, i))); | 386 EXPECT_TRUE(type->Is(NewRange(i, i))); |
387 } | 387 } |
388 } | 388 } |
389 | 389 |
390 } // namespace compiler | 390 } // namespace compiler |
391 } // namespace internal | 391 } // namespace internal |
392 } // namespace v8 | 392 } // namespace v8 |
OLD | NEW |