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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 this_control = | 305 this_control = |
306 graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state, | 306 graph()->NewNode(common()->DeoptimizeUnless(), check, frame_state, |
307 this_effect, this_control); | 307 this_effect, this_control); |
308 this_value = graph()->NewNode(common()->Guard(Type::Number()), | 308 this_value = graph()->NewNode(common()->Guard(Type::Number()), |
309 this_value, this_control); | 309 this_value, this_control); |
310 | 310 |
311 if (!field_index.is_inobject() || field_index.is_hidden_field() || | 311 if (!field_index.is_inobject() || field_index.is_hidden_field() || |
312 !FLAG_unbox_double_fields) { | 312 !FLAG_unbox_double_fields) { |
313 if (access_info.HasTransitionMap()) { | 313 if (access_info.HasTransitionMap()) { |
314 // Allocate a MutableHeapNumber for the new property. | 314 // Allocate a MutableHeapNumber for the new property. |
315 Callable callable = | 315 this_effect = |
316 CodeFactory::AllocateMutableHeapNumber(isolate()); | 316 graph()->NewNode(common()->BeginRegion(), this_effect); |
317 CallDescriptor* desc = Linkage::GetStubCallDescriptor( | 317 Node* this_box = this_effect = |
318 isolate(), jsgraph()->zone(), callable.descriptor(), 0, | 318 graph()->NewNode(simplified()->Allocate(NOT_TENURED), |
319 CallDescriptor::kNoFlags, Operator::kNoThrow); | 319 jsgraph()->Constant(HeapNumber::kSize), |
320 Node* this_box = this_effect = graph()->NewNode( | 320 this_effect, this_control); |
321 common()->Call(desc), | 321 this_effect = graph()->NewNode( |
322 jsgraph()->HeapConstant(callable.code()), | 322 simplified()->StoreField(AccessBuilder::ForMap()), this_box, |
323 jsgraph()->NoContextConstant(), this_effect, this_control); | 323 jsgraph()->HeapConstant(factory()->mutable_heap_number_map()), |
| 324 this_effect, this_control); |
324 this_effect = graph()->NewNode( | 325 this_effect = graph()->NewNode( |
325 simplified()->StoreField(AccessBuilder::ForHeapNumberValue()), | 326 simplified()->StoreField(AccessBuilder::ForHeapNumberValue()), |
326 this_box, this_value, this_effect, this_control); | 327 this_box, this_value, this_effect, this_control); |
327 this_value = this_box; | 328 this_value = this_effect = graph()->NewNode( |
| 329 common()->FinishRegion(), this_box, this_effect); |
328 | 330 |
329 field_access.type = Type::TaggedPointer(); | 331 field_access.type = Type::TaggedPointer(); |
330 } else { | 332 } else { |
331 // We just store directly to the MutableHeapNumber. | 333 // We just store directly to the MutableHeapNumber. |
332 this_storage = this_effect = | 334 this_storage = this_effect = |
333 graph()->NewNode(simplified()->LoadField(field_access), | 335 graph()->NewNode(simplified()->LoadField(field_access), |
334 this_storage, this_effect, this_control); | 336 this_storage, this_effect, this_control); |
335 field_access.offset = HeapNumber::kValueOffset; | 337 field_access.offset = HeapNumber::kValueOffset; |
336 field_access.name = MaybeHandle<Name>(); | 338 field_access.name = MaybeHandle<Name>(); |
337 field_access.machine_type = MachineType::Float64(); | 339 field_access.machine_type = MachineType::Float64(); |
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1030 } | 1032 } |
1031 | 1033 |
1032 | 1034 |
1033 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { | 1035 SimplifiedOperatorBuilder* JSNativeContextSpecialization::simplified() const { |
1034 return jsgraph()->simplified(); | 1036 return jsgraph()->simplified(); |
1035 } | 1037 } |
1036 | 1038 |
1037 } // namespace compiler | 1039 } // namespace compiler |
1038 } // namespace internal | 1040 } // namespace internal |
1039 } // namespace v8 | 1041 } // namespace v8 |
OLD | NEW |