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

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

Issue 2596843002: [turbofan] Optimize store to typed arrays only if the value is plain primitive. (Closed)
Patch Set: Remove dead variable Created 3 years, 12 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
« no previous file with comments | « test/mjsunit/compiler/regress-v8-5756.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/compiler/js-typed-lowering.h" 5 #include "src/compiler/js-typed-lowering.h"
6 #include "src/code-factory.h" 6 #include "src/code-factory.h"
7 #include "src/compilation-dependencies.h" 7 #include "src/compilation-dependencies.h"
8 #include "src/compiler/access-builder.h" 8 #include "src/compiler/access-builder.h"
9 #include "src/compiler/js-graph.h" 9 #include "src/compiler/js-graph.h"
10 #include "src/compiler/js-operator.h" 10 #include "src/compiler/js-operator.h"
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 NewArrayBuffer(backing_store, sizeof(backing_store)); 710 NewArrayBuffer(backing_store, sizeof(backing_store));
711 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) { 711 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
712 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) { 712 TRACED_FOREACH(LanguageMode, language_mode, kLanguageModes) {
713 Handle<JSTypedArray> array = 713 Handle<JSTypedArray> array =
714 factory()->NewJSTypedArray(type, buffer, 0, kLength); 714 factory()->NewJSTypedArray(type, buffer, 0, kLength);
715 int const element_size = static_cast<int>(array->element_size()); 715 int const element_size = static_cast<int>(array->element_size());
716 716
717 Node* key = Parameter( 717 Node* key = Parameter(
718 Type::Range(kMinInt / element_size, kMaxInt / element_size, zone())); 718 Type::Range(kMinInt / element_size, kMaxInt / element_size, zone()));
719 Node* base = HeapConstant(array); 719 Node* base = HeapConstant(array);
720 Node* value = Parameter(Type::Any()); 720 Node* value = Parameter(Type::PlainPrimitive());
721 Node* context = UndefinedConstant(); 721 Node* context = UndefinedConstant();
722 Node* effect = graph()->start(); 722 Node* effect = graph()->start();
723 Node* control = graph()->start(); 723 Node* control = graph()->start();
724 // TODO(mstarzinger): Once the effect-control-linearizer provides a frame 724 // TODO(mstarzinger): Once the effect-control-linearizer provides a frame
725 // state we can get rid of this checkpoint again. The reducer won't care. 725 // state we can get rid of this checkpoint again. The reducer won't care.
726 Node* checkpoint = graph()->NewNode(common()->Checkpoint(), 726 Node* checkpoint = graph()->NewNode(common()->Checkpoint(),
727 EmptyFrameState(), effect, control); 727 EmptyFrameState(), effect, control);
728 VectorSlotPair feedback; 728 VectorSlotPair feedback;
729 const Operator* op = javascript()->StoreProperty(language_mode, feedback); 729 const Operator* op = javascript()->StoreProperty(language_mode, feedback);
730 Node* node = graph()->NewNode(op, base, key, value, context, 730 Node* node = graph()->NewNode(op, base, key, value, context,
731 EmptyFrameState(), checkpoint, control); 731 EmptyFrameState(), checkpoint, control);
732 Reduction r = Reduce(node); 732 Reduction r = Reduce(node);
733 733
734 Matcher<Node*> offset_matcher = 734 Matcher<Node*> offset_matcher =
735 element_size == 1 735 element_size == 1
736 ? key 736 ? key
737 : IsNumberShiftLeft( 737 : IsNumberShiftLeft(
738 key, IsNumberConstant(WhichPowerOf2(element_size))); 738 key, IsNumberConstant(WhichPowerOf2(element_size)));
739 739
740 Matcher<Node*> value_matcher = 740 Matcher<Node*> value_matcher = IsPlainPrimitiveToNumber(value);
741 IsToNumber(value, context, checkpoint, control);
742 Matcher<Node*> effect_matcher = value_matcher;
743 Matcher<Node*> control_matcher = IsIfSuccess(value_matcher);
744 741
745 ASSERT_TRUE(r.Changed()); 742 ASSERT_TRUE(r.Changed());
746 EXPECT_THAT( 743 EXPECT_THAT(
747 r.replacement(), 744 r.replacement(),
748 IsStoreBuffer( 745 IsStoreBuffer(
749 BufferAccess(type), 746 BufferAccess(type),
750 IsPointerConstant(bit_cast<intptr_t>(&backing_store[0])), 747 IsPointerConstant(bit_cast<intptr_t>(&backing_store[0])),
751 offset_matcher, IsNumberConstant(array->byte_length()->Number()), 748 offset_matcher, IsNumberConstant(array->byte_length()->Number()),
752 value_matcher, effect_matcher, control_matcher)); 749 value_matcher, checkpoint, control));
753 } 750 }
754 } 751 }
755 } 752 }
756 753
757 754
758 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArrayWithSafeKey) { 755 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArrayWithSafeKey) {
759 const size_t kLength = 17; 756 const size_t kLength = 17;
760 double backing_store[kLength]; 757 double backing_store[kLength];
761 Handle<JSArrayBuffer> buffer = 758 Handle<JSArrayBuffer> buffer =
762 NewArrayBuffer(backing_store, sizeof(backing_store)); 759 NewArrayBuffer(backing_store, sizeof(backing_store));
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 EmptyFrameState(), effect, control)); 1007 EmptyFrameState(), effect, control));
1011 ASSERT_TRUE(r.Changed()); 1008 ASSERT_TRUE(r.Changed());
1012 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor( 1009 EXPECT_THAT(r.replacement(), IsSpeculativeNumberBitwiseXor(
1013 NumberOperationHint::kNumberOrOddball, lhs, 1010 NumberOperationHint::kNumberOrOddball, lhs,
1014 rhs, effect, control)); 1011 rhs, effect, control));
1015 } 1012 }
1016 1013
1017 } // namespace compiler 1014 } // namespace compiler
1018 } // namespace internal 1015 } // namespace internal
1019 } // namespace v8 1016 } // namespace v8
OLDNEW
« no previous file with comments | « test/mjsunit/compiler/regress-v8-5756.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698