Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(762)

Side by Side Diff: src/compiler/instruction.h

Issue 707803002: [turbofan] move label generation to code generator (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/compiler/ia32/code-generator-ia32.cc ('k') | src/compiler/instruction.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_COMPILER_INSTRUCTION_H_ 5 #ifndef V8_COMPILER_INSTRUCTION_H_
6 #define V8_COMPILER_INSTRUCTION_H_ 6 #define V8_COMPILER_INSTRUCTION_H_
7 7
8 #include <deque> 8 #include <deque>
9 #include <iosfwd> 9 #include <iosfwd>
10 #include <map> 10 #include <map>
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 610
611 private: 611 private:
612 friend std::ostream& operator<<(std::ostream& os, 612 friend std::ostream& operator<<(std::ostream& os,
613 const PrintableInstruction& instr); 613 const PrintableInstruction& instr);
614 ParallelMove* parallel_moves_[LAST_INNER_POSITION + 1]; 614 ParallelMove* parallel_moves_[LAST_INNER_POSITION + 1];
615 }; 615 };
616 616
617 617
618 // This special kind of gap move instruction represents the beginning of a 618 // This special kind of gap move instruction represents the beginning of a
619 // block of code. 619 // block of code.
620 // TODO(titzer): move code_start and code_end from BasicBlock to here.
621 class BlockStartInstruction FINAL : public GapInstruction { 620 class BlockStartInstruction FINAL : public GapInstruction {
622 public: 621 public:
623 Label* label() { return &label_; } 622 static BlockStartInstruction* New(Zone* zone) {
624 BasicBlock::RpoNumber rpo_number() const { return rpo_number_; }
625 BasicBlock::Id id() const { return id_; }
626
627 static BlockStartInstruction* New(Zone* zone, BasicBlock::Id id,
628 BasicBlock::RpoNumber rpo_number) {
629 void* buffer = zone->New(sizeof(BlockStartInstruction)); 623 void* buffer = zone->New(sizeof(BlockStartInstruction));
630 return new (buffer) BlockStartInstruction(id, rpo_number); 624 return new (buffer) BlockStartInstruction();
631 } 625 }
632 626
633 static BlockStartInstruction* cast(Instruction* instr) { 627 static BlockStartInstruction* cast(Instruction* instr) {
634 DCHECK(instr->IsBlockStart()); 628 DCHECK(instr->IsBlockStart());
635 return static_cast<BlockStartInstruction*>(instr); 629 return static_cast<BlockStartInstruction*>(instr);
636 } 630 }
637 631
638 private: 632 private:
639 BlockStartInstruction(BasicBlock::Id id, BasicBlock::RpoNumber rpo_number) 633 BlockStartInstruction() : GapInstruction(kBlockStartInstruction) {}
640 : GapInstruction(kBlockStartInstruction),
641 id_(id),
642 rpo_number_(rpo_number) {}
643
644 BasicBlock::Id id_;
645 BasicBlock::RpoNumber rpo_number_;
646 Label label_;
647 }; 634 };
648 635
649 636
650 class SourcePositionInstruction FINAL : public Instruction { 637 class SourcePositionInstruction FINAL : public Instruction {
651 public: 638 public:
652 static SourcePositionInstruction* New(Zone* zone, SourcePosition position) { 639 static SourcePositionInstruction* New(Zone* zone, SourcePosition position) {
653 void* buffer = zone->New(sizeof(SourcePositionInstruction)); 640 void* buffer = zone->New(sizeof(SourcePositionInstruction));
654 return new (buffer) SourcePositionInstruction(position); 641 return new (buffer) SourcePositionInstruction(position);
655 } 642 }
656 643
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
918 const InstructionBlock* GetInstructionBlock(int instruction_index) const; 905 const InstructionBlock* GetInstructionBlock(int instruction_index) const;
919 906
920 bool IsReference(int virtual_register) const; 907 bool IsReference(int virtual_register) const;
921 bool IsDouble(int virtual_register) const; 908 bool IsDouble(int virtual_register) const;
922 909
923 void MarkAsReference(int virtual_register); 910 void MarkAsReference(int virtual_register);
924 void MarkAsDouble(int virtual_register); 911 void MarkAsDouble(int virtual_register);
925 912
926 void AddGapMove(int index, InstructionOperand* from, InstructionOperand* to); 913 void AddGapMove(int index, InstructionOperand* from, InstructionOperand* to);
927 914
928 Label* GetLabel(BasicBlock::RpoNumber rpo);
929 BlockStartInstruction* GetBlockStart(BasicBlock::RpoNumber rpo); 915 BlockStartInstruction* GetBlockStart(BasicBlock::RpoNumber rpo);
930 916
931 typedef InstructionDeque::const_iterator const_iterator; 917 typedef InstructionDeque::const_iterator const_iterator;
932 const_iterator begin() const { return instructions_.begin(); } 918 const_iterator begin() const { return instructions_.begin(); }
933 const_iterator end() const { return instructions_.end(); } 919 const_iterator end() const { return instructions_.end(); }
934 920
935 GapInstruction* GapAt(int index) const { 921 GapInstruction* GapAt(int index) const {
936 return GapInstruction::cast(InstructionAt(index)); 922 return GapInstruction::cast(InstructionAt(index));
937 } 923 }
938 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); } 924 bool IsGapAt(int index) const { return InstructionAt(index)->IsGapMoves(); }
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 int GetFrameStateDescriptorCount(); 979 int GetFrameStateDescriptorCount();
994 980
995 private: 981 private:
996 friend std::ostream& operator<<(std::ostream& os, 982 friend std::ostream& operator<<(std::ostream& os,
997 const PrintableInstructionSequence& code); 983 const PrintableInstructionSequence& code);
998 984
999 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet; 985 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet;
1000 986
1001 Zone* const zone_; 987 Zone* const zone_;
1002 InstructionBlocks* const instruction_blocks_; 988 InstructionBlocks* const instruction_blocks_;
989 IntVector block_starts_;
1003 ConstantMap constants_; 990 ConstantMap constants_;
1004 ConstantDeque immediates_; 991 ConstantDeque immediates_;
1005 InstructionDeque instructions_; 992 InstructionDeque instructions_;
1006 int next_virtual_register_; 993 int next_virtual_register_;
1007 PointerMapDeque pointer_maps_; 994 PointerMapDeque pointer_maps_;
1008 VirtualRegisterSet doubles_; 995 VirtualRegisterSet doubles_;
1009 VirtualRegisterSet references_; 996 VirtualRegisterSet references_;
1010 DeoptimizationVector deoptimization_entries_; 997 DeoptimizationVector deoptimization_entries_;
1011 }; 998 };
1012 999
1013 1000
1014 struct PrintableInstructionSequence { 1001 struct PrintableInstructionSequence {
1015 const RegisterConfiguration* register_configuration_; 1002 const RegisterConfiguration* register_configuration_;
1016 const InstructionSequence* sequence_; 1003 const InstructionSequence* sequence_;
1017 }; 1004 };
1018 1005
1019 1006
1020 std::ostream& operator<<(std::ostream& os, 1007 std::ostream& operator<<(std::ostream& os,
1021 const PrintableInstructionSequence& code); 1008 const PrintableInstructionSequence& code);
1022 1009
1023 } // namespace compiler 1010 } // namespace compiler
1024 } // namespace internal 1011 } // namespace internal
1025 } // namespace v8 1012 } // namespace v8
1026 1013
1027 #endif // V8_COMPILER_INSTRUCTION_H_ 1014 #endif // V8_COMPILER_INSTRUCTION_H_
OLDNEW
« no previous file with comments | « src/compiler/ia32/code-generator-ia32.cc ('k') | src/compiler/instruction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698