| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index c923d2c2f787b16f3e0ec5674f5763731b7cede5..20f86bf5207341ffb1e03f52ff162e053dc16547 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -8808,6 +8808,12 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver,
|
|
|
| Push(graph()->GetConstantMinus1());
|
| if (IsFastDoubleElementsKind(kind) || IsFastSmiElementsKind(kind)) {
|
| + // Make sure that we can actually compare numbers correctly below, see
|
| + // https://code.google.com/p/chromium/issues/detail?id=407946 for details.
|
| + search_element = AddUncasted<HForceRepresentation>(
|
| + search_element, IsFastSmiElementsKind(kind) ? Representation::Smi()
|
| + : Representation::Double());
|
| +
|
| LoopBuilder loop(this, context(), direction);
|
| {
|
| HValue* index = loop.BeginBody(initial, terminating, token);
|
| @@ -8815,12 +8821,8 @@ HValue* HOptimizedGraphBuilder::BuildArrayIndexOf(HValue* receiver,
|
| elements, index, static_cast<HValue*>(NULL),
|
| kind, ALLOW_RETURN_HOLE);
|
| IfBuilder if_issame(this);
|
| - if (IsFastDoubleElementsKind(kind)) {
|
| - if_issame.If<HCompareNumericAndBranch>(
|
| - element, search_element, Token::EQ_STRICT);
|
| - } else {
|
| - if_issame.If<HCompareObjectEqAndBranch>(element, search_element);
|
| - }
|
| + if_issame.If<HCompareNumericAndBranch>(element, search_element,
|
| + Token::EQ_STRICT);
|
| if_issame.Then();
|
| {
|
| Drop(1);
|
|
|