Chromium Code Reviews| Index: src/hydrogen.cc |
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
| index ba1de7aa2258a308927c90f937d5d1e6beccd841..0206584404ff477b1bb7c28d9c6b7b0ab9c539e2 100644 |
| --- a/src/hydrogen.cc |
| +++ b/src/hydrogen.cc |
| @@ -93,6 +93,7 @@ HBasicBlock::HBasicBlock(HGraph* graph) |
| deleted_phis_(4, graph->zone()), |
| parent_loop_header_(NULL), |
| inlined_entry_block_(NULL), |
| + is_reachable_(true), |
| is_inline_return_target_(false), |
| is_deoptimizing_(false), |
| dominates_loop_successors_(false), |
| @@ -104,6 +105,20 @@ Isolate* HBasicBlock::isolate() const { |
| } |
| +void HBasicBlock::MarkUnreachable() { |
| + if (!is_osr_entry()) { |
| + is_reachable_ = false; |
| + graph()->MarkHasUnreachableCode(); |
| + } |
| +} |
| + |
| + |
| +void HBasicBlock::MarkAsDeoptimizing() { |
| + is_deoptimizing_ = true; |
| + graph()->MarkHasUnreachableCode(); |
| +} |
| + |
| + |
| void HBasicBlock::AttachLoopInformation() { |
| ASSERT(!IsLoopHeader()); |
| loop_information_ = new(zone()) HLoopInformation(this, zone()); |
| @@ -2066,6 +2081,7 @@ HGraph::HGraph(CompilationInfo* info) |
| osr_(NULL), |
| info_(info), |
| zone_(info->zone()), |
| + has_unreachable_code_(false), |
| is_recursive_(false), |
| use_optimistic_licm_(false), |
| has_soft_deoptimize_(false), |
| @@ -2729,16 +2745,6 @@ void TestContext::BuildBranch(HValue* value) { |
| if (value != NULL && value->CheckFlag(HValue::kIsArguments)) { |
| builder->Bailout(kArgumentsObjectValueInATestContext); |
| } |
| - if (value->IsConstant()) { |
| - HConstant* constant_value = HConstant::cast(value); |
| - if (constant_value->BooleanValue()) { |
| - builder->current_block()->Goto(if_true(), builder->function_state()); |
| - } else { |
| - builder->current_block()->Goto(if_false(), builder->function_state()); |
| - } |
| - builder->set_current_block(NULL); |
| - return; |
| - } |
| HBasicBlock* empty_true = builder->graph()->CreateBasicBlock(); |
| HBasicBlock* empty_false = builder->graph()->CreateBasicBlock(); |
| ToBooleanStub::Types expected(condition()->to_boolean_types()); |
| @@ -8017,9 +8023,16 @@ void HOptimizedGraphBuilder::HandleLiteralCompareTypeof(CompareOperation* expr, |
| static bool IsLiteralCompareBool(HValue* left, |
| Token::Value op, |
| HValue* right) { |
| - return op == Token::EQ_STRICT && |
| - ((left->IsConstant() && HConstant::cast(left)->handle()->IsBoolean()) || |
| - (right->IsConstant() && HConstant::cast(right)->handle()->IsBoolean())); |
| + if (op != Token::EQ_STRICT) return false; |
| + if (left->IsConstant() && HConstant::cast(left)->handle()->IsBoolean()) { |
| + return !right->IsConstant() || |
|
Michael Starzinger
2013/08/16 15:02:20
nit: Should fit into one line.
danno
2013/10/01 10:43:18
Done.
|
| + !HConstant::cast(right)->handle()->IsSmi(); |
| + } |
| + if (right->IsConstant() && HConstant::cast(right)->handle()->IsBoolean()) { |
| + return !left->IsConstant() || |
|
Michael Starzinger
2013/08/16 15:02:20
nit: Should fit into one line.
danno
2013/10/01 10:43:18
Done.
|
| + !HConstant::cast(left)->handle()->IsSmi(); |
| + } |
| + return false; |
| } |