| 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/code-factory.h" | 5 #include "src/code-factory.h" |
| 6 #include "src/compiler/access-builder.h" | 6 #include "src/compiler/access-builder.h" |
| 7 #include "src/compiler/js-graph.h" | 7 #include "src/compiler/js-graph.h" |
| 8 #include "src/compiler/js-operator.h" | 8 #include "src/compiler/js-operator.h" |
| 9 #include "src/compiler/js-typed-lowering.h" | 9 #include "src/compiler/js-typed-lowering.h" |
| 10 #include "src/compiler/machine-operator.h" | 10 #include "src/compiler/machine-operator.h" |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 // JSStrictEqual | 387 // JSStrictEqual |
| 388 | 388 |
| 389 | 389 |
| 390 TEST_F(JSTypedLoweringTest, JSStrictEqualWithTheHole) { | 390 TEST_F(JSTypedLoweringTest, JSStrictEqualWithTheHole) { |
| 391 Node* const the_hole = HeapConstant(factory()->the_hole_value()); | 391 Node* const the_hole = HeapConstant(factory()->the_hole_value()); |
| 392 Node* const context = UndefinedConstant(); | 392 Node* const context = UndefinedConstant(); |
| 393 Node* const effect = graph()->start(); | 393 Node* const effect = graph()->start(); |
| 394 Node* const control = graph()->start(); | 394 Node* const control = graph()->start(); |
| 395 TRACED_FOREACH(Type*, type, kJSTypes) { | 395 TRACED_FOREACH(Type*, type, kJSTypes) { |
| 396 Node* const lhs = Parameter(type); | 396 Node* const lhs = Parameter(type); |
| 397 Reduction r = Reduce(graph()->NewNode( | 397 Reduction r = Reduce( |
| 398 javascript()->StrictEqual(CompareOperationHints::Any()), lhs, the_hole, | 398 graph()->NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), |
| 399 context, effect, control)); | 399 lhs, the_hole, context, effect, control)); |
| 400 ASSERT_TRUE(r.Changed()); | 400 ASSERT_TRUE(r.Changed()); |
| 401 EXPECT_THAT(r.replacement(), IsFalseConstant()); | 401 EXPECT_THAT(r.replacement(), IsFalseConstant()); |
| 402 } | 402 } |
| 403 } | 403 } |
| 404 | 404 |
| 405 | 405 |
| 406 TEST_F(JSTypedLoweringTest, JSStrictEqualWithUnique) { | 406 TEST_F(JSTypedLoweringTest, JSStrictEqualWithUnique) { |
| 407 Node* const lhs = Parameter(Type::Unique(), 0); | 407 Node* const lhs = Parameter(Type::Unique(), 0); |
| 408 Node* const rhs = Parameter(Type::Unique(), 1); | 408 Node* const rhs = Parameter(Type::Unique(), 1); |
| 409 Node* const context = Parameter(Type::Any(), 2); | 409 Node* const context = Parameter(Type::Any(), 2); |
| 410 Node* const effect = graph()->start(); | 410 Node* const effect = graph()->start(); |
| 411 Node* const control = graph()->start(); | 411 Node* const control = graph()->start(); |
| 412 Reduction r = Reduce( | 412 Reduction r = Reduce( |
| 413 graph()->NewNode(javascript()->StrictEqual(CompareOperationHints::Any()), | 413 graph()->NewNode(javascript()->StrictEqual(CompareOperationHint::kAny), |
| 414 lhs, rhs, context, effect, control)); | 414 lhs, rhs, context, effect, control)); |
| 415 ASSERT_TRUE(r.Changed()); | 415 ASSERT_TRUE(r.Changed()); |
| 416 EXPECT_THAT(r.replacement(), IsReferenceEqual(Type::Unique(), lhs, rhs)); | 416 EXPECT_THAT(r.replacement(), IsReferenceEqual(Type::Unique(), lhs, rhs)); |
| 417 } | 417 } |
| 418 | 418 |
| 419 | 419 |
| 420 // ----------------------------------------------------------------------------- | 420 // ----------------------------------------------------------------------------- |
| 421 // JSShiftLeft | 421 // JSShiftLeft |
| 422 | 422 |
| 423 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32AndConstant) { | 423 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32AndConstant) { |
| 424 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 424 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 425 Node* const lhs = Parameter(Type::Signed32()); | 425 Node* const lhs = Parameter(Type::Signed32()); |
| 426 Node* const context = UndefinedConstant(); | 426 Node* const context = UndefinedConstant(); |
| 427 Node* const effect = graph()->start(); | 427 Node* const effect = graph()->start(); |
| 428 Node* const control = graph()->start(); | 428 Node* const control = graph()->start(); |
| 429 TRACED_FORRANGE(double, rhs, 0, 31) { | 429 TRACED_FORRANGE(double, rhs, 0, 31) { |
| 430 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hints), lhs, | 430 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hint), lhs, |
| 431 NumberConstant(rhs), context, | 431 NumberConstant(rhs), context, |
| 432 EmptyFrameState(), effect, control)); | 432 EmptyFrameState(), effect, control)); |
| 433 ASSERT_TRUE(r.Changed()); | 433 ASSERT_TRUE(r.Changed()); |
| 434 EXPECT_THAT(r.replacement(), | 434 EXPECT_THAT(r.replacement(), |
| 435 IsNumberShiftLeft(lhs, IsNumberConstant(BitEq(rhs)))); | 435 IsNumberShiftLeft(lhs, IsNumberConstant(BitEq(rhs)))); |
| 436 } | 436 } |
| 437 } | 437 } |
| 438 | 438 |
| 439 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32AndUnsigned32) { | 439 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32AndUnsigned32) { |
| 440 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 440 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 441 Node* const lhs = Parameter(Type::Signed32()); | 441 Node* const lhs = Parameter(Type::Signed32()); |
| 442 Node* const rhs = Parameter(Type::Unsigned32()); | 442 Node* const rhs = Parameter(Type::Unsigned32()); |
| 443 Node* const context = UndefinedConstant(); | 443 Node* const context = UndefinedConstant(); |
| 444 Node* const effect = graph()->start(); | 444 Node* const effect = graph()->start(); |
| 445 Node* const control = graph()->start(); | 445 Node* const control = graph()->start(); |
| 446 Reduction r = | 446 Reduction r = |
| 447 Reduce(graph()->NewNode(javascript()->ShiftLeft(hints), lhs, rhs, context, | 447 Reduce(graph()->NewNode(javascript()->ShiftLeft(hint), lhs, rhs, context, |
| 448 EmptyFrameState(), effect, control)); | 448 EmptyFrameState(), effect, control)); |
| 449 ASSERT_TRUE(r.Changed()); | 449 ASSERT_TRUE(r.Changed()); |
| 450 EXPECT_THAT(r.replacement(), IsNumberShiftLeft(lhs, rhs)); | 450 EXPECT_THAT(r.replacement(), IsNumberShiftLeft(lhs, rhs)); |
| 451 } | 451 } |
| 452 | 452 |
| 453 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSignedSmallHint) { | 453 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSignedSmallHint) { |
| 454 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 454 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 455 BinaryOperationHints::kSignedSmall, | |
| 456 BinaryOperationHints::kSignedSmall); | |
| 457 Node* lhs = Parameter(Type::Number(), 2); | 455 Node* lhs = Parameter(Type::Number(), 2); |
| 458 Node* rhs = Parameter(Type::Number(), 3); | 456 Node* rhs = Parameter(Type::Number(), 3); |
| 459 Node* effect = graph()->start(); | 457 Node* effect = graph()->start(); |
| 460 Node* control = graph()->start(); | 458 Node* control = graph()->start(); |
| 461 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hints), lhs, | 459 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hint), lhs, rhs, |
| 462 rhs, UndefinedConstant(), | 460 UndefinedConstant(), EmptyFrameState(), |
| 463 EmptyFrameState(), effect, control)); | 461 effect, control)); |
| 464 ASSERT_TRUE(r.Changed()); | 462 ASSERT_TRUE(r.Changed()); |
| 465 EXPECT_THAT(r.replacement(), | 463 EXPECT_THAT(r.replacement(), |
| 466 IsSpeculativeNumberShiftLeft(NumberOperationHint::kSignedSmall, | 464 IsSpeculativeNumberShiftLeft(NumberOperationHint::kSignedSmall, |
| 467 lhs, rhs, effect, control)); | 465 lhs, rhs, effect, control)); |
| 468 } | 466 } |
| 469 | 467 |
| 470 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32Hint) { | 468 TEST_F(JSTypedLoweringTest, JSShiftLeftWithSigned32Hint) { |
| 471 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 469 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 472 BinaryOperationHints::kSigned32, | |
| 473 BinaryOperationHints::kSigned32); | |
| 474 Node* lhs = Parameter(Type::Number(), 2); | 470 Node* lhs = Parameter(Type::Number(), 2); |
| 475 Node* rhs = Parameter(Type::Number(), 3); | 471 Node* rhs = Parameter(Type::Number(), 3); |
| 476 Node* effect = graph()->start(); | 472 Node* effect = graph()->start(); |
| 477 Node* control = graph()->start(); | 473 Node* control = graph()->start(); |
| 478 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hints), lhs, | 474 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hint), lhs, rhs, |
| 479 rhs, UndefinedConstant(), | 475 UndefinedConstant(), EmptyFrameState(), |
| 480 EmptyFrameState(), effect, control)); | 476 effect, control)); |
| 481 ASSERT_TRUE(r.Changed()); | 477 ASSERT_TRUE(r.Changed()); |
| 482 EXPECT_THAT(r.replacement(), | 478 EXPECT_THAT(r.replacement(), |
| 483 IsSpeculativeNumberShiftLeft(NumberOperationHint::kSigned32, lhs, | 479 IsSpeculativeNumberShiftLeft(NumberOperationHint::kSigned32, lhs, |
| 484 rhs, effect, control)); | 480 rhs, effect, control)); |
| 485 } | 481 } |
| 486 | 482 |
| 487 TEST_F(JSTypedLoweringTest, JSShiftLeftWithNumberOrOddballHint) { | 483 TEST_F(JSTypedLoweringTest, JSShiftLeftWithNumberOrOddballHint) { |
| 488 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 484 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 489 BinaryOperationHints::kNumberOrOddball, | |
| 490 BinaryOperationHints::kNumberOrOddball); | |
| 491 Node* lhs = Parameter(Type::Number(), 2); | 485 Node* lhs = Parameter(Type::Number(), 2); |
| 492 Node* rhs = Parameter(Type::Number(), 3); | 486 Node* rhs = Parameter(Type::Number(), 3); |
| 493 Node* effect = graph()->start(); | 487 Node* effect = graph()->start(); |
| 494 Node* control = graph()->start(); | 488 Node* control = graph()->start(); |
| 495 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hints), lhs, | 489 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftLeft(hint), lhs, rhs, |
| 496 rhs, UndefinedConstant(), | 490 UndefinedConstant(), EmptyFrameState(), |
| 497 EmptyFrameState(), effect, control)); | 491 effect, control)); |
| 498 ASSERT_TRUE(r.Changed()); | 492 ASSERT_TRUE(r.Changed()); |
| 499 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftLeft( | 493 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftLeft( |
| 500 NumberOperationHint::kNumberOrOddball, lhs, | 494 NumberOperationHint::kNumberOrOddball, lhs, |
| 501 rhs, effect, control)); | 495 rhs, effect, control)); |
| 502 } | 496 } |
| 503 | 497 |
| 504 // ----------------------------------------------------------------------------- | 498 // ----------------------------------------------------------------------------- |
| 505 // JSShiftRight | 499 // JSShiftRight |
| 506 | 500 |
| 507 | 501 |
| 508 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32AndConstant) { | 502 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32AndConstant) { |
| 509 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 503 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 510 Node* const lhs = Parameter(Type::Signed32()); | 504 Node* const lhs = Parameter(Type::Signed32()); |
| 511 Node* const context = UndefinedConstant(); | 505 Node* const context = UndefinedConstant(); |
| 512 Node* const effect = graph()->start(); | 506 Node* const effect = graph()->start(); |
| 513 Node* const control = graph()->start(); | 507 Node* const control = graph()->start(); |
| 514 TRACED_FORRANGE(double, rhs, 0, 31) { | 508 TRACED_FORRANGE(double, rhs, 0, 31) { |
| 515 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hints), lhs, | 509 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hint), lhs, |
| 516 NumberConstant(rhs), context, | 510 NumberConstant(rhs), context, |
| 517 EmptyFrameState(), effect, control)); | 511 EmptyFrameState(), effect, control)); |
| 518 ASSERT_TRUE(r.Changed()); | 512 ASSERT_TRUE(r.Changed()); |
| 519 EXPECT_THAT(r.replacement(), | 513 EXPECT_THAT(r.replacement(), |
| 520 IsNumberShiftRight(lhs, IsNumberConstant(BitEq(rhs)))); | 514 IsNumberShiftRight(lhs, IsNumberConstant(BitEq(rhs)))); |
| 521 } | 515 } |
| 522 } | 516 } |
| 523 | 517 |
| 524 | 518 |
| 525 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32AndUnsigned32) { | 519 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32AndUnsigned32) { |
| 526 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 520 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 527 Node* const lhs = Parameter(Type::Signed32()); | 521 Node* const lhs = Parameter(Type::Signed32()); |
| 528 Node* const rhs = Parameter(Type::Unsigned32()); | 522 Node* const rhs = Parameter(Type::Unsigned32()); |
| 529 Node* const context = UndefinedConstant(); | 523 Node* const context = UndefinedConstant(); |
| 530 Node* const effect = graph()->start(); | 524 Node* const effect = graph()->start(); |
| 531 Node* const control = graph()->start(); | 525 Node* const control = graph()->start(); |
| 532 Reduction r = | 526 Reduction r = |
| 533 Reduce(graph()->NewNode(javascript()->ShiftRight(hints), lhs, rhs, | 527 Reduce(graph()->NewNode(javascript()->ShiftRight(hint), lhs, rhs, context, |
| 534 context, EmptyFrameState(), effect, control)); | 528 EmptyFrameState(), effect, control)); |
| 535 ASSERT_TRUE(r.Changed()); | 529 ASSERT_TRUE(r.Changed()); |
| 536 EXPECT_THAT(r.replacement(), IsNumberShiftRight(lhs, rhs)); | 530 EXPECT_THAT(r.replacement(), IsNumberShiftRight(lhs, rhs)); |
| 537 } | 531 } |
| 538 | 532 |
| 539 TEST_F(JSTypedLoweringTest, JSShiftRightWithSignedSmallHint) { | 533 TEST_F(JSTypedLoweringTest, JSShiftRightWithSignedSmallHint) { |
| 540 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 534 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 541 BinaryOperationHints::kSignedSmall, | |
| 542 BinaryOperationHints::kSignedSmall); | |
| 543 Node* lhs = Parameter(Type::Number(), 2); | 535 Node* lhs = Parameter(Type::Number(), 2); |
| 544 Node* rhs = Parameter(Type::Number(), 3); | 536 Node* rhs = Parameter(Type::Number(), 3); |
| 545 Node* effect = graph()->start(); | 537 Node* effect = graph()->start(); |
| 546 Node* control = graph()->start(); | 538 Node* control = graph()->start(); |
| 547 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hints), lhs, | 539 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hint), lhs, |
| 548 rhs, UndefinedConstant(), | 540 rhs, UndefinedConstant(), |
| 549 EmptyFrameState(), effect, control)); | 541 EmptyFrameState(), effect, control)); |
| 550 ASSERT_TRUE(r.Changed()); | 542 ASSERT_TRUE(r.Changed()); |
| 551 EXPECT_THAT(r.replacement(), | 543 EXPECT_THAT(r.replacement(), |
| 552 IsSpeculativeNumberShiftRight(NumberOperationHint::kSignedSmall, | 544 IsSpeculativeNumberShiftRight(NumberOperationHint::kSignedSmall, |
| 553 lhs, rhs, effect, control)); | 545 lhs, rhs, effect, control)); |
| 554 } | 546 } |
| 555 | 547 |
| 556 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32Hint) { | 548 TEST_F(JSTypedLoweringTest, JSShiftRightWithSigned32Hint) { |
| 557 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 549 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 558 BinaryOperationHints::kSigned32, | |
| 559 BinaryOperationHints::kSigned32); | |
| 560 Node* lhs = Parameter(Type::Number(), 2); | 550 Node* lhs = Parameter(Type::Number(), 2); |
| 561 Node* rhs = Parameter(Type::Number(), 3); | 551 Node* rhs = Parameter(Type::Number(), 3); |
| 562 Node* effect = graph()->start(); | 552 Node* effect = graph()->start(); |
| 563 Node* control = graph()->start(); | 553 Node* control = graph()->start(); |
| 564 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hints), lhs, | 554 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hint), lhs, |
| 565 rhs, UndefinedConstant(), | 555 rhs, UndefinedConstant(), |
| 566 EmptyFrameState(), effect, control)); | 556 EmptyFrameState(), effect, control)); |
| 567 ASSERT_TRUE(r.Changed()); | 557 ASSERT_TRUE(r.Changed()); |
| 568 EXPECT_THAT(r.replacement(), | 558 EXPECT_THAT(r.replacement(), |
| 569 IsSpeculativeNumberShiftRight(NumberOperationHint::kSigned32, lhs, | 559 IsSpeculativeNumberShiftRight(NumberOperationHint::kSigned32, lhs, |
| 570 rhs, effect, control)); | 560 rhs, effect, control)); |
| 571 } | 561 } |
| 572 | 562 |
| 573 TEST_F(JSTypedLoweringTest, JSShiftRightWithNumberOrOddballHint) { | 563 TEST_F(JSTypedLoweringTest, JSShiftRightWithNumberOrOddballHint) { |
| 574 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 564 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 575 BinaryOperationHints::kNumberOrOddball, | |
| 576 BinaryOperationHints::kNumberOrOddball); | |
| 577 Node* lhs = Parameter(Type::Number(), 2); | 565 Node* lhs = Parameter(Type::Number(), 2); |
| 578 Node* rhs = Parameter(Type::Number(), 3); | 566 Node* rhs = Parameter(Type::Number(), 3); |
| 579 Node* effect = graph()->start(); | 567 Node* effect = graph()->start(); |
| 580 Node* control = graph()->start(); | 568 Node* control = graph()->start(); |
| 581 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hints), lhs, | 569 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRight(hint), lhs, |
| 582 rhs, UndefinedConstant(), | 570 rhs, UndefinedConstant(), |
| 583 EmptyFrameState(), effect, control)); | 571 EmptyFrameState(), effect, control)); |
| 584 ASSERT_TRUE(r.Changed()); | 572 ASSERT_TRUE(r.Changed()); |
| 585 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRight( | 573 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRight( |
| 586 NumberOperationHint::kNumberOrOddball, lhs, | 574 NumberOperationHint::kNumberOrOddball, lhs, |
| 587 rhs, effect, control)); | 575 rhs, effect, control)); |
| 588 } | 576 } |
| 589 | 577 |
| 590 // ----------------------------------------------------------------------------- | 578 // ----------------------------------------------------------------------------- |
| 591 // JSShiftRightLogical | 579 // JSShiftRightLogical |
| 592 | 580 |
| 593 | 581 |
| 594 TEST_F(JSTypedLoweringTest, | 582 TEST_F(JSTypedLoweringTest, |
| 595 JSShiftRightLogicalWithUnsigned32AndConstant) { | 583 JSShiftRightLogicalWithUnsigned32AndConstant) { |
| 596 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 584 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 597 Node* const lhs = Parameter(Type::Unsigned32()); | 585 Node* const lhs = Parameter(Type::Unsigned32()); |
| 598 Node* const context = UndefinedConstant(); | 586 Node* const context = UndefinedConstant(); |
| 599 Node* const effect = graph()->start(); | 587 Node* const effect = graph()->start(); |
| 600 Node* const control = graph()->start(); | 588 Node* const control = graph()->start(); |
| 601 TRACED_FORRANGE(double, rhs, 0, 31) { | 589 TRACED_FORRANGE(double, rhs, 0, 31) { |
| 602 Reduction r = Reduce(graph()->NewNode( | 590 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hint), |
| 603 javascript()->ShiftRightLogical(hints), lhs, NumberConstant(rhs), | 591 lhs, NumberConstant(rhs), context, |
| 604 context, EmptyFrameState(), effect, control)); | 592 EmptyFrameState(), effect, control)); |
| 605 ASSERT_TRUE(r.Changed()); | 593 ASSERT_TRUE(r.Changed()); |
| 606 EXPECT_THAT(r.replacement(), | 594 EXPECT_THAT(r.replacement(), |
| 607 IsNumberShiftRightLogical(lhs, IsNumberConstant(BitEq(rhs)))); | 595 IsNumberShiftRightLogical(lhs, IsNumberConstant(BitEq(rhs)))); |
| 608 } | 596 } |
| 609 } | 597 } |
| 610 | 598 |
| 611 | 599 |
| 612 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithUnsigned32AndUnsigned32) { | 600 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithUnsigned32AndUnsigned32) { |
| 613 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 601 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 614 Node* const lhs = Parameter(Type::Unsigned32()); | 602 Node* const lhs = Parameter(Type::Unsigned32()); |
| 615 Node* const rhs = Parameter(Type::Unsigned32()); | 603 Node* const rhs = Parameter(Type::Unsigned32()); |
| 616 Node* const context = UndefinedConstant(); | 604 Node* const context = UndefinedConstant(); |
| 617 Node* const effect = graph()->start(); | 605 Node* const effect = graph()->start(); |
| 618 Node* const control = graph()->start(); | 606 Node* const control = graph()->start(); |
| 619 Reduction r = | 607 Reduction r = |
| 620 Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hints), lhs, rhs, | 608 Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hint), lhs, rhs, |
| 621 context, EmptyFrameState(), effect, control)); | 609 context, EmptyFrameState(), effect, control)); |
| 622 ASSERT_TRUE(r.Changed()); | 610 ASSERT_TRUE(r.Changed()); |
| 623 EXPECT_THAT(r.replacement(), IsNumberShiftRightLogical(lhs, rhs)); | 611 EXPECT_THAT(r.replacement(), IsNumberShiftRightLogical(lhs, rhs)); |
| 624 } | 612 } |
| 625 | 613 |
| 626 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithSignedSmallHint) { | 614 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithSignedSmallHint) { |
| 627 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 615 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 628 BinaryOperationHints::kSignedSmall, | |
| 629 BinaryOperationHints::kSignedSmall); | |
| 630 Node* lhs = Parameter(Type::Number(), 2); | 616 Node* lhs = Parameter(Type::Number(), 2); |
| 631 Node* rhs = Parameter(Type::Number(), 3); | 617 Node* rhs = Parameter(Type::Number(), 3); |
| 632 Node* effect = graph()->start(); | 618 Node* effect = graph()->start(); |
| 633 Node* control = graph()->start(); | 619 Node* control = graph()->start(); |
| 634 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hints), | 620 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hint), |
| 635 lhs, rhs, UndefinedConstant(), | 621 lhs, rhs, UndefinedConstant(), |
| 636 EmptyFrameState(), effect, control)); | 622 EmptyFrameState(), effect, control)); |
| 637 ASSERT_TRUE(r.Changed()); | 623 ASSERT_TRUE(r.Changed()); |
| 638 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRightLogical( | 624 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRightLogical( |
| 639 NumberOperationHint::kSignedSmall, lhs, rhs, | 625 NumberOperationHint::kSignedSmall, lhs, rhs, |
| 640 effect, control)); | 626 effect, control)); |
| 641 } | 627 } |
| 642 | 628 |
| 643 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithSigned32Hint) { | 629 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithSigned32Hint) { |
| 644 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 630 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 645 BinaryOperationHints::kSigned32, | |
| 646 BinaryOperationHints::kSigned32); | |
| 647 Node* lhs = Parameter(Type::Number(), 2); | 631 Node* lhs = Parameter(Type::Number(), 2); |
| 648 Node* rhs = Parameter(Type::Number(), 3); | 632 Node* rhs = Parameter(Type::Number(), 3); |
| 649 Node* effect = graph()->start(); | 633 Node* effect = graph()->start(); |
| 650 Node* control = graph()->start(); | 634 Node* control = graph()->start(); |
| 651 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hints), | 635 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hint), |
| 652 lhs, rhs, UndefinedConstant(), | 636 lhs, rhs, UndefinedConstant(), |
| 653 EmptyFrameState(), effect, control)); | 637 EmptyFrameState(), effect, control)); |
| 654 ASSERT_TRUE(r.Changed()); | 638 ASSERT_TRUE(r.Changed()); |
| 655 EXPECT_THAT(r.replacement(), | 639 EXPECT_THAT(r.replacement(), |
| 656 IsSpeculativeNumberShiftRightLogical( | 640 IsSpeculativeNumberShiftRightLogical( |
| 657 NumberOperationHint::kSigned32, lhs, rhs, effect, control)); | 641 NumberOperationHint::kSigned32, lhs, rhs, effect, control)); |
| 658 } | 642 } |
| 659 | 643 |
| 660 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithNumberOrOddballHint) { | 644 TEST_F(JSTypedLoweringTest, JSShiftRightLogicalWithNumberOrOddballHint) { |
| 661 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 645 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 662 BinaryOperationHints::kNumberOrOddball, | |
| 663 BinaryOperationHints::kNumberOrOddball); | |
| 664 Node* lhs = Parameter(Type::Number(), 2); | 646 Node* lhs = Parameter(Type::Number(), 2); |
| 665 Node* rhs = Parameter(Type::Number(), 3); | 647 Node* rhs = Parameter(Type::Number(), 3); |
| 666 Node* effect = graph()->start(); | 648 Node* effect = graph()->start(); |
| 667 Node* control = graph()->start(); | 649 Node* control = graph()->start(); |
| 668 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hints), | 650 Reduction r = Reduce(graph()->NewNode(javascript()->ShiftRightLogical(hint), |
| 669 lhs, rhs, UndefinedConstant(), | 651 lhs, rhs, UndefinedConstant(), |
| 670 EmptyFrameState(), effect, control)); | 652 EmptyFrameState(), effect, control)); |
| 671 ASSERT_TRUE(r.Changed()); | 653 ASSERT_TRUE(r.Changed()); |
| 672 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRightLogical( | 654 EXPECT_THAT(r.replacement(), IsSpeculativeNumberShiftRightLogical( |
| 673 NumberOperationHint::kNumberOrOddball, lhs, | 655 NumberOperationHint::kNumberOrOddball, lhs, |
| 674 rhs, effect, control)); | 656 rhs, effect, control)); |
| 675 } | 657 } |
| 676 | 658 |
| 677 // ----------------------------------------------------------------------------- | 659 // ----------------------------------------------------------------------------- |
| 678 // JSLoadContext | 660 // JSLoadContext |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 EXPECT_THAT(r.replacement(), IsLoadField(AccessBuilder::ForStringLength(), | 960 EXPECT_THAT(r.replacement(), IsLoadField(AccessBuilder::ForStringLength(), |
| 979 receiver, effect, control)); | 961 receiver, effect, control)); |
| 980 } | 962 } |
| 981 | 963 |
| 982 | 964 |
| 983 // ----------------------------------------------------------------------------- | 965 // ----------------------------------------------------------------------------- |
| 984 // JSAdd | 966 // JSAdd |
| 985 | 967 |
| 986 | 968 |
| 987 TEST_F(JSTypedLoweringTest, JSAddWithString) { | 969 TEST_F(JSTypedLoweringTest, JSAddWithString) { |
| 988 BinaryOperationHints const hints = BinaryOperationHints::Any(); | 970 BinaryOperationHint const hint = BinaryOperationHint::kAny; |
| 989 Node* lhs = Parameter(Type::String(), 0); | 971 Node* lhs = Parameter(Type::String(), 0); |
| 990 Node* rhs = Parameter(Type::String(), 1); | 972 Node* rhs = Parameter(Type::String(), 1); |
| 991 Node* context = Parameter(Type::Any(), 2); | 973 Node* context = Parameter(Type::Any(), 2); |
| 992 Node* frame_state = EmptyFrameState(); | 974 Node* frame_state = EmptyFrameState(); |
| 993 Node* effect = graph()->start(); | 975 Node* effect = graph()->start(); |
| 994 Node* control = graph()->start(); | 976 Node* control = graph()->start(); |
| 995 Reduction r = Reduce(graph()->NewNode(javascript()->Add(hints), lhs, rhs, | 977 Reduction r = Reduce(graph()->NewNode(javascript()->Add(hint), lhs, rhs, |
| 996 context, frame_state, effect, control)); | 978 context, frame_state, effect, control)); |
| 997 ASSERT_TRUE(r.Changed()); | 979 ASSERT_TRUE(r.Changed()); |
| 998 EXPECT_THAT(r.replacement(), | 980 EXPECT_THAT(r.replacement(), |
| 999 IsCall(_, IsHeapConstant( | 981 IsCall(_, IsHeapConstant( |
| 1000 CodeFactory::StringAdd( | 982 CodeFactory::StringAdd( |
| 1001 isolate(), STRING_ADD_CHECK_NONE, NOT_TENURED) | 983 isolate(), STRING_ADD_CHECK_NONE, NOT_TENURED) |
| 1002 .code()), | 984 .code()), |
| 1003 lhs, rhs, context, frame_state, effect, control)); | 985 lhs, rhs, context, frame_state, effect, control)); |
| 1004 } | 986 } |
| 1005 | 987 |
| 1006 TEST_F(JSTypedLoweringTest, JSAddSmis) { | 988 TEST_F(JSTypedLoweringTest, JSAddSmis) { |
| 1007 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 989 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 1008 BinaryOperationHints::kSignedSmall, | |
| 1009 BinaryOperationHints::kSignedSmall); | |
| 1010 Node* lhs = Parameter(Type::Number(), 0); | 990 Node* lhs = Parameter(Type::Number(), 0); |
| 1011 Node* rhs = Parameter(Type::Number(), 1); | 991 Node* rhs = Parameter(Type::Number(), 1); |
| 1012 Node* context = Parameter(Type::Any(), 2); | 992 Node* context = Parameter(Type::Any(), 2); |
| 1013 Node* frame_state = EmptyFrameState(); | 993 Node* frame_state = EmptyFrameState(); |
| 1014 Node* effect = graph()->start(); | 994 Node* effect = graph()->start(); |
| 1015 Node* control = graph()->start(); | 995 Node* control = graph()->start(); |
| 1016 Reduction r = Reduce(graph()->NewNode(javascript()->Add(hints), lhs, rhs, | 996 Reduction r = Reduce(graph()->NewNode(javascript()->Add(hint), lhs, rhs, |
| 1017 context, frame_state, effect, control)); | 997 context, frame_state, effect, control)); |
| 1018 ASSERT_TRUE(r.Changed()); | 998 ASSERT_TRUE(r.Changed()); |
| 1019 EXPECT_THAT(r.replacement(), | 999 EXPECT_THAT(r.replacement(), |
| 1020 IsSpeculativeNumberAdd(NumberOperationHint::kSignedSmall, lhs, | 1000 IsSpeculativeNumberAdd(NumberOperationHint::kSignedSmall, lhs, |
| 1021 rhs, effect, control)); | 1001 rhs, effect, control)); |
| 1022 } | 1002 } |
| 1023 | 1003 |
| 1024 // ----------------------------------------------------------------------------- | 1004 // ----------------------------------------------------------------------------- |
| 1025 // JSSubtract | 1005 // JSSubtract |
| 1026 | 1006 |
| 1027 TEST_F(JSTypedLoweringTest, JSSubtractSmis) { | 1007 TEST_F(JSTypedLoweringTest, JSSubtractSmis) { |
| 1028 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 1008 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 1029 BinaryOperationHints::kSignedSmall, | |
| 1030 BinaryOperationHints::kSignedSmall); | |
| 1031 Node* lhs = Parameter(Type::Number(), 0); | 1009 Node* lhs = Parameter(Type::Number(), 0); |
| 1032 Node* rhs = Parameter(Type::Number(), 1); | 1010 Node* rhs = Parameter(Type::Number(), 1); |
| 1033 Node* context = Parameter(Type::Any(), 2); | 1011 Node* context = Parameter(Type::Any(), 2); |
| 1034 Node* frame_state = EmptyFrameState(); | 1012 Node* frame_state = EmptyFrameState(); |
| 1035 Node* effect = graph()->start(); | 1013 Node* effect = graph()->start(); |
| 1036 Node* control = graph()->start(); | 1014 Node* control = graph()->start(); |
| 1037 Reduction r = Reduce(graph()->NewNode(javascript()->Subtract(hints), lhs, rhs, | 1015 Reduction r = Reduce(graph()->NewNode(javascript()->Subtract(hint), lhs, rhs, |
| 1038 context, frame_state, effect, control)); | 1016 context, frame_state, effect, control)); |
| 1039 ASSERT_TRUE(r.Changed()); | 1017 ASSERT_TRUE(r.Changed()); |
| 1040 EXPECT_THAT(r.replacement(), | 1018 EXPECT_THAT(r.replacement(), |
| 1041 IsSpeculativeNumberSubtract(NumberOperationHint::kSignedSmall, | 1019 IsSpeculativeNumberSubtract(NumberOperationHint::kSignedSmall, |
| 1042 lhs, rhs, effect, control)); | 1020 lhs, rhs, effect, control)); |
| 1043 } | 1021 } |
| 1044 | 1022 |
| 1045 // ----------------------------------------------------------------------------- | 1023 // ----------------------------------------------------------------------------- |
| 1046 // JSInstanceOf | 1024 // JSInstanceOf |
| 1047 // Test that instanceOf is reduced if and only if the right-hand side is a | 1025 // Test that instanceOf is reduced if and only if the right-hand side is a |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1101 frame_state, effect, control); | 1079 frame_state, effect, control); |
| 1102 Reduction r = Reduce(instanceOf); | 1080 Reduction r = Reduce(instanceOf); |
| 1103 ASSERT_FALSE(r.Changed()); | 1081 ASSERT_FALSE(r.Changed()); |
| 1104 ASSERT_EQ(instanceOf, dummy->InputAt(0)); | 1082 ASSERT_EQ(instanceOf, dummy->InputAt(0)); |
| 1105 } | 1083 } |
| 1106 | 1084 |
| 1107 // ----------------------------------------------------------------------------- | 1085 // ----------------------------------------------------------------------------- |
| 1108 // JSBitwiseAnd | 1086 // JSBitwiseAnd |
| 1109 | 1087 |
| 1110 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithSignedSmallHint) { | 1088 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithSignedSmallHint) { |
| 1111 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 1089 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 1112 BinaryOperationHints::kSignedSmall, | |
| 1113 BinaryOperationHints::kSignedSmall); | |
| 1114 Node* lhs = Parameter(Type::Number(), 2); | 1090 Node* lhs = Parameter(Type::Number(), 2); |
| 1115 Node* rhs = Parameter(Type::Number(), 3); | 1091 Node* rhs = Parameter(Type::Number(), 3); |
| 1116 Node* effect = graph()->start(); | 1092 Node* effect = graph()->start(); |
| 1117 Node* control = graph()->start(); | 1093 Node* control = graph()->start(); |
| 1118 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hints), lhs, | 1094 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hint), lhs, |
| 1119 rhs, UndefinedConstant(), | 1095 rhs, UndefinedConstant(), |
| 1120 EmptyFrameState(), effect, control)); | 1096 EmptyFrameState(), effect, control)); |
| 1121 ASSERT_TRUE(r.Changed()); | 1097 ASSERT_TRUE(r.Changed()); |
| 1122 EXPECT_THAT(r.replacement(), | 1098 EXPECT_THAT(r.replacement(), |
| 1123 IsSpeculativeNumberBitwiseAnd(NumberOperationHint::kSignedSmall, | 1099 IsSpeculativeNumberBitwiseAnd(NumberOperationHint::kSignedSmall, |
| 1124 lhs, rhs, effect, control)); | 1100 lhs, rhs, effect, control)); |
| 1125 } | 1101 } |
| 1126 | 1102 |
| 1127 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithSigned32Hint) { | 1103 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithSigned32Hint) { |
| 1128 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 1104 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 1129 BinaryOperationHints::kSigned32, | |
| 1130 BinaryOperationHints::kSigned32); | |
| 1131 Node* lhs = Parameter(Type::Number(), 2); | 1105 Node* lhs = Parameter(Type::Number(), 2); |
| 1132 Node* rhs = Parameter(Type::Number(), 3); | 1106 Node* rhs = Parameter(Type::Number(), 3); |
| 1133 Node* effect = graph()->start(); | 1107 Node* effect = graph()->start(); |
| 1134 Node* control = graph()->start(); | 1108 Node* control = graph()->start(); |
| 1135 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hints), lhs, | 1109 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hint), lhs, |
| 1136 rhs, UndefinedConstant(), | 1110 rhs, UndefinedConstant(), |
| 1137 EmptyFrameState(), effect, control)); | 1111 EmptyFrameState(), effect, control)); |
| 1138 ASSERT_TRUE(r.Changed()); | 1112 ASSERT_TRUE(r.Changed()); |
| 1139 EXPECT_THAT(r.replacement(), | 1113 EXPECT_THAT(r.replacement(), |
| 1140 IsSpeculativeNumberBitwiseAnd(NumberOperationHint::kSigned32, lhs, | 1114 IsSpeculativeNumberBitwiseAnd(NumberOperationHint::kSigned32, lhs, |
| 1141 rhs, effect, control)); | 1115 rhs, effect, control)); |
| 1142 } | 1116 } |
| 1143 | 1117 |
| 1144 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithNumberOrOddballHint) { | 1118 TEST_F(JSTypedLoweringTest, JSBitwiseAndWithNumberOrOddballHint) { |
| 1145 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 1119 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 1146 BinaryOperationHints::kNumberOrOddball, | |
| 1147 BinaryOperationHints::kNumberOrOddball); | |
| 1148 Node* lhs = Parameter(Type::Number(), 2); | 1120 Node* lhs = Parameter(Type::Number(), 2); |
| 1149 Node* rhs = Parameter(Type::Number(), 3); | 1121 Node* rhs = Parameter(Type::Number(), 3); |
| 1150 Node* effect = graph()->start(); | 1122 Node* effect = graph()->start(); |
| 1151 Node* control = graph()->start(); | 1123 Node* control = graph()->start(); |
| 1152 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hints), lhs, | 1124 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseAnd(hint), lhs, |
| 1153 rhs, UndefinedConstant(), | 1125 rhs, UndefinedConstant(), |
| 1154 EmptyFrameState(), effect, control)); | 1126 EmptyFrameState(), effect, control)); |
| 1155 ASSERT_TRUE(r.Changed()); | 1127 ASSERT_TRUE(r.Changed()); |
| 1156 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseAnd( | 1128 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseAnd( |
| 1157 NumberOperationHint::kNumberOrOddball, lhs, | 1129 NumberOperationHint::kNumberOrOddball, lhs, |
| 1158 rhs, effect, control)); | 1130 rhs, effect, control)); |
| 1159 } | 1131 } |
| 1160 | 1132 |
| 1161 // ----------------------------------------------------------------------------- | 1133 // ----------------------------------------------------------------------------- |
| 1162 // JSBitwiseOr | 1134 // JSBitwiseOr |
| 1163 | 1135 |
| 1164 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithSignedSmallHint) { | 1136 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithSignedSmallHint) { |
| 1165 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 1137 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 1166 BinaryOperationHints::kSignedSmall, | |
| 1167 BinaryOperationHints::kSignedSmall); | |
| 1168 Node* lhs = Parameter(Type::Number(), 2); | 1138 Node* lhs = Parameter(Type::Number(), 2); |
| 1169 Node* rhs = Parameter(Type::Number(), 3); | 1139 Node* rhs = Parameter(Type::Number(), 3); |
| 1170 Node* effect = graph()->start(); | 1140 Node* effect = graph()->start(); |
| 1171 Node* control = graph()->start(); | 1141 Node* control = graph()->start(); |
| 1172 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hints), lhs, | 1142 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hint), lhs, rhs, |
| 1173 rhs, UndefinedConstant(), | 1143 UndefinedConstant(), EmptyFrameState(), |
| 1174 EmptyFrameState(), effect, control)); | 1144 effect, control)); |
| 1175 ASSERT_TRUE(r.Changed()); | 1145 ASSERT_TRUE(r.Changed()); |
| 1176 EXPECT_THAT(r.replacement(), | 1146 EXPECT_THAT(r.replacement(), |
| 1177 IsSpeculativeNumberBitwiseOr(NumberOperationHint::kSignedSmall, | 1147 IsSpeculativeNumberBitwiseOr(NumberOperationHint::kSignedSmall, |
| 1178 lhs, rhs, effect, control)); | 1148 lhs, rhs, effect, control)); |
| 1179 } | 1149 } |
| 1180 | 1150 |
| 1181 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithSigned32Hint) { | 1151 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithSigned32Hint) { |
| 1182 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 1152 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 1183 BinaryOperationHints::kSigned32, | |
| 1184 BinaryOperationHints::kSigned32); | |
| 1185 Node* lhs = Parameter(Type::Number(), 2); | 1153 Node* lhs = Parameter(Type::Number(), 2); |
| 1186 Node* rhs = Parameter(Type::Number(), 3); | 1154 Node* rhs = Parameter(Type::Number(), 3); |
| 1187 Node* effect = graph()->start(); | 1155 Node* effect = graph()->start(); |
| 1188 Node* control = graph()->start(); | 1156 Node* control = graph()->start(); |
| 1189 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hints), lhs, | 1157 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hint), lhs, rhs, |
| 1190 rhs, UndefinedConstant(), | 1158 UndefinedConstant(), EmptyFrameState(), |
| 1191 EmptyFrameState(), effect, control)); | 1159 effect, control)); |
| 1192 ASSERT_TRUE(r.Changed()); | 1160 ASSERT_TRUE(r.Changed()); |
| 1193 EXPECT_THAT(r.replacement(), | 1161 EXPECT_THAT(r.replacement(), |
| 1194 IsSpeculativeNumberBitwiseOr(NumberOperationHint::kSigned32, lhs, | 1162 IsSpeculativeNumberBitwiseOr(NumberOperationHint::kSigned32, lhs, |
| 1195 rhs, effect, control)); | 1163 rhs, effect, control)); |
| 1196 } | 1164 } |
| 1197 | 1165 |
| 1198 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithNumberOrOddballHint) { | 1166 TEST_F(JSTypedLoweringTest, JSBitwiseOrWithNumberOrOddballHint) { |
| 1199 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 1167 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 1200 BinaryOperationHints::kNumberOrOddball, | |
| 1201 BinaryOperationHints::kNumberOrOddball); | |
| 1202 Node* lhs = Parameter(Type::Number(), 2); | 1168 Node* lhs = Parameter(Type::Number(), 2); |
| 1203 Node* rhs = Parameter(Type::Number(), 3); | 1169 Node* rhs = Parameter(Type::Number(), 3); |
| 1204 Node* effect = graph()->start(); | 1170 Node* effect = graph()->start(); |
| 1205 Node* control = graph()->start(); | 1171 Node* control = graph()->start(); |
| 1206 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hints), lhs, | 1172 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseOr(hint), lhs, rhs, |
| 1207 rhs, UndefinedConstant(), | 1173 UndefinedConstant(), EmptyFrameState(), |
| 1208 EmptyFrameState(), effect, control)); | 1174 effect, control)); |
| 1209 ASSERT_TRUE(r.Changed()); | 1175 ASSERT_TRUE(r.Changed()); |
| 1210 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseOr( | 1176 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseOr( |
| 1211 NumberOperationHint::kNumberOrOddball, lhs, | 1177 NumberOperationHint::kNumberOrOddball, lhs, |
| 1212 rhs, effect, control)); | 1178 rhs, effect, control)); |
| 1213 } | 1179 } |
| 1214 | 1180 |
| 1215 // ----------------------------------------------------------------------------- | 1181 // ----------------------------------------------------------------------------- |
| 1216 // JSBitwiseXor | 1182 // JSBitwiseXor |
| 1217 | 1183 |
| 1218 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithSignedSmallHint) { | 1184 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithSignedSmallHint) { |
| 1219 BinaryOperationHints const hints(BinaryOperationHints::kSignedSmall, | 1185 BinaryOperationHint const hint = BinaryOperationHint::kSignedSmall; |
| 1220 BinaryOperationHints::kSignedSmall, | |
| 1221 BinaryOperationHints::kSignedSmall); | |
| 1222 Node* lhs = Parameter(Type::Number(), 2); | 1186 Node* lhs = Parameter(Type::Number(), 2); |
| 1223 Node* rhs = Parameter(Type::Number(), 3); | 1187 Node* rhs = Parameter(Type::Number(), 3); |
| 1224 Node* effect = graph()->start(); | 1188 Node* effect = graph()->start(); |
| 1225 Node* control = graph()->start(); | 1189 Node* control = graph()->start(); |
| 1226 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hints), lhs, | 1190 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hint), lhs, |
| 1227 rhs, UndefinedConstant(), | 1191 rhs, UndefinedConstant(), |
| 1228 EmptyFrameState(), effect, control)); | 1192 EmptyFrameState(), effect, control)); |
| 1229 ASSERT_TRUE(r.Changed()); | 1193 ASSERT_TRUE(r.Changed()); |
| 1230 EXPECT_THAT(r.replacement(), | 1194 EXPECT_THAT(r.replacement(), |
| 1231 IsSpeculativeNumberBitwiseXor(NumberOperationHint::kSignedSmall, | 1195 IsSpeculativeNumberBitwiseXor(NumberOperationHint::kSignedSmall, |
| 1232 lhs, rhs, effect, control)); | 1196 lhs, rhs, effect, control)); |
| 1233 } | 1197 } |
| 1234 | 1198 |
| 1235 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithSigned32Hint) { | 1199 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithSigned32Hint) { |
| 1236 BinaryOperationHints const hints(BinaryOperationHints::kSigned32, | 1200 BinaryOperationHint const hint = BinaryOperationHint::kSigned32; |
| 1237 BinaryOperationHints::kSigned32, | |
| 1238 BinaryOperationHints::kSigned32); | |
| 1239 Node* lhs = Parameter(Type::Number(), 2); | 1201 Node* lhs = Parameter(Type::Number(), 2); |
| 1240 Node* rhs = Parameter(Type::Number(), 3); | 1202 Node* rhs = Parameter(Type::Number(), 3); |
| 1241 Node* effect = graph()->start(); | 1203 Node* effect = graph()->start(); |
| 1242 Node* control = graph()->start(); | 1204 Node* control = graph()->start(); |
| 1243 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hints), lhs, | 1205 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hint), lhs, |
| 1244 rhs, UndefinedConstant(), | 1206 rhs, UndefinedConstant(), |
| 1245 EmptyFrameState(), effect, control)); | 1207 EmptyFrameState(), effect, control)); |
| 1246 ASSERT_TRUE(r.Changed()); | 1208 ASSERT_TRUE(r.Changed()); |
| 1247 EXPECT_THAT(r.replacement(), | 1209 EXPECT_THAT(r.replacement(), |
| 1248 IsSpeculativeNumberBitwiseXor(NumberOperationHint::kSigned32, lhs, | 1210 IsSpeculativeNumberBitwiseXor(NumberOperationHint::kSigned32, lhs, |
| 1249 rhs, effect, control)); | 1211 rhs, effect, control)); |
| 1250 } | 1212 } |
| 1251 | 1213 |
| 1252 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithNumberOrOddballHint) { | 1214 TEST_F(JSTypedLoweringTest, JSBitwiseXorWithNumberOrOddballHint) { |
| 1253 BinaryOperationHints const hints(BinaryOperationHints::kNumberOrOddball, | 1215 BinaryOperationHint const hint = BinaryOperationHint::kNumberOrOddball; |
| 1254 BinaryOperationHints::kNumberOrOddball, | |
| 1255 BinaryOperationHints::kNumberOrOddball); | |
| 1256 Node* lhs = Parameter(Type::Number(), 2); | 1216 Node* lhs = Parameter(Type::Number(), 2); |
| 1257 Node* rhs = Parameter(Type::Number(), 3); | 1217 Node* rhs = Parameter(Type::Number(), 3); |
| 1258 Node* effect = graph()->start(); | 1218 Node* effect = graph()->start(); |
| 1259 Node* control = graph()->start(); | 1219 Node* control = graph()->start(); |
| 1260 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hints), lhs, | 1220 Reduction r = Reduce(graph()->NewNode(javascript()->BitwiseXor(hint), lhs, |
| 1261 rhs, UndefinedConstant(), | 1221 rhs, UndefinedConstant(), |
| 1262 EmptyFrameState(), effect, control)); | 1222 EmptyFrameState(), effect, control)); |
| 1263 ASSERT_TRUE(r.Changed()); | 1223 ASSERT_TRUE(r.Changed()); |
| 1264 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor( | 1224 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor( |
| 1265 NumberOperationHint::kNumberOrOddball, lhs, | 1225 NumberOperationHint::kNumberOrOddball, lhs, |
| 1266 rhs, effect, control)); | 1226 rhs, effect, control)); |
| 1267 } | 1227 } |
| 1268 | 1228 |
| 1269 } // namespace compiler | 1229 } // namespace compiler |
| 1270 } // namespace internal | 1230 } // namespace internal |
| 1271 } // namespace v8 | 1231 } // namespace v8 |
| OLD | NEW |