| Index: src/compiler/instruction.h
|
| diff --git a/src/compiler/instruction.h b/src/compiler/instruction.h
|
| index 75c3e9e34b0f94c0f1fc6fbe51e8d9727c2df756..4f6649ff738d33c2f139147fce597aee82712b97 100644
|
| --- a/src/compiler/instruction.h
|
| +++ b/src/compiler/instruction.h
|
| @@ -809,11 +809,13 @@ class InstructionBlock FINAL : public ZoneObject {
|
| inline bool IsLoopHeader() const { return loop_end_.IsValid(); }
|
|
|
| typedef ZoneVector<BasicBlock::RpoNumber> Predecessors;
|
| + Predecessors& predecessors() { return predecessors_; }
|
| const Predecessors& predecessors() const { return predecessors_; }
|
| size_t PredecessorCount() const { return predecessors_.size(); }
|
| size_t PredecessorIndexOf(BasicBlock::RpoNumber rpo_number) const;
|
|
|
| typedef ZoneVector<BasicBlock::RpoNumber> Successors;
|
| + Successors& successors() { return successors_; }
|
| const Successors& successors() const { return successors_; }
|
| size_t SuccessorCount() const { return successors_.size(); }
|
|
|
| @@ -825,12 +827,12 @@ class InstructionBlock FINAL : public ZoneObject {
|
| Successors successors_;
|
| Predecessors predecessors_;
|
| PhiInstructions phis_;
|
| - BasicBlock::Id id_;
|
| - BasicBlock::RpoNumber ao_number_; // Assembly order number.
|
| + const BasicBlock::Id id_;
|
| + const BasicBlock::RpoNumber ao_number_; // Assembly order number.
|
| // TODO(dcarney): probably dont't need this.
|
| - BasicBlock::RpoNumber rpo_number_;
|
| - BasicBlock::RpoNumber loop_header_;
|
| - BasicBlock::RpoNumber loop_end_;
|
| + const BasicBlock::RpoNumber rpo_number_;
|
| + const BasicBlock::RpoNumber loop_header_;
|
| + const BasicBlock::RpoNumber loop_end_;
|
| int32_t code_start_; // start index of arch-specific code.
|
| int32_t code_end_; // end index of arch-specific code.
|
| const bool deferred_; // Block contains deferred code.
|
| @@ -850,31 +852,34 @@ typedef ZoneVector<InstructionBlock*> InstructionBlocks;
|
| // TODO(titzer): s/IsDouble/IsFloat64/
|
| class InstructionSequence FINAL {
|
| public:
|
| - InstructionSequence(Zone* zone, const Schedule* schedule);
|
| + static InstructionBlocks* InstructionBlocksFor(Zone* zone,
|
| + const Schedule* schedule);
|
| +
|
| + InstructionSequence(Zone* zone, InstructionBlocks* instruction_blocks);
|
|
|
| int NextVirtualRegister() { return next_virtual_register_++; }
|
| int VirtualRegisterCount() const { return next_virtual_register_; }
|
|
|
| const InstructionBlocks& instruction_blocks() const {
|
| - return instruction_blocks_;
|
| + return *instruction_blocks_;
|
| }
|
|
|
| int InstructionBlockCount() const {
|
| - return static_cast<int>(instruction_blocks_.size());
|
| + return static_cast<int>(instruction_blocks_->size());
|
| }
|
|
|
| InstructionBlock* InstructionBlockAt(BasicBlock::RpoNumber rpo_number) {
|
| - return instruction_blocks_[rpo_number.ToSize()];
|
| + return instruction_blocks_->at(rpo_number.ToSize());
|
| }
|
|
|
| int LastLoopInstructionIndex(const InstructionBlock* block) {
|
| - return instruction_blocks_[block->loop_end().ToSize() - 1]
|
| + return instruction_blocks_->at(block->loop_end().ToSize() - 1)
|
| ->last_instruction_index();
|
| }
|
|
|
| const InstructionBlock* InstructionBlockAt(
|
| BasicBlock::RpoNumber rpo_number) const {
|
| - return instruction_blocks_[rpo_number.ToSize()];
|
| + return instruction_blocks_->at(rpo_number.ToSize());
|
| }
|
|
|
| const InstructionBlock* GetInstructionBlock(int instruction_index) const;
|
| @@ -961,7 +966,7 @@ class InstructionSequence FINAL {
|
| typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet;
|
|
|
| Zone* const zone_;
|
| - InstructionBlocks instruction_blocks_;
|
| + InstructionBlocks* const instruction_blocks_;
|
| ConstantMap constants_;
|
| ConstantDeque immediates_;
|
| InstructionDeque instructions_;
|
|
|