Revision: 9713 Author: [email protected] Date: Thu Oct 20 01:49:01 2011 Log: ElementsKind transitioning support for keyed loads in Crankshaft
Review URL: http://codereview.chromium.org/8352012 http://code.google.com/p/v8/source/detail?r=9713 Modified: /branches/bleeding_edge/src/hydrogen.cc ======================================= --- /branches/bleeding_edge/src/hydrogen.cc Thu Oct 20 01:41:38 2011 +++ /branches/bleeding_edge/src/hydrogen.cc Thu Oct 20 01:49:01 2011 @@ -4096,33 +4096,30 @@ // Elements_kind transition support. MapList transition_target(maps->length()); - if (is_store) { - // Collect possible transition targets. - MapList possible_transitioned_maps(maps->length()); - for (int i = 0; i < maps->length(); ++i) { - Handle<Map> map = maps->at(i); - ElementsKind elements_kind = map->elements_kind(); - if (elements_kind == FAST_DOUBLE_ELEMENTS || - elements_kind == FAST_ELEMENTS) { - possible_transitioned_maps.Add(*map); - } - } - // Get transition target for each map (NULL == no transition). - for (int i = 0; i < maps->length(); ++i) { - Handle<Map> map = maps->at(i); - Map* transitioned_map = - map->FindTransitionedMap(&possible_transitioned_maps); - transition_target.Add(transitioned_map); + // Collect possible transition targets. + MapList possible_transitioned_maps(maps->length()); + for (int i = 0; i < maps->length(); ++i) { + Handle<Map> map = maps->at(i); + ElementsKind elements_kind = map->elements_kind(); + if (elements_kind == FAST_DOUBLE_ELEMENTS || + elements_kind == FAST_ELEMENTS) { + possible_transitioned_maps.Add(*map); } } + // Get transition target for each map (NULL == no transition). + for (int i = 0; i < maps->length(); ++i) { + Handle<Map> map = maps->at(i); + Map* transitioned_map = + map->FindTransitionedMap(&possible_transitioned_maps); + transition_target.Add(transitioned_map); + } int num_untransitionable_maps = 0; Handle<Map> untransitionable_map; for (int i = 0; i < maps->length(); ++i) { Handle<Map> map = maps->at(i); ASSERT(map->IsMap()); - ASSERT(!is_store || (transition_target.length() == maps->length())); - if (is_store && transition_target.at(i) != NULL) { + if (transition_target.at(i) != NULL) { object = AddInstruction(new(zone()) HTransitionElementsKind( object, map, Handle<Map>(transition_target.at(i)))); } else { -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
