Chromium Code Reviews| Index: src/hydrogen.h |
| diff --git a/src/hydrogen.h b/src/hydrogen.h |
| index 8f4878d93e9c065bad1b36579099cd64d08fa8c9..89274a5991fefe92bef6b600f6f85e4ec61a4832 100644 |
| --- a/src/hydrogen.h |
| +++ b/src/hydrogen.h |
| @@ -1463,6 +1463,10 @@ class HGraphBuilder { |
| void JoinContinuation(HIfContinuation* continuation); |
| void Then(); |
| + void ThenDeopt(const char* reason) { |
|
Michael Starzinger
2013/11/12 09:50:00
nit: Let's move that down to line 1474 into the bl
danno
2013/11/14 14:46:40
Done.
|
| + Then(); |
| + Deopt(reason); |
| + } |
| void Else(); |
| void End(); |
| @@ -1479,21 +1483,58 @@ class HGraphBuilder { |
| HGraphBuilder* builder() const { return builder_; } |
| + void AddMergeAtJoinBlock(bool deopt) { |
| + if (!pending_merge_block_) return; |
| + HBasicBlock* block = builder_->current_block(); |
| + ASSERT(block == NULL || !block->IsFinished()); |
| + MergeAtJoinBlock* record = |
| + new(builder_->zone()) MergeAtJoinBlock(block, deopt, |
| + merge_at_join_blocks_); |
| + merge_at_join_blocks_ = record; |
| + if (block != NULL) { |
| + if (deopt) { |
| + normal_merge_at_join_block_count_++; |
| + } else { |
| + deopt_merge_at_join_block_count_++; |
| + } |
| + } |
| + builder_->set_current_block(NULL); |
| + pending_merge_block_ = false; |
| + } |
| + |
| + void Finish(); |
| + void Finish(HBasicBlock** then_continuation, |
| + HBasicBlock** else_continuation); |
| + |
| + class MergeAtJoinBlock : public ZoneObject { |
| + public: |
| + MergeAtJoinBlock(HBasicBlock* block, |
| + bool deopt, |
| + MergeAtJoinBlock* next) |
| + : block_(block), |
| + deopt_(deopt), |
| + next_(next) {} |
| + HBasicBlock* block_; |
| + bool deopt_; |
| + MergeAtJoinBlock* next_; |
| + }; |
| + |
| HGraphBuilder* builder_; |
| bool finished_ : 1; |
| - bool deopt_then_ : 1; |
| - bool deopt_else_ : 1; |
| bool did_then_ : 1; |
| bool did_else_ : 1; |
| + bool did_else_if_ : 1; |
| bool did_and_ : 1; |
| bool did_or_ : 1; |
| bool captured_ : 1; |
| bool needs_compare_ : 1; |
| + bool pending_merge_block_ : 1; |
| HBasicBlock* first_true_block_; |
| - HBasicBlock* last_true_block_; |
| HBasicBlock* first_false_block_; |
| HBasicBlock* split_edge_merge_block_; |
| - HBasicBlock* merge_block_; |
| + MergeAtJoinBlock* merge_at_join_blocks_; |
| + int normal_merge_at_join_block_count_; |
| + int deopt_merge_at_join_block_count_; |
| }; |
| class LoopBuilder V8_FINAL { |