| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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-builtin-reducer.h" | 5 #include "src/compiler/js-builtin-reducer.h" |
| 6 | 6 |
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 | 288 |
| 289 DCHECK_GE(map_index, Context::TYPED_ARRAY_KEY_ITERATOR_MAP_INDEX); | 289 DCHECK_GE(map_index, Context::TYPED_ARRAY_KEY_ITERATOR_MAP_INDEX); |
| 290 DCHECK_LE(map_index, Context::GENERIC_ARRAY_VALUE_ITERATOR_MAP_INDEX); | 290 DCHECK_LE(map_index, Context::GENERIC_ARRAY_VALUE_ITERATOR_MAP_INDEX); |
| 291 | 291 |
| 292 Handle<Map> map(Map::cast(native_context()->get(map_index)), isolate()); | 292 Handle<Map> map(Map::cast(native_context()->get(map_index)), isolate()); |
| 293 | 293 |
| 294 // allocate new iterator | 294 // allocate new iterator |
| 295 effect = graph()->NewNode( | 295 effect = graph()->NewNode( |
| 296 common()->BeginRegion(RegionObservability::kNotObservable), effect); | 296 common()->BeginRegion(RegionObservability::kNotObservable), effect); |
| 297 Node* value = effect = graph()->NewNode( | 297 Node* value = effect = graph()->NewNode( |
| 298 simplified()->Allocate(NOT_TENURED), | 298 simplified()->Allocate(Type::OtherObject(), NOT_TENURED), |
| 299 jsgraph()->Constant(JSArrayIterator::kSize), effect, control); | 299 jsgraph()->Constant(JSArrayIterator::kSize), effect, control); |
| 300 NodeProperties::SetType(value, Type::OtherObject()); | |
| 301 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), | 300 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), |
| 302 value, jsgraph()->Constant(map), effect, control); | 301 value, jsgraph()->Constant(map), effect, control); |
| 303 effect = graph()->NewNode( | 302 effect = graph()->NewNode( |
| 304 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, | 303 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, |
| 305 jsgraph()->EmptyFixedArrayConstant(), effect, control); | 304 jsgraph()->EmptyFixedArrayConstant(), effect, control); |
| 306 effect = graph()->NewNode( | 305 effect = graph()->NewNode( |
| 307 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, | 306 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, |
| 308 jsgraph()->EmptyFixedArrayConstant(), effect, control); | 307 jsgraph()->EmptyFixedArrayConstant(), effect, control); |
| 309 | 308 |
| 310 // attach the iterator to this object | 309 // attach the iterator to this object |
| (...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1575 int capacity = | 1574 int capacity = |
| 1576 NameDictionary::ComputeCapacity(NameDictionary::kInitialCapacity); | 1575 NameDictionary::ComputeCapacity(NameDictionary::kInitialCapacity); |
| 1577 DCHECK(base::bits::IsPowerOfTwo32(capacity)); | 1576 DCHECK(base::bits::IsPowerOfTwo32(capacity)); |
| 1578 int length = NameDictionary::EntryToIndex(capacity); | 1577 int length = NameDictionary::EntryToIndex(capacity); |
| 1579 int size = NameDictionary::SizeFor(length); | 1578 int size = NameDictionary::SizeFor(length); |
| 1580 | 1579 |
| 1581 effect = graph()->NewNode( | 1580 effect = graph()->NewNode( |
| 1582 common()->BeginRegion(RegionObservability::kNotObservable), effect); | 1581 common()->BeginRegion(RegionObservability::kNotObservable), effect); |
| 1583 | 1582 |
| 1584 Node* value = effect = | 1583 Node* value = effect = |
| 1585 graph()->NewNode(simplified()->Allocate(NOT_TENURED), | 1584 graph()->NewNode(simplified()->Allocate(Type::Any(), NOT_TENURED), |
| 1586 jsgraph()->Constant(size), effect, control); | 1585 jsgraph()->Constant(size), effect, control); |
| 1587 effect = | 1586 effect = |
| 1588 graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), | 1587 graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), |
| 1589 value, jsgraph()->HeapConstant(map), effect, control); | 1588 value, jsgraph()->HeapConstant(map), effect, control); |
| 1590 | 1589 |
| 1591 // Initialize FixedArray fields. | 1590 // Initialize FixedArray fields. |
| 1592 effect = graph()->NewNode( | 1591 effect = graph()->NewNode( |
| 1593 simplified()->StoreField(AccessBuilder::ForFixedArrayLength()), value, | 1592 simplified()->StoreField(AccessBuilder::ForFixedArrayLength()), value, |
| 1594 jsgraph()->SmiConstant(length), effect, control); | 1593 jsgraph()->SmiConstant(length), effect, control); |
| 1595 // Initialize HashTable fields. | 1594 // Initialize HashTable fields. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 | 1627 |
| 1629 int const instance_size = instance_map->instance_size(); | 1628 int const instance_size = instance_map->instance_size(); |
| 1630 if (instance_size > kMaxRegularHeapObjectSize) return NoChange(); | 1629 if (instance_size > kMaxRegularHeapObjectSize) return NoChange(); |
| 1631 dependencies()->AssumeInitialMapCantChange(instance_map); | 1630 dependencies()->AssumeInitialMapCantChange(instance_map); |
| 1632 | 1631 |
| 1633 // Emit code to allocate the JSObject instance for the given | 1632 // Emit code to allocate the JSObject instance for the given |
| 1634 // {instance_map}. | 1633 // {instance_map}. |
| 1635 effect = graph()->NewNode( | 1634 effect = graph()->NewNode( |
| 1636 common()->BeginRegion(RegionObservability::kNotObservable), effect); | 1635 common()->BeginRegion(RegionObservability::kNotObservable), effect); |
| 1637 Node* value = effect = | 1636 Node* value = effect = |
| 1638 graph()->NewNode(simplified()->Allocate(NOT_TENURED), | 1637 graph()->NewNode(simplified()->Allocate(Type::Any(), NOT_TENURED), |
| 1639 jsgraph()->Constant(instance_size), effect, control); | 1638 jsgraph()->Constant(instance_size), effect, control); |
| 1640 effect = | 1639 effect = |
| 1641 graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), value, | 1640 graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), value, |
| 1642 jsgraph()->HeapConstant(instance_map), effect, control); | 1641 jsgraph()->HeapConstant(instance_map), effect, control); |
| 1643 effect = graph()->NewNode( | 1642 effect = graph()->NewNode( |
| 1644 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, | 1643 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, |
| 1645 properties, effect, control); | 1644 properties, effect, control); |
| 1646 effect = graph()->NewNode( | 1645 effect = graph()->NewNode( |
| 1647 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, | 1646 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, |
| 1648 jsgraph()->EmptyFixedArrayConstant(), effect, control); | 1647 jsgraph()->EmptyFixedArrayConstant(), effect, control); |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1871 Node* effect = NodeProperties::GetEffectInput(node); | 1870 Node* effect = NodeProperties::GetEffectInput(node); |
| 1872 Node* control = NodeProperties::GetControlInput(node); | 1871 Node* control = NodeProperties::GetControlInput(node); |
| 1873 | 1872 |
| 1874 Node* map = jsgraph()->HeapConstant( | 1873 Node* map = jsgraph()->HeapConstant( |
| 1875 handle(native_context()->string_iterator_map(), isolate())); | 1874 handle(native_context()->string_iterator_map(), isolate())); |
| 1876 | 1875 |
| 1877 // allocate new iterator | 1876 // allocate new iterator |
| 1878 effect = graph()->NewNode( | 1877 effect = graph()->NewNode( |
| 1879 common()->BeginRegion(RegionObservability::kNotObservable), effect); | 1878 common()->BeginRegion(RegionObservability::kNotObservable), effect); |
| 1880 Node* value = effect = graph()->NewNode( | 1879 Node* value = effect = graph()->NewNode( |
| 1881 simplified()->Allocate(NOT_TENURED), | 1880 simplified()->Allocate(Type::OtherObject(), NOT_TENURED), |
| 1882 jsgraph()->Constant(JSStringIterator::kSize), effect, control); | 1881 jsgraph()->Constant(JSStringIterator::kSize), effect, control); |
| 1883 NodeProperties::SetType(value, Type::OtherObject()); | |
| 1884 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), | 1882 effect = graph()->NewNode(simplified()->StoreField(AccessBuilder::ForMap()), |
| 1885 value, map, effect, control); | 1883 value, map, effect, control); |
| 1886 effect = graph()->NewNode( | 1884 effect = graph()->NewNode( |
| 1887 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, | 1885 simplified()->StoreField(AccessBuilder::ForJSObjectProperties()), value, |
| 1888 jsgraph()->EmptyFixedArrayConstant(), effect, control); | 1886 jsgraph()->EmptyFixedArrayConstant(), effect, control); |
| 1889 effect = graph()->NewNode( | 1887 effect = graph()->NewNode( |
| 1890 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, | 1888 simplified()->StoreField(AccessBuilder::ForJSObjectElements()), value, |
| 1891 jsgraph()->EmptyFixedArrayConstant(), effect, control); | 1889 jsgraph()->EmptyFixedArrayConstant(), effect, control); |
| 1892 | 1890 |
| 1893 // attach the iterator to this string | 1891 // attach the iterator to this string |
| (...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2312 return jsgraph()->simplified(); | 2310 return jsgraph()->simplified(); |
| 2313 } | 2311 } |
| 2314 | 2312 |
| 2315 JSOperatorBuilder* JSBuiltinReducer::javascript() const { | 2313 JSOperatorBuilder* JSBuiltinReducer::javascript() const { |
| 2316 return jsgraph()->javascript(); | 2314 return jsgraph()->javascript(); |
| 2317 } | 2315 } |
| 2318 | 2316 |
| 2319 } // namespace compiler | 2317 } // namespace compiler |
| 2320 } // namespace internal | 2318 } // namespace internal |
| 2321 } // namespace v8 | 2319 } // namespace v8 |
| OLD | NEW |