OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/hydrogen.h" | 5 #include "src/hydrogen.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/v8.h" | 9 #include "src/v8.h" |
10 | 10 |
(...skipping 6959 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6970 return result; | 6970 return result; |
6971 } else { | 6971 } else { |
6972 return New<HStoreKeyedGeneric>(object, key, value, function_language_mode(), | 6972 return New<HStoreKeyedGeneric>(object, key, value, function_language_mode(), |
6973 PREMONOMORPHIC); | 6973 PREMONOMORPHIC); |
6974 } | 6974 } |
6975 } | 6975 } |
6976 | 6976 |
6977 | 6977 |
6978 LoadKeyedHoleMode HOptimizedGraphBuilder::BuildKeyedHoleMode(Handle<Map> map) { | 6978 LoadKeyedHoleMode HOptimizedGraphBuilder::BuildKeyedHoleMode(Handle<Map> map) { |
6979 // Loads from a "stock" fast holey double arrays can elide the hole check. | 6979 // Loads from a "stock" fast holey double arrays can elide the hole check. |
| 6980 // Loads from a "stock" fast holey array can convert the hole to undefined |
| 6981 // with impunity. |
6980 LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE; | 6982 LoadKeyedHoleMode load_mode = NEVER_RETURN_HOLE; |
6981 if (*map == isolate()->get_initial_js_array_map(FAST_HOLEY_DOUBLE_ELEMENTS) && | 6983 bool holey_double_elements = |
| 6984 *map == isolate()->get_initial_js_array_map(FAST_HOLEY_DOUBLE_ELEMENTS); |
| 6985 bool holey_elements = |
| 6986 *map == isolate()->get_initial_js_array_map(FAST_HOLEY_ELEMENTS); |
| 6987 if ((holey_double_elements || holey_elements) && |
6982 isolate()->IsFastArrayConstructorPrototypeChainIntact()) { | 6988 isolate()->IsFastArrayConstructorPrototypeChainIntact()) { |
| 6989 load_mode = |
| 6990 holey_double_elements ? ALLOW_RETURN_HOLE : CONVERT_HOLE_TO_UNDEFINED; |
| 6991 |
6983 Handle<JSObject> prototype(JSObject::cast(map->prototype()), isolate()); | 6992 Handle<JSObject> prototype(JSObject::cast(map->prototype()), isolate()); |
6984 Handle<JSObject> object_prototype = isolate()->initial_object_prototype(); | 6993 Handle<JSObject> object_prototype = isolate()->initial_object_prototype(); |
6985 BuildCheckPrototypeMaps(prototype, object_prototype); | 6994 BuildCheckPrototypeMaps(prototype, object_prototype); |
6986 load_mode = ALLOW_RETURN_HOLE; | |
6987 graph()->MarkDependsOnEmptyArrayProtoElements(); | 6995 graph()->MarkDependsOnEmptyArrayProtoElements(); |
6988 } | 6996 } |
6989 | |
6990 return load_mode; | 6997 return load_mode; |
6991 } | 6998 } |
6992 | 6999 |
6993 | 7000 |
6994 HInstruction* HOptimizedGraphBuilder::BuildMonomorphicElementAccess( | 7001 HInstruction* HOptimizedGraphBuilder::BuildMonomorphicElementAccess( |
6995 HValue* object, | 7002 HValue* object, |
6996 HValue* key, | 7003 HValue* key, |
6997 HValue* val, | 7004 HValue* val, |
6998 HValue* dependency, | 7005 HValue* dependency, |
6999 Handle<Map> map, | 7006 Handle<Map> map, |
(...skipping 5996 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
12996 if (ShouldProduceTraceOutput()) { | 13003 if (ShouldProduceTraceOutput()) { |
12997 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); | 13004 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); |
12998 } | 13005 } |
12999 | 13006 |
13000 #ifdef DEBUG | 13007 #ifdef DEBUG |
13001 graph_->Verify(false); // No full verify. | 13008 graph_->Verify(false); // No full verify. |
13002 #endif | 13009 #endif |
13003 } | 13010 } |
13004 | 13011 |
13005 } } // namespace v8::internal | 13012 } } // namespace v8::internal |
OLD | NEW |