Index: src/compiler/instruction.cc |
diff --git a/src/compiler/instruction.cc b/src/compiler/instruction.cc |
index ad7a5ee05c6bcf9a7324995841e1bc0f53f7330a..218130c686c585f8de4456a18522916f9c2a660b 100644 |
--- a/src/compiler/instruction.cc |
+++ b/src/compiler/instruction.cc |
@@ -338,6 +338,36 @@ std::ostream& operator<<(std::ostream& os, const Constant& constant) { |
} |
+InstructionBlock::InstructionBlock(Zone* zone, BasicBlock::Id id, |
+ BasicBlock::RpoNumber ao_number, |
+ BasicBlock::RpoNumber rpo_number, |
+ BasicBlock::RpoNumber loop_header, |
+ BasicBlock::RpoNumber loop_end, |
+ bool deferred) |
+ : successors_(zone), |
+ predecessors_(zone), |
+ phis_(zone), |
+ id_(id), |
+ ao_number_(ao_number), |
+ rpo_number_(rpo_number), |
+ loop_header_(loop_header), |
+ loop_end_(loop_end), |
+ code_start_(-1), |
+ code_end_(-1), |
+ deferred_(deferred) {} |
+ |
+ |
+size_t InstructionBlock::PredecessorIndexOf( |
+ BasicBlock::RpoNumber rpo_number) const { |
+ size_t j = 0; |
+ for (InstructionBlock::Predecessors::const_iterator i = predecessors_.begin(); |
+ i != predecessors_.end(); ++i, ++j) { |
+ if (*i == rpo_number) break; |
+ } |
+ return j; |
+} |
+ |
+ |
static BasicBlock::RpoNumber GetRpo(BasicBlock* block) { |
if (block == NULL) return BasicBlock::RpoNumber::Invalid(); |
return block->GetRpoNumber(); |
@@ -350,43 +380,23 @@ static BasicBlock::RpoNumber GetLoopEndRpo(const BasicBlock* block) { |
} |
-InstructionBlock::InstructionBlock(Zone* zone, const BasicBlock* block) |
- : successors_(static_cast<int>(block->SuccessorCount()), |
- BasicBlock::RpoNumber::Invalid(), zone), |
- predecessors_(static_cast<int>(block->PredecessorCount()), |
- BasicBlock::RpoNumber::Invalid(), zone), |
- phis_(zone), |
- id_(block->id()), |
- ao_number_(block->GetAoNumber()), |
- rpo_number_(block->GetRpoNumber()), |
- loop_header_(GetRpo(block->loop_header())), |
- loop_end_(GetLoopEndRpo(block)), |
- code_start_(-1), |
- code_end_(-1), |
- deferred_(block->deferred()) { |
+static InstructionBlock* InstructionBlockFor(Zone* zone, |
+ const BasicBlock* block) { |
+ InstructionBlock* instr_block = new (zone) InstructionBlock( |
+ zone, block->id(), block->GetAoNumber(), block->GetRpoNumber(), |
+ GetRpo(block->loop_header()), GetLoopEndRpo(block), block->deferred()); |
// Map successors and precessors |
- size_t index = 0; |
- for (BasicBlock::Successors::const_iterator it = block->successors_begin(); |
- it != block->successors_end(); ++it, ++index) { |
- successors_[index] = (*it)->GetRpoNumber(); |
- } |
- index = 0; |
- for (BasicBlock::Predecessors::const_iterator |
- it = block->predecessors_begin(); |
- it != block->predecessors_end(); ++it, ++index) { |
- predecessors_[index] = (*it)->GetRpoNumber(); |
+ instr_block->successors().reserve(block->SuccessorCount()); |
+ for (auto it = block->successors_begin(); it != block->successors_end(); |
+ ++it) { |
+ instr_block->successors().push_back((*it)->GetRpoNumber()); |
} |
-} |
- |
- |
-size_t InstructionBlock::PredecessorIndexOf( |
- BasicBlock::RpoNumber rpo_number) const { |
- size_t j = 0; |
- for (InstructionBlock::Predecessors::const_iterator i = predecessors_.begin(); |
- i != predecessors_.end(); ++i, ++j) { |
- if (*i == rpo_number) break; |
+ instr_block->predecessors().reserve(block->PredecessorCount()); |
+ for (auto it = block->predecessors_begin(); it != block->predecessors_end(); |
+ ++it) { |
+ instr_block->predecessors().push_back((*it)->GetRpoNumber()); |
} |
- return j; |
+ return instr_block; |
} |
@@ -400,7 +410,7 @@ InstructionBlocks* InstructionSequence::InstructionBlocksFor( |
it != schedule->rpo_order()->end(); ++it, ++rpo_number) { |
DCHECK_EQ(NULL, (*blocks)[rpo_number]); |
DCHECK((*it)->GetRpoNumber().ToSize() == rpo_number); |
- (*blocks)[rpo_number] = new (zone) InstructionBlock(zone, *it); |
+ (*blocks)[rpo_number] = InstructionBlockFor(zone, *it); |
} |
return blocks; |
} |
@@ -436,18 +446,18 @@ BlockStartInstruction* InstructionSequence::GetBlockStart( |
} |
-void InstructionSequence::StartBlock(BasicBlock* basic_block) { |
- InstructionBlock* block = InstructionBlockAt(basic_block->GetRpoNumber()); |
+void InstructionSequence::StartBlock(BasicBlock::RpoNumber rpo) { |
+ InstructionBlock* block = InstructionBlockAt(rpo); |
block->set_code_start(static_cast<int>(instructions_.size())); |
BlockStartInstruction* block_start = |
- BlockStartInstruction::New(zone(), basic_block); |
+ BlockStartInstruction::New(zone(), block->id(), rpo); |
AddInstruction(block_start); |
} |
-void InstructionSequence::EndBlock(BasicBlock* basic_block) { |
+void InstructionSequence::EndBlock(BasicBlock::RpoNumber rpo) { |
int end = static_cast<int>(instructions_.size()); |
- InstructionBlock* block = InstructionBlockAt(basic_block->GetRpoNumber()); |
+ InstructionBlock* block = InstructionBlockAt(rpo); |
DCHECK(block->code_start() >= 0 && block->code_start() < end); |
block->set_code_end(end); |
} |