Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(148)

Side by Side Diff: test/unittests/compiler/js-typed-lowering-unittest.cc

Issue 1700993002: Remove strong mode support from property loads. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix comment. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 582 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 // JSLoadProperty 593 // JSLoadProperty
594 594
595 595
596 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArray) { 596 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArray) {
597 const size_t kLength = 17; 597 const size_t kLength = 17;
598 double backing_store[kLength]; 598 double backing_store[kLength];
599 Handle<JSArrayBuffer> buffer = 599 Handle<JSArrayBuffer> buffer =
600 NewArrayBuffer(backing_store, sizeof(backing_store)); 600 NewArrayBuffer(backing_store, sizeof(backing_store));
601 VectorSlotPair feedback; 601 VectorSlotPair feedback;
602 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) { 602 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
603 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) { 603 Handle<JSTypedArray> array =
604 Handle<JSTypedArray> array = 604 factory()->NewJSTypedArray(type, buffer, 0, kLength);
605 factory()->NewJSTypedArray(type, buffer, 0, kLength); 605 int const element_size = static_cast<int>(array->element_size());
606 int const element_size = static_cast<int>(array->element_size());
607 606
608 Node* key = Parameter( 607 Node* key = Parameter(
609 Type::Range(kMinInt / element_size, kMaxInt / element_size, zone())); 608 Type::Range(kMinInt / element_size, kMaxInt / element_size, zone()));
610 Node* base = HeapConstant(array); 609 Node* base = HeapConstant(array);
611 Node* vector = UndefinedConstant(); 610 Node* vector = UndefinedConstant();
612 Node* context = UndefinedConstant(); 611 Node* context = UndefinedConstant();
613 Node* effect = graph()->start(); 612 Node* effect = graph()->start();
614 Node* control = graph()->start(); 613 Node* control = graph()->start();
615 Reduction r = Reduce( 614 Reduction r = Reduce(graph()->NewNode(
616 graph()->NewNode(javascript()->LoadProperty(language_mode, feedback), 615 javascript()->LoadProperty(feedback), base, key, vector, context,
617 base, key, vector, context, EmptyFrameState(), 616 EmptyFrameState(), EmptyFrameState(), effect, control));
618 EmptyFrameState(), effect, control));
619 617
620 Matcher<Node*> offset_matcher = 618 Matcher<Node*> offset_matcher =
621 element_size == 1 619 element_size == 1
622 ? key 620 ? key
623 : IsWord32Shl(key, IsInt32Constant(WhichPowerOf2(element_size))); 621 : IsWord32Shl(key, IsInt32Constant(WhichPowerOf2(element_size)));
624 622
625 ASSERT_TRUE(r.Changed()); 623 ASSERT_TRUE(r.Changed());
626 EXPECT_THAT( 624 EXPECT_THAT(
627 r.replacement(), 625 r.replacement(),
628 IsLoadBuffer(BufferAccess(type), 626 IsLoadBuffer(BufferAccess(type),
629 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), 627 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
630 offset_matcher, 628 offset_matcher,
631 IsNumberConstant(array->byte_length()->Number()), effect, 629 IsNumberConstant(array->byte_length()->Number()), effect,
632 control)); 630 control));
633 }
634 } 631 }
635 } 632 }
636 633
637 634
638 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArrayWithSafeKey) { 635 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArrayWithSafeKey) {
639 const size_t kLength = 17; 636 const size_t kLength = 17;
640 double backing_store[kLength]; 637 double backing_store[kLength];
641 Handle<JSArrayBuffer> buffer = 638 Handle<JSArrayBuffer> buffer =
642 NewArrayBuffer(backing_store, sizeof(backing_store)); 639 NewArrayBuffer(backing_store, sizeof(backing_store));
643 VectorSlotPair feedback; 640 VectorSlotPair feedback;
644 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) { 641 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
645 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) { 642 Handle<JSTypedArray> array =
646 Handle<JSTypedArray> array = 643 factory()->NewJSTypedArray(type, buffer, 0, kLength);
647 factory()->NewJSTypedArray(type, buffer, 0, kLength); 644 ElementAccess access = AccessBuilder::ForTypedArrayElement(type, true);
648 ElementAccess access = AccessBuilder::ForTypedArrayElement(type, true);
649 645
650 int min = random_number_generator()->NextInt(static_cast<int>(kLength)); 646 int min = random_number_generator()->NextInt(static_cast<int>(kLength));
651 int max = random_number_generator()->NextInt(static_cast<int>(kLength)); 647 int max = random_number_generator()->NextInt(static_cast<int>(kLength));
652 if (min > max) std::swap(min, max); 648 if (min > max) std::swap(min, max);
653 Node* key = Parameter(Type::Range(min, max, zone())); 649 Node* key = Parameter(Type::Range(min, max, zone()));
654 Node* base = HeapConstant(array); 650 Node* base = HeapConstant(array);
655 Node* vector = UndefinedConstant(); 651 Node* vector = UndefinedConstant();
656 Node* context = UndefinedConstant(); 652 Node* context = UndefinedConstant();
657 Node* effect = graph()->start(); 653 Node* effect = graph()->start();
658 Node* control = graph()->start(); 654 Node* control = graph()->start();
659 Reduction r = Reduce( 655 Reduction r = Reduce(graph()->NewNode(
660 graph()->NewNode(javascript()->LoadProperty(language_mode, feedback), 656 javascript()->LoadProperty(feedback), base, key, vector, context,
661 base, key, vector, context, EmptyFrameState(), 657 EmptyFrameState(), EmptyFrameState(), effect, control));
662 EmptyFrameState(), effect, control));
663 658
664 ASSERT_TRUE(r.Changed()); 659 ASSERT_TRUE(r.Changed());
665 EXPECT_THAT( 660 EXPECT_THAT(
666 r.replacement(), 661 r.replacement(),
667 IsLoadElement(access, 662 IsLoadElement(access,
668 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), 663 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
669 key, effect, control)); 664 key, effect, control));
670 }
671 } 665 }
672 } 666 }
673 667
674 668
675 // ----------------------------------------------------------------------------- 669 // -----------------------------------------------------------------------------
676 // JSStoreProperty 670 // JSStoreProperty
677 671
678 672
679 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArray) { 673 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArray) {
680 const size_t kLength = 17; 674 const size_t kLength = 17;
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
813 807
814 808
815 TEST_F(JSTypedLoweringTest, JSLoadNamedStringLength) { 809 TEST_F(JSTypedLoweringTest, JSLoadNamedStringLength) {
816 VectorSlotPair feedback; 810 VectorSlotPair feedback;
817 Handle<Name> name = factory()->length_string(); 811 Handle<Name> name = factory()->length_string();
818 Node* const receiver = Parameter(Type::String(), 0); 812 Node* const receiver = Parameter(Type::String(), 0);
819 Node* const vector = Parameter(Type::Internal(), 1); 813 Node* const vector = Parameter(Type::Internal(), 1);
820 Node* const context = UndefinedConstant(); 814 Node* const context = UndefinedConstant();
821 Node* const effect = graph()->start(); 815 Node* const effect = graph()->start();
822 Node* const control = graph()->start(); 816 Node* const control = graph()->start();
823 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) { 817 Reduction const r = Reduce(graph()->NewNode(
824 Reduction const r = Reduce( 818 javascript()->LoadNamed(name, feedback), receiver, vector, context,
825 graph()->NewNode(javascript()->LoadNamed(language_mode, name, feedback), 819 EmptyFrameState(), EmptyFrameState(), effect, control));
826 receiver, vector, context, EmptyFrameState(), 820 ASSERT_TRUE(r.Changed());
827 EmptyFrameState(), effect, control)); 821 EXPECT_THAT(r.replacement(), IsLoadField(AccessBuilder::ForStringLength(),
828 ASSERT_TRUE(r.Changed()); 822 receiver, effect, control));
829 EXPECT_THAT(r.replacement(), IsLoadField(AccessBuilder::ForStringLength(),
830 receiver, effect, control));
831 }
832 } 823 }
833 824
834 825
835 TEST_F(JSTypedLoweringTest, JSLoadNamedFunctionPrototype) { 826 TEST_F(JSTypedLoweringTest, JSLoadNamedFunctionPrototype) {
836 VectorSlotPair feedback; 827 VectorSlotPair feedback;
837 Handle<Name> name = factory()->prototype_string(); 828 Handle<Name> name = factory()->prototype_string();
838 Handle<JSFunction> function = isolate()->object_function(); 829 Handle<JSFunction> function = isolate()->object_function();
839 Handle<JSObject> function_prototype(JSObject::cast(function->prototype())); 830 Handle<JSObject> function_prototype(JSObject::cast(function->prototype()));
840 Node* const receiver = Parameter(Type::Constant(function, zone()), 0); 831 Node* const receiver = Parameter(Type::Constant(function, zone()), 0);
841 Node* const vector = Parameter(Type::Internal(), 1); 832 Node* const vector = Parameter(Type::Internal(), 1);
842 Node* const context = Parameter(Type::Internal(), 2); 833 Node* const context = Parameter(Type::Internal(), 2);
843 Node* const effect = graph()->start(); 834 Node* const effect = graph()->start();
844 Node* const control = graph()->start(); 835 Node* const control = graph()->start();
845 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) { 836 Reduction const r = Reduce(graph()->NewNode(
846 Reduction const r = Reduce( 837 javascript()->LoadNamed(name, feedback), receiver, vector, context,
847 graph()->NewNode(javascript()->LoadNamed(language_mode, name, feedback), 838 EmptyFrameState(), EmptyFrameState(), effect, control));
848 receiver, vector, context, EmptyFrameState(), 839 ASSERT_TRUE(r.Changed());
849 EmptyFrameState(), effect, control)); 840 EXPECT_THAT(r.replacement(), IsHeapConstant(function_prototype));
850 ASSERT_TRUE(r.Changed());
851 EXPECT_THAT(r.replacement(), IsHeapConstant(function_prototype));
852 }
853 } 841 }
854 842
855 843
856 // ----------------------------------------------------------------------------- 844 // -----------------------------------------------------------------------------
857 // JSAdd 845 // JSAdd
858 846
859 847
860 TEST_F(JSTypedLoweringTest, JSAddWithString) { 848 TEST_F(JSTypedLoweringTest, JSAddWithString) {
861 BinaryOperationHints const hints = BinaryOperationHints::Any(); 849 BinaryOperationHints const hints = BinaryOperationHints::Any();
862 Node* lhs = Parameter(Type::String(), 0); 850 Node* lhs = Parameter(Type::String(), 0);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 Node* dummy = graph()->NewNode(javascript()->ToObject(), instanceOf, context, 925 Node* dummy = graph()->NewNode(javascript()->ToObject(), instanceOf, context,
938 frame_state, effect, control); 926 frame_state, effect, control);
939 Reduction r = Reduce(instanceOf); 927 Reduction r = Reduce(instanceOf);
940 ASSERT_FALSE(r.Changed()); 928 ASSERT_FALSE(r.Changed());
941 ASSERT_EQ(instanceOf, dummy->InputAt(0)); 929 ASSERT_EQ(instanceOf, dummy->InputAt(0));
942 } 930 }
943 931
944 } // namespace compiler 932 } // namespace compiler
945 } // namespace internal 933 } // namespace internal
946 } // namespace v8 934 } // namespace v8
OLDNEW
« no previous file with comments | « test/mjsunit/mjsunit.status ('k') | test/unittests/interpreter/bytecode-array-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698