Revision: 19893
Author: [email protected]
Date: Thu Mar 13 12:17:43 2014 UTC
Log: Perf regression: changes in KeyedStoreIC introduced polymorphism.
When fixing bug 350884, I introduced an error that meant we went
polymorphic in KeyedStoreIC where we stayed monomorphic before. This
CL addresses the error, while preserving the bug fix for 350884.
[email protected]
Review URL: https://codereview.chromium.org/198793002
http://code.google.com/p/v8/source/detail?r=19893
Modified:
/branches/bleeding_edge/src/ic.cc
=======================================
--- /branches/bleeding_edge/src/ic.cc Thu Mar 13 10:57:07 2014 UTC
+++ /branches/bleeding_edge/src/ic.cc Thu Mar 13 12:17:43 2014 UTC
@@ -1459,22 +1459,22 @@
KeyedStoreIC::GetKeyedAccessStoreMode(target()->extra_ic_state());
Handle<Map> previous_receiver_map = target_receiver_maps.at(0);
if (state() == MONOMORPHIC) {
+ Handle<Map> transitioned_receiver_map = receiver_map;
if (IsTransitionStoreMode(store_mode)) {
+ transitioned_receiver_map = ComputeTransitionedMap(receiver,
store_mode);
+ }
+ if (receiver_map.is_identical_to(previous_receiver_map) ||
+ IsTransitionOfMonomorphicTarget(
+ MapToType<HeapType>(transitioned_receiver_map, isolate()))) {
// If the "old" and "new" maps are in the same elements map family,
or
// if they at least come from the same origin for a transitioning
store,
// stay MONOMORPHIC and use the map for the most generic
ElementsKind.
- Handle<Map> transitioned_receiver_map =
- ComputeTransitionedMap(receiver, store_mode);
- if (*previous_receiver_map == receiver->map() ||
- IsTransitionOfMonomorphicTarget(
- MapToType<HeapType>(transitioned_receiver_map, isolate()))) {
- store_mode = GetNonTransitioningStoreMode(store_mode);
- return isolate()->stub_cache()->ComputeKeyedStoreElement(
- transitioned_receiver_map, strict_mode(), store_mode);
- }
+ store_mode = GetNonTransitioningStoreMode(store_mode);
+ return isolate()->stub_cache()->ComputeKeyedStoreElement(
+ transitioned_receiver_map, strict_mode(), store_mode);
} else if (*previous_receiver_map == receiver->map() &&
old_store_mode == STANDARD_STORE &&
- (IsGrowStoreMode(store_mode) ||
+ (store_mode == STORE_AND_GROW_NO_TRANSITION ||
store_mode == STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS ||
store_mode == STORE_NO_TRANSITION_HANDLE_COW)) {
// A "normal" IC that handles stores can switch to a version that can
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.