Index: src/compiler/instruction.cc |
diff --git a/src/compiler/instruction.cc b/src/compiler/instruction.cc |
index fab4534d74300f57ead9094845d37144ea6cf7b8..d85ae07954eae0856e03600c32284fe11a3bf936 100644 |
--- a/src/compiler/instruction.cc |
+++ b/src/compiler/instruction.cc |
@@ -5,6 +5,7 @@ |
#include "src/compiler/common-operator.h" |
#include "src/compiler/graph.h" |
#include "src/compiler/instruction.h" |
+#include "src/compiler/schedule.h" |
namespace v8 { |
namespace internal { |
@@ -375,15 +376,12 @@ void PhiInstruction::SetInput(size_t offset, int virtual_register) { |
} |
-InstructionBlock::InstructionBlock(Zone* zone, BasicBlock::Id id, |
- BasicBlock::RpoNumber rpo_number, |
- BasicBlock::RpoNumber loop_header, |
- BasicBlock::RpoNumber loop_end, |
+InstructionBlock::InstructionBlock(Zone* zone, RpoNumber rpo_number, |
+ RpoNumber loop_header, RpoNumber loop_end, |
bool deferred) |
: successors_(zone), |
predecessors_(zone), |
phis_(zone), |
- id_(id), |
ao_number_(rpo_number), |
rpo_number_(rpo_number), |
loop_header_(loop_header), |
@@ -393,8 +391,7 @@ InstructionBlock::InstructionBlock(Zone* zone, BasicBlock::Id id, |
deferred_(deferred) {} |
-size_t InstructionBlock::PredecessorIndexOf( |
- BasicBlock::RpoNumber rpo_number) const { |
+size_t InstructionBlock::PredecessorIndexOf(RpoNumber rpo_number) const { |
size_t j = 0; |
for (InstructionBlock::Predecessors::const_iterator i = predecessors_.begin(); |
i != predecessors_.end(); ++i, ++j) { |
@@ -404,31 +401,31 @@ size_t InstructionBlock::PredecessorIndexOf( |
} |
-static BasicBlock::RpoNumber GetRpo(BasicBlock* block) { |
- if (block == NULL) return BasicBlock::RpoNumber::Invalid(); |
- return block->GetRpoNumber(); |
+static RpoNumber GetRpo(const BasicBlock* block) { |
+ if (block == NULL) return RpoNumber::Invalid(); |
+ return RpoNumber::FromInt(block->rpo_number()); |
} |
-static BasicBlock::RpoNumber GetLoopEndRpo(const BasicBlock* block) { |
- if (!block->IsLoopHeader()) return BasicBlock::RpoNumber::Invalid(); |
- return block->loop_end()->GetRpoNumber(); |
+static RpoNumber GetLoopEndRpo(const BasicBlock* block) { |
+ if (!block->IsLoopHeader()) return RpoNumber::Invalid(); |
+ return RpoNumber::FromInt(block->loop_end()->rpo_number()); |
} |
static InstructionBlock* InstructionBlockFor(Zone* zone, |
const BasicBlock* block) { |
- InstructionBlock* instr_block = new (zone) InstructionBlock( |
- zone, block->id(), block->GetRpoNumber(), GetRpo(block->loop_header()), |
- GetLoopEndRpo(block), block->deferred()); |
+ InstructionBlock* instr_block = new (zone) |
+ InstructionBlock(zone, GetRpo(block), GetRpo(block->loop_header()), |
+ GetLoopEndRpo(block), block->deferred()); |
// Map successors and precessors |
instr_block->successors().reserve(block->SuccessorCount()); |
for (BasicBlock* successor : block->successors()) { |
- instr_block->successors().push_back(successor->GetRpoNumber()); |
+ instr_block->successors().push_back(GetRpo(successor)); |
} |
instr_block->predecessors().reserve(block->PredecessorCount()); |
for (BasicBlock* predecessor : block->predecessors()) { |
- instr_block->predecessors().push_back(predecessor->GetRpoNumber()); |
+ instr_block->predecessors().push_back(GetRpo(predecessor)); |
} |
return instr_block; |
} |
@@ -443,7 +440,7 @@ InstructionBlocks* InstructionSequence::InstructionBlocksFor( |
for (BasicBlockVector::const_iterator it = schedule->rpo_order()->begin(); |
it != schedule->rpo_order()->end(); ++it, ++rpo_number) { |
DCHECK(!(*blocks)[rpo_number]); |
- DCHECK((*it)->GetRpoNumber().ToSize() == rpo_number); |
+ DCHECK(GetRpo(*it).ToSize() == rpo_number); |
(*blocks)[rpo_number] = InstructionBlockFor(zone, *it); |
} |
ComputeAssemblyOrder(blocks); |
@@ -455,12 +452,12 @@ void InstructionSequence::ComputeAssemblyOrder(InstructionBlocks* blocks) { |
int ao = 0; |
for (auto const block : *blocks) { |
if (!block->IsDeferred()) { |
- block->set_ao_number(BasicBlock::RpoNumber::FromInt(ao++)); |
+ block->set_ao_number(RpoNumber::FromInt(ao++)); |
} |
} |
for (auto const block : *blocks) { |
if (block->IsDeferred()) { |
- block->set_ao_number(BasicBlock::RpoNumber::FromInt(ao++)); |
+ block->set_ao_number(RpoNumber::FromInt(ao++)); |
} |
} |
} |
@@ -493,14 +490,13 @@ int InstructionSequence::NextVirtualRegister() { |
} |
-GapInstruction* InstructionSequence::GetBlockStart( |
- BasicBlock::RpoNumber rpo) const { |
+GapInstruction* InstructionSequence::GetBlockStart(RpoNumber rpo) const { |
const InstructionBlock* block = InstructionBlockAt(rpo); |
return GapInstruction::cast(InstructionAt(block->code_start())); |
} |
-void InstructionSequence::StartBlock(BasicBlock::RpoNumber rpo) { |
+void InstructionSequence::StartBlock(RpoNumber rpo) { |
DCHECK(block_starts_.size() == rpo.ToSize()); |
InstructionBlock* block = InstructionBlockAt(rpo); |
int code_start = static_cast<int>(instructions_.size()); |
@@ -509,7 +505,7 @@ void InstructionSequence::StartBlock(BasicBlock::RpoNumber rpo) { |
} |
-void InstructionSequence::EndBlock(BasicBlock::RpoNumber rpo) { |
+void InstructionSequence::EndBlock(RpoNumber rpo) { |
int end = static_cast<int>(instructions_.size()); |
InstructionBlock* block = InstructionBlockAt(rpo); |
if (block->code_start() == end) { // Empty block. Insert a nop. |
@@ -668,6 +664,11 @@ void FrameStateDescriptor::SetType(size_t index, MachineType type) { |
} |
+std::ostream& operator<<(std::ostream& os, const RpoNumber& rpo) { |
+ return os << rpo.ToSize(); |
+} |
+ |
+ |
std::ostream& operator<<(std::ostream& os, |
const PrintableInstructionSequence& printable) { |
const InstructionSequence& code = *printable.sequence_; |
@@ -681,13 +682,12 @@ std::ostream& operator<<(std::ostream& os, |
os << "CST#" << i << ": v" << it->first << " = " << it->second << "\n"; |
} |
for (int i = 0; i < code.InstructionBlockCount(); i++) { |
- BasicBlock::RpoNumber rpo = BasicBlock::RpoNumber::FromInt(i); |
+ RpoNumber rpo = RpoNumber::FromInt(i); |
const InstructionBlock* block = code.InstructionBlockAt(rpo); |
CHECK(block->rpo_number() == rpo); |
- os << "RPO#" << block->rpo_number(); |
+ os << "B" << block->rpo_number(); |
os << ": AO#" << block->ao_number(); |
- os << ": B" << block->id(); |
if (block->IsDeferred()) os << " (deferred)"; |
if (block->IsLoopHeader()) { |
os << " loop blocks: [" << block->rpo_number() << ", " |
@@ -697,8 +697,7 @@ std::ostream& operator<<(std::ostream& os, |
<< block->code_end() << ")\n predecessors:"; |
for (auto pred : block->predecessors()) { |
- const InstructionBlock* pred_block = code.InstructionBlockAt(pred); |
- os << " B" << pred_block->id(); |
+ os << " B" << pred.ToInt(); |
} |
os << "\n"; |
@@ -725,8 +724,7 @@ std::ostream& operator<<(std::ostream& os, |
} |
for (auto succ : block->successors()) { |
- const InstructionBlock* succ_block = code.InstructionBlockAt(succ); |
- os << " B" << succ_block->id(); |
+ os << " B" << succ.ToInt(); |
} |
os << "\n"; |
} |