OLD | NEW |
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 <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 } | 694 } |
695 | 695 |
696 private: | 696 private: |
697 Type type_; | 697 Type type_; |
698 int64_t value_; | 698 int64_t value_; |
699 }; | 699 }; |
700 | 700 |
701 | 701 |
702 class FrameStateDescriptor : public ZoneObject { | 702 class FrameStateDescriptor : public ZoneObject { |
703 public: | 703 public: |
704 FrameStateDescriptor(BailoutId bailout_id, int parameters_count, | 704 FrameStateDescriptor(const FrameStateCallInfo& state_info, |
705 int locals_count, int stack_count) | 705 int parameters_count, int locals_count, int stack_count) |
706 : bailout_id_(bailout_id), | 706 : bailout_id_(state_info.bailout_id()), |
| 707 frame_state_combine_(state_info.state_combine()), |
707 parameters_count_(parameters_count), | 708 parameters_count_(parameters_count), |
708 locals_count_(locals_count), | 709 locals_count_(locals_count), |
709 stack_count_(stack_count) {} | 710 stack_count_(stack_count) {} |
710 | 711 |
711 BailoutId bailout_id() const { return bailout_id_; } | 712 BailoutId bailout_id() const { return bailout_id_; } |
| 713 OutputFrameStateCombine state_combine() const { return frame_state_combine_; } |
712 int parameters_count() { return parameters_count_; } | 714 int parameters_count() { return parameters_count_; } |
713 int locals_count() { return locals_count_; } | 715 int locals_count() { return locals_count_; } |
714 int stack_count() { return stack_count_; } | 716 int stack_count() { return stack_count_; } |
715 | 717 |
716 int size() { return parameters_count_ + locals_count_ + stack_count_; } | 718 int size() { |
| 719 return parameters_count_ + locals_count_ + stack_count_ + |
| 720 1; // Includes context. |
| 721 } |
717 | 722 |
718 private: | 723 private: |
719 BailoutId bailout_id_; | 724 BailoutId bailout_id_; |
| 725 OutputFrameStateCombine frame_state_combine_; |
720 int parameters_count_; | 726 int parameters_count_; |
721 int locals_count_; | 727 int locals_count_; |
722 int stack_count_; | 728 int stack_count_; |
723 }; | 729 }; |
724 | 730 |
725 OStream& operator<<(OStream& os, const Constant& constant); | 731 OStream& operator<<(OStream& os, const Constant& constant); |
726 | 732 |
727 typedef ZoneDeque<Constant> ConstantDeque; | 733 typedef ZoneDeque<Constant> ConstantDeque; |
728 typedef std::map<int, Constant, std::less<int>, | 734 typedef std::map<int, Constant, std::less<int>, |
729 zone_allocator<std::pair<int, Constant> > > ConstantMap; | 735 zone_allocator<std::pair<int, Constant> > > ConstantMap; |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
831 int index = static_cast<int>(immediates_.size()); | 837 int index = static_cast<int>(immediates_.size()); |
832 immediates_.push_back(constant); | 838 immediates_.push_back(constant); |
833 return index; | 839 return index; |
834 } | 840 } |
835 Constant GetImmediate(int index) const { | 841 Constant GetImmediate(int index) const { |
836 DCHECK(index >= 0); | 842 DCHECK(index >= 0); |
837 DCHECK(index < static_cast<int>(immediates_.size())); | 843 DCHECK(index < static_cast<int>(immediates_.size())); |
838 return immediates_[index]; | 844 return immediates_[index]; |
839 } | 845 } |
840 | 846 |
841 int AddDeoptimizationEntry(FrameStateDescriptor* descriptor); | 847 class StateId { |
842 FrameStateDescriptor* GetDeoptimizationEntry(int deoptimization_id); | 848 public: |
843 int GetDeoptimizationEntryCount(); | 849 static StateId FromInt(int id) { return StateId(id); } |
| 850 int ToInt() const { return id_; } |
| 851 |
| 852 private: |
| 853 explicit StateId(int id) : id_(id) {} |
| 854 int id_; |
| 855 }; |
| 856 |
| 857 StateId AddFrameStateDescriptor(FrameStateDescriptor* descriptor); |
| 858 FrameStateDescriptor* GetFrameStateDescriptor(StateId deoptimization_id); |
| 859 int GetFrameStateDescriptorCount(); |
844 | 860 |
845 private: | 861 private: |
846 friend OStream& operator<<(OStream& os, const InstructionSequence& code); | 862 friend OStream& operator<<(OStream& os, const InstructionSequence& code); |
847 | 863 |
848 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet; | 864 typedef std::set<int, std::less<int>, ZoneIntAllocator> VirtualRegisterSet; |
849 | 865 |
850 Graph* graph_; | 866 Graph* graph_; |
851 Linkage* linkage_; | 867 Linkage* linkage_; |
852 Schedule* schedule_; | 868 Schedule* schedule_; |
853 ConstantMap constants_; | 869 ConstantMap constants_; |
854 ConstantDeque immediates_; | 870 ConstantDeque immediates_; |
855 InstructionDeque instructions_; | 871 InstructionDeque instructions_; |
856 int next_virtual_register_; | 872 int next_virtual_register_; |
857 PointerMapDeque pointer_maps_; | 873 PointerMapDeque pointer_maps_; |
858 VirtualRegisterSet doubles_; | 874 VirtualRegisterSet doubles_; |
859 VirtualRegisterSet references_; | 875 VirtualRegisterSet references_; |
860 Frame frame_; | 876 Frame frame_; |
861 DeoptimizationVector deoptimization_entries_; | 877 DeoptimizationVector deoptimization_entries_; |
862 }; | 878 }; |
863 | 879 |
864 OStream& operator<<(OStream& os, const InstructionSequence& code); | 880 OStream& operator<<(OStream& os, const InstructionSequence& code); |
865 | 881 |
866 } // namespace compiler | 882 } // namespace compiler |
867 } // namespace internal | 883 } // namespace internal |
868 } // namespace v8 | 884 } // namespace v8 |
869 | 885 |
870 #endif // V8_COMPILER_INSTRUCTION_H_ | 886 #endif // V8_COMPILER_INSTRUCTION_H_ |
OLD | NEW |