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

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

Issue 691513002: [turbofan] Introduce new Select operator to improve bounds checking. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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 | Annotate | Revision Log
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/access-builder.h" 5 #include "src/compiler/access-builder.h"
6 #include "src/compiler/js-graph.h" 6 #include "src/compiler/js-graph.h"
7 #include "src/compiler/js-operator.h" 7 #include "src/compiler/js-operator.h"
8 #include "src/compiler/js-typed-lowering.h" 8 #include "src/compiler/js-typed-lowering.h"
9 #include "src/compiler/machine-operator.h" 9 #include "src/compiler/machine-operator.h"
10 #include "src/compiler/node-properties-inl.h" 10 #include "src/compiler/node-properties-inl.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 IsBooleanNot(IsNumberEqual(p0, IsNumberConstant(0))), p1, control)); 107 IsBooleanNot(IsNumberEqual(p0, IsNumberConstant(0))), p1, control));
108 } 108 }
109 109
110 110
111 // ----------------------------------------------------------------------------- 111 // -----------------------------------------------------------------------------
112 // JSLoadProperty 112 // JSLoadProperty
113 113
114 114
115 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArray) { 115 TEST_F(JSTypedLoweringTest, JSLoadPropertyFromExternalTypedArray) {
116 const size_t kLength = 17; 116 const size_t kLength = 17;
117 uint8_t backing_store[kLength * 8]; 117 double backing_store[kLength];
118 Handle<JSArrayBuffer> buffer = 118 Handle<JSArrayBuffer> buffer =
119 NewArrayBuffer(backing_store, arraysize(backing_store)); 119 NewArrayBuffer(backing_store, sizeof(backing_store));
120 VectorSlotPair feedback(Handle<TypeFeedbackVector>::null(), 120 VectorSlotPair feedback(Handle<TypeFeedbackVector>::null(),
121 FeedbackVectorICSlot::Invalid()); 121 FeedbackVectorICSlot::Invalid());
122 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) { 122 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
123 Handle<JSTypedArray> array = 123 Handle<JSTypedArray> array =
124 factory()->NewJSTypedArray(type, buffer, 0, kLength); 124 factory()->NewJSTypedArray(type, buffer, 0, kLength);
125 125
126 Node* key = Parameter(Type::Integral32()); 126 Node* key = Parameter(Type::Integral32());
127 Node* base = HeapConstant(array); 127 Node* base = HeapConstant(array);
128 Node* context = UndefinedConstant(); 128 Node* context = UndefinedConstant();
129 Node* effect = graph()->start(); 129 Node* effect = graph()->start();
130 Node* control = graph()->start(); 130 Node* control = graph()->start();
131 Node* node = graph()->NewNode(javascript()->LoadProperty(feedback), base, 131 Node* node = graph()->NewNode(javascript()->LoadProperty(feedback), base,
132 key, context); 132 key, context);
133 if (FLAG_turbo_deoptimization) { 133 if (FLAG_turbo_deoptimization) {
134 node->AppendInput(zone(), UndefinedConstant()); 134 node->AppendInput(zone(), UndefinedConstant());
135 } 135 }
136 node->AppendInput(zone(), effect); 136 node->AppendInput(zone(), effect);
137 node->AppendInput(zone(), control); 137 node->AppendInput(zone(), control);
138 Reduction r = Reduce(node); 138 Reduction r = Reduce(node);
139 139
140 ASSERT_TRUE(r.Changed()); 140 ASSERT_TRUE(r.Changed());
141 EXPECT_THAT( 141 EXPECT_THAT(r.replacement(),
142 r.replacement(), 142 IsLoadElement(
143 IsLoadElement(AccessBuilder::ForTypedArrayElement(type, true), 143 AccessBuilder::ForTypedArrayElement(type, true),
144 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), 144 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
145 key, IsNumberConstant(static_cast<double>(kLength)), 145 key, IsNumberConstant(array->length()->Number()), effect));
146 effect));
147 } 146 }
148 } 147 }
149 148
150 149
151 // ----------------------------------------------------------------------------- 150 // -----------------------------------------------------------------------------
152 // JSStoreProperty 151 // JSStoreProperty
153 152
154 153
155 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArray) { 154 TEST_F(JSTypedLoweringTest, JSStorePropertyToExternalTypedArray) {
156 const size_t kLength = 17; 155 const size_t kLength = 17;
157 uint8_t backing_store[kLength * 8]; 156 double backing_store[kLength];
158 Handle<JSArrayBuffer> buffer = 157 Handle<JSArrayBuffer> buffer =
159 NewArrayBuffer(backing_store, arraysize(backing_store)); 158 NewArrayBuffer(backing_store, sizeof(backing_store));
160 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) { 159 TRACED_FOREACH(ExternalArrayType, type, kExternalArrayTypes) {
161 TRACED_FOREACH(StrictMode, strict_mode, kStrictModes) { 160 TRACED_FOREACH(StrictMode, strict_mode, kStrictModes) {
162 Handle<JSTypedArray> array = 161 Handle<JSTypedArray> array =
163 factory()->NewJSTypedArray(type, buffer, 0, kLength); 162 factory()->NewJSTypedArray(type, buffer, 0, kLength);
164 163
165 Node* key = Parameter(Type::Integral32()); 164 Node* key = Parameter(Type::Integral32());
166 Node* base = HeapConstant(array); 165 Node* base = HeapConstant(array);
167 Node* value = Parameter(Type::Any()); 166 Node* value = Parameter(Type::Any());
168 Node* context = UndefinedConstant(); 167 Node* context = UndefinedConstant();
169 Node* effect = graph()->start(); 168 Node* effect = graph()->start();
170 Node* control = graph()->start(); 169 Node* control = graph()->start();
171 Node* node = graph()->NewNode(javascript()->StoreProperty(strict_mode), 170 Node* node = graph()->NewNode(javascript()->StoreProperty(strict_mode),
172 base, key, value, context); 171 base, key, value, context);
173 if (FLAG_turbo_deoptimization) { 172 if (FLAG_turbo_deoptimization) {
174 node->AppendInput(zone(), UndefinedConstant()); 173 node->AppendInput(zone(), UndefinedConstant());
175 } 174 }
176 node->AppendInput(zone(), effect); 175 node->AppendInput(zone(), effect);
177 node->AppendInput(zone(), control); 176 node->AppendInput(zone(), control);
178 Reduction r = Reduce(node); 177 Reduction r = Reduce(node);
179 178
180 ASSERT_TRUE(r.Changed()); 179 ASSERT_TRUE(r.Changed());
181 EXPECT_THAT(r.replacement(), 180 EXPECT_THAT(r.replacement(),
182 IsStoreElement( 181 IsStoreElement(
183 AccessBuilder::ForTypedArrayElement(type, true), 182 AccessBuilder::ForTypedArrayElement(type, true),
184 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])), 183 IsIntPtrConstant(bit_cast<intptr_t>(&backing_store[0])),
185 key, IsNumberConstant(static_cast<double>(kLength)), 184 key, IsNumberConstant(array->length()->Number()), value,
186 value, effect, control)); 185 effect, control));
187 } 186 }
188 } 187 }
189 } 188 }
190 189
191 } // namespace compiler 190 } // namespace compiler
192 } // namespace internal 191 } // namespace internal
193 } // namespace v8 192 } // namespace v8
OLDNEW
« no previous file with comments | « test/unittests/compiler/common-operator-unittest.cc ('k') | test/unittests/compiler/node-test-utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698