Index: src/hydrogen.cc |
diff --git a/src/hydrogen.cc b/src/hydrogen.cc |
index 31fcd4ca46549f5adc575766f2dce2ec90186da1..b72cd50e9ea432529df5003a2a68df158b8ad667 100644 |
--- a/src/hydrogen.cc |
+++ b/src/hydrogen.cc |
@@ -82,11 +82,11 @@ HBasicBlock::HBasicBlock(HGraph* graph) |
deleted_phis_(4, graph->zone()), |
parent_loop_header_(NULL), |
inlined_entry_block_(NULL), |
- is_inline_return_target_(false), |
- is_reachable_(true), |
- dominates_loop_successors_(false), |
- is_osr_entry_(false), |
- is_ordered_(false) { } |
+ bit_field_(IsInlineReturnTargetField::encode(false) | |
+ IsReachableField::encode(true) | |
+ DominatesLoopSuccessorsField::encode(false) | |
+ IsOsrEntryField::encode(false) | |
+ IsOrderedField::encode(false)) {} |
Isolate* HBasicBlock::isolate() const { |
@@ -95,7 +95,7 @@ Isolate* HBasicBlock::isolate() const { |
void HBasicBlock::MarkUnreachable() { |
- is_reachable_ = false; |
+ bit_field_ = IsReachableField::update(bit_field_, false); |
} |
@@ -748,18 +748,21 @@ bool HGraph::IsStandardConstant(HConstant* constant) { |
} |
-HGraphBuilder::IfBuilder::IfBuilder() : builder_(NULL), needs_compare_(true) {} |
+HGraphBuilder::IfBuilder::IfBuilder() |
+ : builder_(NULL), bit_field_(NeedsCompareField::encode(true)) {} |
HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder) |
- : needs_compare_(true) { |
+ : bit_field_(NeedsCompareField::encode(true)) { |
Initialize(builder); |
} |
HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder, |
HIfContinuation* continuation) |
- : needs_compare_(false), first_true_block_(NULL), first_false_block_(NULL) { |
+ : bit_field_(NeedsCompareField::encode(false)), |
+ first_true_block_(NULL), |
+ first_false_block_(NULL) { |
InitializeDontCreateBlocks(builder); |
continuation->Continue(&first_true_block_, &first_false_block_); |
} |
@@ -768,14 +771,13 @@ HGraphBuilder::IfBuilder::IfBuilder(HGraphBuilder* builder, |
void HGraphBuilder::IfBuilder::InitializeDontCreateBlocks( |
HGraphBuilder* builder) { |
builder_ = builder; |
- finished_ = false; |
- did_then_ = false; |
- did_else_ = false; |
- did_else_if_ = false; |
- did_and_ = false; |
- did_or_ = false; |
- captured_ = false; |
- pending_merge_block_ = false; |
+ bool needs_compare = NeedsCompareField::decode(bit_field_); |
+ bit_field_ = FinishedField::encode(false) | DidThenField::encode(false) | |
+ DidElseField::encode(false) | DidElseIfField::encode(false) | |
+ DidAndField::encode(false) | DidOrField::encode(false) | |
+ CapturedField::encode(false) | |
+ NeedsCompareField::encode(needs_compare) | |
+ PendingMergeBlockField::encode(false); |
split_edge_merge_block_ = NULL; |
merge_at_join_blocks_ = NULL; |
normal_merge_at_join_block_count_ = 0; |
@@ -793,15 +795,15 @@ void HGraphBuilder::IfBuilder::Initialize(HGraphBuilder* builder) { |
HControlInstruction* HGraphBuilder::IfBuilder::AddCompare( |
HControlInstruction* compare) { |
- DCHECK(did_then_ == did_else_); |
- if (did_else_) { |
+ DCHECK(did_then() == did_else()); |
+ if (did_else()) { |
// Handle if-then-elseif |
- did_else_if_ = true; |
- did_else_ = false; |
- did_then_ = false; |
- did_and_ = false; |
- did_or_ = false; |
- pending_merge_block_ = false; |
+ set_did_else_if(true); |
+ set_did_else(false); |
+ set_did_then(false); |
+ set_did_and(false); |
+ set_did_or(false); |
+ set_pending_merge_block(false); |
split_edge_merge_block_ = NULL; |
HEnvironment* env = builder()->environment(); |
first_true_block_ = builder()->CreateBasicBlock(env->Copy()); |
@@ -810,7 +812,7 @@ HControlInstruction* HGraphBuilder::IfBuilder::AddCompare( |
if (split_edge_merge_block_ != NULL) { |
HEnvironment* env = first_false_block_->last_environment(); |
HBasicBlock* split_edge = builder()->CreateBasicBlock(env->Copy()); |
- if (did_or_) { |
+ if (did_or()) { |
compare->SetSuccessorAt(0, split_edge); |
compare->SetSuccessorAt(1, first_false_block_); |
} else { |
@@ -823,15 +825,15 @@ HControlInstruction* HGraphBuilder::IfBuilder::AddCompare( |
compare->SetSuccessorAt(1, first_false_block_); |
} |
builder()->FinishCurrentBlock(compare); |
- needs_compare_ = false; |
+ set_needs_compare(false); |
return compare; |
} |
void HGraphBuilder::IfBuilder::Or() { |
- DCHECK(!needs_compare_); |
- DCHECK(!did_and_); |
- did_or_ = true; |
+ DCHECK(!needs_compare()); |
+ DCHECK(!did_and()); |
+ set_did_or(true); |
HEnvironment* env = first_false_block_->last_environment(); |
if (split_edge_merge_block_ == NULL) { |
split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); |
@@ -844,9 +846,9 @@ void HGraphBuilder::IfBuilder::Or() { |
void HGraphBuilder::IfBuilder::And() { |
- DCHECK(!needs_compare_); |
- DCHECK(!did_or_); |
- did_and_ = true; |
+ DCHECK(!needs_compare()); |
+ DCHECK(!did_or()); |
+ set_did_and(true); |
HEnvironment* env = first_false_block_->last_environment(); |
if (split_edge_merge_block_ == NULL) { |
split_edge_merge_block_ = builder()->CreateBasicBlock(env->Copy()); |
@@ -860,9 +862,9 @@ void HGraphBuilder::IfBuilder::And() { |
void HGraphBuilder::IfBuilder::CaptureContinuation( |
HIfContinuation* continuation) { |
- DCHECK(!did_else_if_); |
- DCHECK(!finished_); |
- DCHECK(!captured_); |
+ DCHECK(!did_else_if()); |
+ DCHECK(!finished()); |
+ DCHECK(!captured()); |
HBasicBlock* true_block = NULL; |
HBasicBlock* false_block = NULL; |
@@ -870,16 +872,16 @@ void HGraphBuilder::IfBuilder::CaptureContinuation( |
DCHECK(true_block != NULL); |
DCHECK(false_block != NULL); |
continuation->Capture(true_block, false_block); |
- captured_ = true; |
+ set_captured(); |
builder()->set_current_block(NULL); |
End(); |
} |
void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) { |
- DCHECK(!did_else_if_); |
- DCHECK(!finished_); |
- DCHECK(!captured_); |
+ DCHECK(!did_else_if()); |
+ DCHECK(!finished()); |
+ DCHECK(!captured()); |
HBasicBlock* true_block = NULL; |
HBasicBlock* false_block = NULL; |
Finish(&true_block, &false_block); |
@@ -892,16 +894,16 @@ void HGraphBuilder::IfBuilder::JoinContinuation(HIfContinuation* continuation) { |
DCHECK(continuation->IsFalseReachable()); |
builder()->GotoNoSimulate(false_block, continuation->false_branch()); |
} |
- captured_ = true; |
+ set_captured(); |
End(); |
} |
void HGraphBuilder::IfBuilder::Then() { |
- DCHECK(!captured_); |
- DCHECK(!finished_); |
- did_then_ = true; |
- if (needs_compare_) { |
+ DCHECK(!captured()); |
+ DCHECK(!finished()); |
+ set_did_then(true); |
+ if (needs_compare()) { |
// Handle if's without any expressions, they jump directly to the "else" |
// branch. However, we must pretend that the "then" branch is reachable, |
// so that the graph builder visits it and sees any live range extending |
@@ -914,23 +916,23 @@ void HGraphBuilder::IfBuilder::Then() { |
builder()->FinishCurrentBlock(branch); |
} |
builder()->set_current_block(first_true_block_); |
- pending_merge_block_ = true; |
+ set_pending_merge_block(true); |
} |
void HGraphBuilder::IfBuilder::Else() { |
- DCHECK(did_then_); |
- DCHECK(!captured_); |
- DCHECK(!finished_); |
+ DCHECK(did_then()); |
+ DCHECK(!captured()); |
+ DCHECK(!finished()); |
AddMergeAtJoinBlock(false); |
builder()->set_current_block(first_false_block_); |
- pending_merge_block_ = true; |
- did_else_ = true; |
+ set_pending_merge_block(true); |
+ set_did_else(true); |
} |
void HGraphBuilder::IfBuilder::Deopt(const char* reason) { |
- DCHECK(did_then_); |
+ DCHECK(did_then()); |
builder()->Add<HDeoptimize>(reason, Deoptimizer::EAGER); |
AddMergeAtJoinBlock(true); |
} |
@@ -945,7 +947,7 @@ void HGraphBuilder::IfBuilder::Return(HValue* value) { |
void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) { |
- if (!pending_merge_block_) return; |
+ if (!pending_merge_block()) return; |
HBasicBlock* block = builder()->current_block(); |
DCHECK(block == NULL || !block->IsFinished()); |
MergeAtJoinBlock* record = new (builder()->zone()) |
@@ -960,21 +962,21 @@ void HGraphBuilder::IfBuilder::AddMergeAtJoinBlock(bool deopt) { |
} |
} |
builder()->set_current_block(NULL); |
- pending_merge_block_ = false; |
+ set_pending_merge_block(false); |
} |
void HGraphBuilder::IfBuilder::Finish() { |
- DCHECK(!finished_); |
- if (!did_then_) { |
+ DCHECK(!finished()); |
+ if (!did_then()) { |
Then(); |
} |
AddMergeAtJoinBlock(false); |
- if (!did_else_) { |
+ if (!did_else()) { |
Else(); |
AddMergeAtJoinBlock(false); |
} |
- finished_ = true; |
+ set_finished(); |
} |
@@ -995,7 +997,7 @@ void HGraphBuilder::IfBuilder::Finish(HBasicBlock** then_continuation, |
void HGraphBuilder::IfBuilder::End() { |
- if (captured_) return; |
+ if (captured()) return; |
Finish(); |
int total_merged_blocks = normal_merge_at_join_block_count_ + |