| Index: src/hydrogen.h
|
| diff --git a/src/hydrogen.h b/src/hydrogen.h
|
| index eeef87149a837a65ab367959197bcb8f167a47cd..31a9c45e6824bf8f11cd591685d3adcdc53ee52a 100644
|
| --- a/src/hydrogen.h
|
| +++ b/src/hydrogen.h
|
| @@ -170,8 +170,13 @@ class HBasicBlock V8_FINAL : public ZoneObject {
|
| }
|
| HBasicBlock* inlined_entry_block() { return inlined_entry_block_; }
|
|
|
| - bool IsDeoptimizing() const { return is_deoptimizing_; }
|
| - void MarkAsDeoptimizing() { is_deoptimizing_ = true; }
|
| + bool IsDeoptimizing() const {
|
| + return end() != NULL && end()->IsDeoptimize();
|
| + }
|
| +
|
| + void MarkUnreachable();
|
| + bool IsUnreachable() const { return !is_reachable_; }
|
| + bool IsReachable() const { return is_reachable_; }
|
|
|
| bool IsLoopSuccessorDominator() const {
|
| return dominates_loop_successors_;
|
| @@ -215,7 +220,7 @@ class HBasicBlock V8_FINAL : public ZoneObject {
|
| // For blocks marked as inline return target: the block with HEnterInlined.
|
| HBasicBlock* inlined_entry_block_;
|
| bool is_inline_return_target_ : 1;
|
| - bool is_deoptimizing_ : 1;
|
| + bool is_reachable_ : 1;
|
| bool dominates_loop_successors_ : 1;
|
| bool is_osr_entry_ : 1;
|
| };
|
| @@ -406,14 +411,6 @@ class HGraph V8_FINAL : public ZoneObject {
|
| use_optimistic_licm_ = value;
|
| }
|
|
|
| - bool has_soft_deoptimize() {
|
| - return has_soft_deoptimize_;
|
| - }
|
| -
|
| - void set_has_soft_deoptimize(bool value) {
|
| - has_soft_deoptimize_ = value;
|
| - }
|
| -
|
| void MarkRecursive() {
|
| is_recursive_ = true;
|
| }
|
| @@ -496,7 +493,6 @@ class HGraph V8_FINAL : public ZoneObject {
|
|
|
| bool is_recursive_;
|
| bool use_optimistic_licm_;
|
| - bool has_soft_deoptimize_;
|
| bool depends_on_empty_array_proto_elements_;
|
| int type_change_checksum_;
|
| int maximum_environment_size_;
|
| @@ -1657,13 +1653,14 @@ inline HInstruction* HGraphBuilder::AddUncasted<HDeoptimize>(
|
| if (FLAG_always_opt) return NULL;
|
| }
|
| if (current_block()->IsDeoptimizing()) return NULL;
|
| - HDeoptimize* instr = New<HDeoptimize>(reason, type);
|
| - AddInstruction(instr);
|
| + HBasicBlock* after_deopt_block = CreateBasicBlock(
|
| + current_block()->last_environment());
|
| + HDeoptimize* instr = New<HDeoptimize>(reason, type, after_deopt_block);
|
| if (type == Deoptimizer::SOFT) {
|
| isolate()->counters()->soft_deopts_inserted()->Increment();
|
| - graph()->set_has_soft_deoptimize(true);
|
| }
|
| - current_block()->MarkAsDeoptimizing();
|
| + current_block()->Finish(instr);
|
| + set_current_block(after_deopt_block);
|
| return instr;
|
| }
|
|
|
|
|