| OLD | NEW | 
|---|
| 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/code-factory.h" | 8 #include "src/code-factory.h" | 
| 9 #include "src/compilation-dependencies.h" | 9 #include "src/compilation-dependencies.h" | 
| 10 #include "src/compiler/access-builder.h" | 10 #include "src/compiler/access-builder.h" | 
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 246       if (access_mode == AccessMode::kLoad && | 246       if (access_mode == AccessMode::kLoad && | 
| 247           access_info.holder().ToHandle(&holder)) { | 247           access_info.holder().ToHandle(&holder)) { | 
| 248         this_receiver = jsgraph()->Constant(holder); | 248         this_receiver = jsgraph()->Constant(holder); | 
| 249       } | 249       } | 
| 250       Node* this_storage = this_receiver; | 250       Node* this_storage = this_receiver; | 
| 251       if (!field_index.is_inobject()) { | 251       if (!field_index.is_inobject()) { | 
| 252         this_storage = this_effect = graph()->NewNode( | 252         this_storage = this_effect = graph()->NewNode( | 
| 253             simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), | 253             simplified()->LoadField(AccessBuilder::ForJSObjectProperties()), | 
| 254             this_storage, this_effect, this_control); | 254             this_storage, this_effect, this_control); | 
| 255       } | 255       } | 
| 256       FieldAccess field_access = {kTaggedBase, field_index.offset(), name, | 256       const char* field_name = | 
|  | 257           AccessBuilder::GetNameForTracing(name, graph()->zone()); | 
|  | 258       FieldAccess field_access = {kTaggedBase, field_index.offset(), field_name, | 
| 257                                   field_type, MachineType::AnyTagged()}; | 259                                   field_type, MachineType::AnyTagged()}; | 
| 258       if (access_mode == AccessMode::kLoad) { | 260       if (access_mode == AccessMode::kLoad) { | 
| 259         if (field_type->Is(Type::UntaggedFloat64())) { | 261         if (field_type->Is(Type::UntaggedFloat64())) { | 
| 260           if (!field_index.is_inobject() || field_index.is_hidden_field() || | 262           if (!field_index.is_inobject() || field_index.is_hidden_field() || | 
| 261               !FLAG_unbox_double_fields) { | 263               !FLAG_unbox_double_fields) { | 
| 262             this_storage = this_effect = | 264             this_storage = this_effect = | 
| 263                 graph()->NewNode(simplified()->LoadField(field_access), | 265                 graph()->NewNode(simplified()->LoadField(field_access), | 
| 264                                  this_storage, this_effect, this_control); | 266                                  this_storage, this_effect, this_control); | 
| 265             field_access.offset = HeapNumber::kValueOffset; | 267             field_access.offset = HeapNumber::kValueOffset; | 
| 266             field_access.name = MaybeHandle<Name>(); | 268             field_access.name = "HeapNumber::value"; | 
| 267           } | 269           } | 
| 268           field_access.machine_type = MachineType::Float64(); | 270           field_access.machine_type = MachineType::Float64(); | 
| 269         } | 271         } | 
| 270         this_value = this_effect = | 272         this_value = this_effect = | 
| 271             graph()->NewNode(simplified()->LoadField(field_access), | 273             graph()->NewNode(simplified()->LoadField(field_access), | 
| 272                              this_storage, this_effect, this_control); | 274                              this_storage, this_effect, this_control); | 
| 273       } else { | 275       } else { | 
| 274         DCHECK_EQ(AccessMode::kStore, access_mode); | 276         DCHECK_EQ(AccessMode::kStore, access_mode); | 
| 275         if (field_type->Is(Type::UntaggedFloat64())) { | 277         if (field_type->Is(Type::UntaggedFloat64())) { | 
| 276           Node* check = | 278           Node* check = | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 301                   this_box, this_value, this_effect, this_control); | 303                   this_box, this_value, this_effect, this_control); | 
| 302               this_value = this_box; | 304               this_value = this_box; | 
| 303 | 305 | 
| 304               field_access.type = Type::TaggedPointer(); | 306               field_access.type = Type::TaggedPointer(); | 
| 305             } else { | 307             } else { | 
| 306               // We just store directly to the MutableHeapNumber. | 308               // We just store directly to the MutableHeapNumber. | 
| 307               this_storage = this_effect = | 309               this_storage = this_effect = | 
| 308                   graph()->NewNode(simplified()->LoadField(field_access), | 310                   graph()->NewNode(simplified()->LoadField(field_access), | 
| 309                                    this_storage, this_effect, this_control); | 311                                    this_storage, this_effect, this_control); | 
| 310               field_access.offset = HeapNumber::kValueOffset; | 312               field_access.offset = HeapNumber::kValueOffset; | 
| 311               field_access.name = MaybeHandle<Name>(); | 313               field_access.name = "HeapNumber::value"; | 
| 312               field_access.machine_type = MachineType::Float64(); | 314               field_access.machine_type = MachineType::Float64(); | 
| 313             } | 315             } | 
| 314           } else { | 316           } else { | 
| 315             // Unboxed double field, we store directly to the field. | 317             // Unboxed double field, we store directly to the field. | 
| 316             field_access.machine_type = MachineType::Float64(); | 318             field_access.machine_type = MachineType::Float64(); | 
| 317           } | 319           } | 
| 318         } else if (field_type->Is(Type::TaggedSigned())) { | 320         } else if (field_type->Is(Type::TaggedSigned())) { | 
| 319           Node* check = | 321           Node* check = | 
| 320               graph()->NewNode(simplified()->ObjectIsSmi(), this_value); | 322               graph()->NewNode(simplified()->ObjectIsSmi(), this_value); | 
| 321           Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), | 323           Node* branch = graph()->NewNode(common()->Branch(BranchHint::kTrue), | 
| (...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1020 } | 1022 } | 
| 1021 | 1023 | 
| 1022 | 1024 | 
| 1023 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 1025 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 
| 1024   return jsgraph()->simplified(); | 1026   return jsgraph()->simplified(); | 
| 1025 } | 1027 } | 
| 1026 | 1028 | 
| 1027 }  // namespace compiler | 1029 }  // namespace compiler | 
| 1028 }  // namespace internal | 1030 }  // namespace internal | 
| 1029 }  // namespace v8 | 1031 }  // namespace v8 | 
| OLD | NEW | 
|---|