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

Side by Side Diff: test/cctest/test-code-stub-assembler.cc

Issue 2277363002: [stubs] Consolidate TryToName implementation (Closed)
Patch Set: Created 4 years, 3 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 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 "src/base/utils/random-number-generator.h" 5 #include "src/base/utils/random-number-generator.h"
6 #include "src/ic/stub-cache.h" 6 #include "src/ic/stub-cache.h"
7 #include "src/isolate.h" 7 #include "src/isolate.h"
8 #include "test/cctest/compiler/code-assembler-tester.h" 8 #include "test/cctest/compiler/code-assembler-tester.h"
9 #include "test/cctest/compiler/function-tester.h" 9 #include "test/cctest/compiler/function-tester.h"
10 10
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 CodeStubAssemblerTester m(isolate, kNumParams); 125 CodeStubAssemblerTester m(isolate, kNumParams);
126 126
127 enum Result { kKeyIsIndex, kKeyIsUnique, kBailout }; 127 enum Result { kKeyIsIndex, kKeyIsUnique, kBailout };
128 { 128 {
129 Node* key = m.Parameter(0); 129 Node* key = m.Parameter(0);
130 Node* expected_result = m.Parameter(1); 130 Node* expected_result = m.Parameter(1);
131 Node* expected_arg = m.Parameter(2); 131 Node* expected_arg = m.Parameter(2);
132 132
133 Label passed(&m), failed(&m); 133 Label passed(&m), failed(&m);
134 Label if_keyisindex(&m), if_keyisunique(&m), if_bailout(&m); 134 Label if_keyisindex(&m), if_keyisunique(&m), if_bailout(&m);
135 Variable var_index(&m, MachineRepresentation::kWord32); 135 Variable var_index(&m, MachineType::PointerRepresentation());
136 136
137 m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &if_bailout); 137 m.TryToName(key, &if_keyisindex, &var_index, &if_keyisunique, &if_bailout);
138 138
139 m.Bind(&if_keyisindex); 139 m.Bind(&if_keyisindex);
140 m.GotoUnless( 140 m.GotoUnless(
141 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsIndex))), 141 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsIndex))),
142 &failed); 142 &failed);
143 m.Branch(m.Word32Equal(m.SmiToWord32(expected_arg), var_index.value()), 143 m.Branch(m.WordEqual(m.SmiUntag(expected_arg), var_index.value()), &passed,
144 &passed, &failed); 144 &failed);
145 145
146 m.Bind(&if_keyisunique); 146 m.Bind(&if_keyisunique);
147 m.GotoUnless( 147 m.GotoUnless(
148 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsUnique))), 148 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kKeyIsUnique))),
149 &failed); 149 &failed);
150 m.Branch(m.WordEqual(expected_arg, key), &passed, &failed); 150 m.Branch(m.WordEqual(expected_arg, key), &passed, &failed);
151 151
152 m.Bind(&if_bailout); 152 m.Bind(&if_bailout);
153 m.Branch( 153 m.Branch(
154 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kBailout))), 154 m.WordEqual(expected_result, m.SmiConstant(Smi::FromInt(kBailout))),
(...skipping 19 matching lines...) Expand all
174 ft.CheckTrue(key, expect_index, key); 174 ft.CheckTrue(key, expect_index, key);
175 } 175 }
176 176
177 { 177 {
178 // TryToName(<positive smi>) => if_keyisindex: smi value. 178 // TryToName(<positive smi>) => if_keyisindex: smi value.
179 Handle<Object> key(Smi::FromInt(153), isolate); 179 Handle<Object> key(Smi::FromInt(153), isolate);
180 ft.CheckTrue(key, expect_index, key); 180 ft.CheckTrue(key, expect_index, key);
181 } 181 }
182 182
183 { 183 {
184 // TryToName(<negative smi>) => bailout. 184 // TryToName(<negative smi>) => if_keyisindex: smi value.
185 // A subsequent bounds check needs to take care of this case.
185 Handle<Object> key(Smi::FromInt(-1), isolate); 186 Handle<Object> key(Smi::FromInt(-1), isolate);
186 ft.CheckTrue(key, expect_bailout); 187 ft.CheckTrue(key, expect_index, key);
187 } 188 }
188 189
189 { 190 {
191 // TryToName(<heap number with int value>) => if_keyisindex: number.
192 Handle<Object> key(isolate->factory()->NewHeapNumber(153));
193 Handle<Object> index(Smi::FromInt(153), isolate);
194 ft.CheckTrue(key, expect_index, index);
195 }
196
197 {
190 // TryToName(<symbol>) => if_keyisunique: <symbol>. 198 // TryToName(<symbol>) => if_keyisunique: <symbol>.
191 Handle<Object> key = isolate->factory()->NewSymbol(); 199 Handle<Object> key = isolate->factory()->NewSymbol();
192 ft.CheckTrue(key, expect_unique, key); 200 ft.CheckTrue(key, expect_unique, key);
193 } 201 }
194 202
195 { 203 {
196 // TryToName(<internalized string>) => if_keyisunique: <internalized string> 204 // TryToName(<internalized string>) => if_keyisunique: <internalized string>
197 Handle<Object> key = isolate->factory()->InternalizeUtf8String("test"); 205 Handle<Object> key = isolate->factory()->InternalizeUtf8String("test");
198 ft.CheckTrue(key, expect_unique, key); 206 ft.CheckTrue(key, expect_unique, key);
199 } 207 }
200 208
201 { 209 {
202 // TryToName(<internalized number string>) => if_keyisindex: number. 210 // TryToName(<internalized number string>) => if_keyisindex: number.
203 Handle<Object> key = isolate->factory()->InternalizeUtf8String("153"); 211 Handle<Object> key = isolate->factory()->InternalizeUtf8String("153");
204 Handle<Object> index(Smi::FromInt(153), isolate); 212 Handle<Object> index(Smi::FromInt(153), isolate);
205 ft.CheckTrue(key, expect_index, index); 213 ft.CheckTrue(key, expect_index, index);
206 } 214 }
207 215
208 { 216 {
217 // TryToName(<non-internalized number string>) => if_keyisindex: number.
218 Handle<String> key = isolate->factory()->NewStringFromAsciiChecked("153");
219 uint32_t dummy;
220 key->AsArrayIndex(&dummy);
Igor Sheludko 2016/09/01 14:31:31 CHECK(...)?
Jakob Kummerow 2016/09/05 13:15:54 Done.
221 DCHECK(key->HasHashCode());
Igor Sheludko 2016/09/01 14:31:31 DCHECK -> CHECK
Jakob Kummerow 2016/09/05 13:15:54 Done. (I don't see the necessity, as that's not th
222 DCHECK(!key->IsInternalizedString());
Igor Sheludko 2016/09/01 14:31:31 Same here.
Jakob Kummerow 2016/09/05 13:15:54 Done.
223 Handle<Object> index(Smi::FromInt(153), isolate);
224 ft.CheckTrue(key, expect_index, index);
225 }
226
227 {
209 // TryToName(<non-internalized string>) => bailout. 228 // TryToName(<non-internalized string>) => bailout.
210 Handle<Object> key = isolate->factory()->NewStringFromAsciiChecked("test"); 229 Handle<Object> key = isolate->factory()->NewStringFromAsciiChecked("test");
211 ft.CheckTrue(key, expect_bailout); 230 ft.CheckTrue(key, expect_bailout);
212 } 231 }
213 } 232 }
214 233
215 namespace { 234 namespace {
216 235
217 template <typename Dictionary> 236 template <typename Dictionary>
218 void TestNameDictionaryLookup() { 237 void TestNameDictionaryLookup() {
(...skipping 1116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1335 1354
1336 Handle<Code> expected_handler(handler, isolate); 1355 Handle<Code> expected_handler(handler, isolate);
1337 ft.CheckTrue(receiver, name, expected_handler); 1356 ft.CheckTrue(receiver, name, expected_handler);
1338 } 1357 }
1339 // Ensure we performed both kind of queries. 1358 // Ensure we performed both kind of queries.
1340 CHECK(queried_existing && queried_non_existing); 1359 CHECK(queried_existing && queried_non_existing);
1341 } 1360 }
1342 1361
1343 } // namespace internal 1362 } // namespace internal
1344 } // namespace v8 1363 } // namespace v8
OLDNEW
« src/compiler/code-assembler.h ('K') | « src/compiler/code-assembler.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698