| Index: src/hydrogen-instructions.cc
 | 
| diff --git a/src/hydrogen-instructions.cc b/src/hydrogen-instructions.cc
 | 
| index 997b7c2fda9b29455d03faac59c5a49a60d18d5c..b09d9c67c2ac12e83e0db81cf3fc8634da4dbae7 100644
 | 
| --- a/src/hydrogen-instructions.cc
 | 
| +++ b/src/hydrogen-instructions.cc
 | 
| @@ -388,7 +388,7 @@ HUseListNode* HUseListNode::tail() {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -bool HValue::CheckUsesForFlag(Flag f) {
 | 
| +bool HValue::CheckUsesForFlag(Flag f) const {
 | 
|    for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
 | 
|      if (it.value()->IsSimulate()) continue;
 | 
|      if (!it.value()->CheckFlag(f)) return false;
 | 
| @@ -397,7 +397,7 @@ bool HValue::CheckUsesForFlag(Flag f) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -bool HValue::HasAtLeastOneUseWithFlagAndNoneWithout(Flag f) {
 | 
| +bool HValue::HasAtLeastOneUseWithFlagAndNoneWithout(Flag f) const {
 | 
|    bool return_value = false;
 | 
|    for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
 | 
|      if (it.value()->IsSimulate()) continue;
 | 
| @@ -1302,7 +1302,7 @@ HValue* HUnaryMathOperation::Canonicalize() {
 | 
|        if (new_left == NULL &&
 | 
|            hdiv->observed_input_representation(1).IsSmiOrInteger32()) {
 | 
|          new_left = new(block()->zone()) HChange(
 | 
| -            left, Representation::Integer32(), false, false, false);
 | 
| +            left, Representation::Integer32(), false, false);
 | 
|          HChange::cast(new_left)->InsertBefore(this);
 | 
|        }
 | 
|        HValue* new_right =
 | 
| @@ -1313,7 +1313,7 @@ HValue* HUnaryMathOperation::Canonicalize() {
 | 
|  #endif
 | 
|            hdiv->observed_input_representation(2).IsSmiOrInteger32()) {
 | 
|          new_right = new(block()->zone()) HChange(
 | 
| -            right, Representation::Integer32(), false, false, false);
 | 
| +            right, Representation::Integer32(), false, false);
 | 
|          HChange::cast(new_right)->InsertBefore(this);
 | 
|        }
 | 
|  
 | 
| @@ -2773,6 +2773,18 @@ void HCompareObjectEqAndBranch::PrintDataTo(StringStream* stream) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void HCompareHoleAndBranch::PrintDataTo(StringStream* stream) {
 | 
| +  object()->PrintNameTo(stream);
 | 
| +  HControlInstruction::PrintDataTo(stream);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void HCompareHoleAndBranch::InferRepresentation(
 | 
| +    HInferRepresentationPhase* h_infer) {
 | 
| +  ChangeRepresentation(object()->representation());
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void HGoto::PrintDataTo(StringStream* stream) {
 | 
|    stream->Add("B%d", SuccessorAt(0)->block_id());
 | 
|  }
 | 
| @@ -3085,18 +3097,8 @@ bool HLoadKeyed::UsesMustHandleHole() const {
 | 
|  
 | 
|  
 | 
|  bool HLoadKeyed::AllUsesCanTreatHoleAsNaN() const {
 | 
| -  if (!IsFastDoubleElementsKind(elements_kind())) {
 | 
| -    return false;
 | 
| -  }
 | 
| -
 | 
| -  for (HUseIterator it(uses()); !it.Done(); it.Advance()) {
 | 
| -    HValue* use = it.value();
 | 
| -    if (!use->CheckFlag(HValue::kAllowUndefinedAsNaN)) {
 | 
| -      return false;
 | 
| -    }
 | 
| -  }
 | 
| -
 | 
| -  return true;
 | 
| +  return IsFastDoubleElementsKind(elements_kind()) &&
 | 
| +      CheckUsesForFlag(HValue::kAllowUndefinedAsNaN);
 | 
|  }
 | 
|  
 | 
|  
 | 
| 
 |