Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index c7acf95748f6d41aeec982a973bd721890e559d4..4db3c7fe20427af2a6a82d138f1b07b00fb1c528 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -8524,41 +8524,47 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
} |
if_isstring.Else(); |
{ |
- IfBuilder if_isheapnumber(this); |
- if_isheapnumber.IfNot<HIsSmiAndBranch>(search_element); |
- HCompareMap* isheapnumber = if_isheapnumber.AndIf<HCompareMap>( |
+ IfBuilder if_isnumber(this); |
+ if_isnumber.If<HIsSmiAndBranch>(search_element); |
+ if_isnumber.OrIf<HCompareMap>( |
search_element, isolate()->factory()->heap_number_map()); |
- if_isheapnumber.Then(); |
+ if_isnumber.Then(); |
{ |
- HValue* search_number = Add<HLoadNamedField>( |
- search_element, isheapnumber, |
- HObjectAccess::ForHeapNumberValue()); |
+ HValue* search_number = |
+ AddUncasted<HForceRepresentation>(search_element, |
+ Representation::Double()); |
LoopBuilder loop(this, context(), direction); |
{ |
HValue* index = loop.BeginBody(initial, terminating, token); |
HValue* element = AddUncasted<HLoadKeyed>( |
elements, index, static_cast<HValue*>(NULL), |
kind, ALLOW_RETURN_HOLE); |
- IfBuilder if_issame(this); |
- if_issame.IfNot<HIsSmiAndBranch>(element); |
- HCompareMap* issame = if_issame.AndIf<HCompareMap>( |
+ |
+ IfBuilder if_element_isnumber(this); |
+ if_element_isnumber.If<HIsSmiAndBranch>(element); |
+ if_element_isnumber.OrIf<HCompareMap>( |
element, isolate()->factory()->heap_number_map()); |
- if_issame.And(); |
- HValue* number = Add<HLoadNamedField>( |
- element, issame, HObjectAccess::ForHeapNumberValue()); |
- if_issame.If<HCompareNumericAndBranch>( |
- number, search_number, Token::EQ_STRICT); |
- if_issame.Then(); |
+ if_element_isnumber.Then(); |
{ |
- Drop(1); |
- Push(index); |
- loop.Break(); |
+ HValue* number = |
+ AddUncasted<HForceRepresentation>(element, |
+ Representation::Double()); |
+ IfBuilder if_issame(this); |
+ if_issame.If<HCompareNumericAndBranch>( |
+ number, search_number, Token::EQ_STRICT); |
+ if_issame.Then(); |
+ { |
+ Drop(1); |
+ Push(index); |
+ loop.Break(); |
+ } |
+ if_issame.End(); |
} |
- if_issame.End(); |
+ if_element_isnumber.End(); |
} |
loop.EndBody(); |
} |
- if_isheapnumber.Else(); |
+ if_isnumber.Else(); |
{ |
LoopBuilder loop(this, context(), direction); |
{ |
@@ -8579,7 +8585,7 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver, |
} |
loop.EndBody(); |
} |
- if_isheapnumber.End(); |
+ if_isnumber.End(); |
} |
if_isstring.End(); |
} |