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

Side by Side Diff: src/compiler/js-native-context-specialization.cc

Issue 1409273005: [turbofan] Use correct map for special JSObject accessors. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 2 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 | « no previous file | 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 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/compiler/js-native-context-specialization.h" 5 #include "src/compiler/js-native-context-specialization.h"
6 6
7 #include "src/accessors.h" 7 #include "src/accessors.h"
8 #include "src/compilation-dependencies.h" 8 #include "src/compilation-dependencies.h"
9 #include "src/compiler/access-builder.h" 9 #include "src/compiler/access-builder.h"
10 #include "src/compiler/js-graph.h" 10 #include "src/compiler/js-graph.h"
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 // TODO(verwaest): Whitelist contexts to which we have access. 306 // TODO(verwaest): Whitelist contexts to which we have access.
307 !map->is_access_check_needed(); 307 !map->is_access_check_needed();
308 } 308 }
309 309
310 } // namespace 310 } // namespace
311 311
312 312
313 bool JSNativeContextSpecialization::ComputePropertyAccessInfo( 313 bool JSNativeContextSpecialization::ComputePropertyAccessInfo(
314 Handle<Map> map, Handle<Name> name, PropertyAccessInfo* access_info) { 314 Handle<Map> map, Handle<Name> name, PropertyAccessInfo* access_info) {
315 MaybeHandle<JSObject> holder; 315 MaybeHandle<JSObject> holder;
316 Handle<Map> receiver_map = map; 316 Type* receiver_type = Type::Class(map, graph()->zone());
317 Type* receiver_type = Type::Class(receiver_map, graph()->zone());
318 while (CanInlinePropertyAccess(map)) { 317 while (CanInlinePropertyAccess(map)) {
319 // Check for special JSObject field accessors. 318 // Check for special JSObject field accessors.
320 int offset; 319 int offset;
321 if (Accessors::IsJSObjectFieldAccessor(map, name, &offset)) { 320 if (Accessors::IsJSObjectFieldAccessor(map, name, &offset)) {
322 FieldIndex field_index = FieldIndex::ForInObjectOffset(offset); 321 FieldIndex field_index = FieldIndex::ForInObjectOffset(offset);
323 Representation field_representation = Representation::Tagged(); 322 Representation field_representation = Representation::Tagged();
324 Type* field_type = Type::Tagged(); 323 Type* field_type = Type::Tagged();
325 if (receiver_type->Is(Type::String())) { 324 if (map->IsStringMap()) {
326 DCHECK(Name::Equals(factory()->length_string(), name)); 325 DCHECK(Name::Equals(factory()->length_string(), name));
327 // The String::length property is always a smi in the range 326 // The String::length property is always a smi in the range
328 // [0, String::kMaxLength]. 327 // [0, String::kMaxLength].
329 field_representation = Representation::Smi(); 328 field_representation = Representation::Smi();
330 field_type = Type::Intersect( 329 field_type = Type::Intersect(
331 Type::Range(0.0, String::kMaxLength, graph()->zone()), 330 Type::Range(0.0, String::kMaxLength, graph()->zone()),
332 Type::TaggedSigned(), graph()->zone()); 331 Type::TaggedSigned(), graph()->zone());
333 } else if (receiver_map->IsJSArrayMap()) { 332 } else if (map->IsJSArrayMap()) {
334 DCHECK(Name::Equals(factory()->length_string(), name)); 333 DCHECK(Name::Equals(factory()->length_string(), name));
335 // The JSArray::length property is a smi in the range 334 // The JSArray::length property is a smi in the range
336 // [0, FixedDoubleArray::kMaxLength] in case of fast double 335 // [0, FixedDoubleArray::kMaxLength] in case of fast double
337 // elements, a smi in the range [0, FixedArray::kMaxLength] 336 // elements, a smi in the range [0, FixedArray::kMaxLength]
338 // in case of other fast elements, and [0, kMaxUInt32-1] in 337 // in case of other fast elements, and [0, kMaxUInt32-1] in
339 // case of other arrays. 338 // case of other arrays.
340 double field_type_upper = kMaxUInt32 - 1; 339 double field_type_upper = kMaxUInt32 - 1;
341 if (IsFastElementsKind(receiver_map->elements_kind())) { 340 if (IsFastElementsKind(map->elements_kind())) {
342 field_representation = Representation::Smi(); 341 field_representation = Representation::Smi();
343 field_type_upper = 342 field_type_upper = IsFastDoubleElementsKind(map->elements_kind())
344 IsFastDoubleElementsKind(receiver_map->elements_kind()) 343 ? FixedDoubleArray::kMaxLength
345 ? FixedDoubleArray::kMaxLength 344 : FixedArray::kMaxLength;
346 : FixedArray::kMaxLength;
347 } 345 }
348 field_type = 346 field_type =
349 Type::Intersect(Type::Range(0.0, field_type_upper, graph()->zone()), 347 Type::Intersect(Type::Range(0.0, field_type_upper, graph()->zone()),
350 Type::TaggedSigned(), graph()->zone()); 348 Type::TaggedSigned(), graph()->zone());
351 } 349 }
352 *access_info = PropertyAccessInfo::Data( 350 *access_info = PropertyAccessInfo::Data(
353 receiver_type, field_index, field_representation, field_type, holder); 351 receiver_type, field_index, field_representation, field_type, holder);
354 return true; 352 return true;
355 } 353 }
356 354
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 } 708 }
711 709
712 710
713 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { 711 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const {
714 return jsgraph()->simplified(); 712 return jsgraph()->simplified();
715 } 713 }
716 714
717 } // namespace compiler 715 } // namespace compiler
718 } // namespace internal 716 } // namespace internal
719 } // namespace v8 717 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698