| 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 |