diff options
Diffstat (limited to 'deps/v8/src/hydrogen-mark-deoptimize.cc')
-rw-r--r-- | deps/v8/src/hydrogen-mark-deoptimize.cc | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/deps/v8/src/hydrogen-mark-deoptimize.cc b/deps/v8/src/hydrogen-mark-deoptimize.cc index 111fcd2ce9..c0236e91cb 100644 --- a/deps/v8/src/hydrogen-mark-deoptimize.cc +++ b/deps/v8/src/hydrogen-mark-deoptimize.cc @@ -34,14 +34,9 @@ void HMarkDeoptimizeOnUndefinedPhase::Run() { const ZoneList<HPhi*>* phi_list = graph()->phi_list(); for (int i = 0; i < phi_list->length(); i++) { HPhi* phi = phi_list->at(i); - if (phi->CheckFlag(HValue::kAllowUndefinedAsNaN)) { - for (HUseIterator it(phi->uses()); !it.Done(); it.Advance()) { - HValue* use_value = it.value(); - if (!use_value->CheckFlag(HValue::kAllowUndefinedAsNaN)) { - ProcessPhi(phi); - break; - } - } + if (phi->CheckFlag(HValue::kAllowUndefinedAsNaN) && + !phi->CheckUsesForFlag(HValue::kAllowUndefinedAsNaN)) { + ProcessPhi(phi); } } } @@ -68,4 +63,22 @@ void HMarkDeoptimizeOnUndefinedPhase::ProcessPhi(HPhi* phi) { } } + +void HComputeChangeUndefinedToNaN::Run() { + const ZoneList<HBasicBlock*>* blocks(graph()->blocks()); + for (int i = 0; i < blocks->length(); ++i) { + const HBasicBlock* block(blocks->at(i)); + for (HInstruction* current = block->first(); current != NULL; ) { + HInstruction* next = current->next(); + if (current->IsChange()) { + if (HChange::cast(current)->can_convert_undefined_to_nan()) { + current->SetFlag(HValue::kAllowUndefinedAsNaN); + } + } + current = next; + } + } +} + + } } // namespace v8::internal |